2009年7月31日金曜日

森由希

私は北海道札幌市生まれで、今でも北海道が大好きだし
自分が道産子であることをとても誇りに思っている。
いつかは帰りたい。
北海道出身だと言うと、食べ物がおいしくていいねとよく言われるが、
一番おいしいのは空気
新千歳空港を出たときいつも思う。

子どものころからつるまない子だった。
小学生のとき最初は4人で登校していたんだけど
小5のある日そのうちの2人が喧嘩して別々に登校することになって、
もう一人がその2人の片方についたから、なんとなく私はもう一方と
一緒に登校することにした。
たぶんそっちのほうが面白いと思ったんだ。
その子とは、今でも北海道に帰ったら会っている。

でもいつでもべったりだったわけじゃない。
中学では、登校は一緒だけど帰りは一人が多かった。
クラスの女子グループに入ることもなかった。
休み時間は本ばかり読んでた。
成績は中の上か上の下くらい。

中一のとき合唱コンクールの指揮者をすることになった。
別にそんなにやりたかったわけじゃないけど
いつまでたっても学級会が終わらないから、それで立候補した。
後で担任に「森がやってくれないかなと思っていた」と
言われたけど、あぁそうかとしか思わなかった。

入学したとき2年目の新設校だったから荒れてなかったし
校舎もきれいだったし、いい中学だったと思う。

ある日の社会の授業で先生が「高校に行っても図工がなくなるくらいで
今の時間割とほとんど変わらない」と言ったのを聞いて愕然として
それで高専に行くことにした。
こんな毎日が高校に行っても続くのかと思ったら耐えられなかった。

新設校だったからもあるけど、女子でこの中学から高専に行くのは
私が最初だった。
最初父さんは反対した。家を出て下宿しなくちゃ行けないから。
経済的理由じゃなくて、やっぱり女の子だったから。
父さんを説得してくれたのはじいちゃんだった。
「自分が好きなことしてきたんだから、娘にも好きなことやらせてやれ」
と言ってくれた。
父さんはじいちゃんの電気屋を継ぐために電気関係の大学にいったんだけど
ゴルフをやりたくて大学を辞めて、ゴルフレッスンの会社を興した。
だから、じいちゃんの言うことは正しい。

私が入った情報工学科は40人中女子は6人、卒業するときは28人になってた。
高専の5年間は楽しかった。
自由だったし、授業も自分にあってた。
だから成績は常に3位くらいだった。
吹奏楽部に入って、最初はアルトサックスを吹いていたけれど
部長になって、部員が少なくて、また指揮者をすることになった。
この先またすることになるかもしれない、2度あることは3度ある。

4年生のときに女子寮ができて、最後の2年間だけ入った。
寮生活はまぁ普通。校舎まで近くていいくらい。
寮での一番の思い出は、9.11をテレビで生で見ていたことかな。

父さんと高専行く条件として大学に編入することを約束していたから、
最初から大学に編入するつもりだった。
5年間情報工学科にいるうちに、なんか別のことをしてみたくなった。
それで工学部じゃなくて理学部に入ろうと思った。なんとなく。
それで高専からの編入を受け付けている理学部がある東工大を受けることにした。
この高専から東工大の工学部に編入した人はたくさんいたけど、
理学部に編入したのは私が初めてだった。
次の初めてはなんだろうな。2度あることは3度ある。

東工大の理学部に編入する場合、3年次じゃなくて2年次編入になる。
今でも同じ学年の物理学科の女の子達には感謝している。
編入生の私を普通に本当に当たり前のように
最初から一緒みたいに仲良くしてくれた。
なんだろうな。高専のときもそうだったけど理工学部にいる女の子って
さばさばしていて、すごく気持ちがいい。
学部時代はよくバイトしていたし、よく遊んでいた。
多くはないけど、この先も定期的に会うだろう友達もできた。
それから、大切な人に出会うことができた。

これで森由希の話はおしまい。ここからは案西由希の話だから。

2009年7月29日水曜日

サッカー観戦

久々の等々力競技場

ついさきほどキックオフ

鹿島アントラーズのアウェーのユニホームって黄色だったっけ

風がここち良い


More...

2009年7月28日火曜日

ポケベル入力

私は携帯世代だけど、ポケベル入力ができないのだ。


More...

2009年7月24日金曜日

週末も雨

「なんだか梅雨みたいだね」

「いや、これって梅雨でしょ」

ということで、梅雨明けの発表は間違ってたという認識で夫婦の意見は
一致したわけだが、

そもそも、なんで早まっちゃったのかなと考えだし

梅雨明けが発表されたときのニュースでの天気図は、中国地方の北に
梅雨前線が残っていて、反対側は関東の東側に抜けてて、なんか関東
の上空だけスッポリ前線がなくなってる感じだったはず。

あれでも確か、太平洋高気圧が南から張り出してきて、それによって
梅雨前線が上の方に押しやられて梅雨明けするんじゃなかったっけ?

といつぞやの理科を思いだし (自信ないけど)

てことは太平洋高気圧が南から発達してこないと
梅雨明けにならないのかなぁ

などと一人でかってに納得

したところで、このジメジメから逃れられるわけでもなく

洗濯を憂慮する日々はつづくのでした

2009年7月23日木曜日

Android - Gradient -

Android でグラデーションを描くには、次のクラスを使う

・LinearGradient
・RadialGradient
・SweepGradient

それぞれ Shader クラスを継承していて

Shader s = new LinearGradient(0, 0, 10, 10, Color.BLACK, Color.WHITE, Shader.TileMode.CLAMP);
Paint p = new Paint();

p.setShader(s);
のようにして使う



・LinearGradient
直線方向のグラデーションを描く

Public Constructors

public LinearGradient (float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile)

Create a shader that draws a linear gradient along a line.

Parameters
x0 : The x-coordinate for the start of the gradient line
y0 : The y-coordinate for the start of the gradient line
x1 : The x-coordinate for the end of the gradient line
y1 : The y-coordinate for the end of the gradient line
colors : The colors to be distributed along the gradient line
positions : May be null. The relative positions [0..1] of each corresponding color in the colors array. If this is null, the the colors are distributed evenly along the gradient line.
tile : The Shader tiling mode



public LinearGradient (float x0, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile)

Create a shader that draws a linear gradient along a line.

Parameters
x0 : The x-coordinate for the start of the gradient line
y0 : The y-coordinate for the start of the gradient line
x1 : The x-coordinate for the end of the gradient line
y1 : The y-coordinate for the end of the gradient line
color0 : The color at the start of the gradient line.
color1 : The color at the end of the gradient line.
tile : The Shader tiling mode




・RadialGradient
円環のグラデーションを描く

Public Constructors

public RadialGradient (float x, float y, float radius, int[] colors, float[] positions, Shader.TileMode tile)

Create a shader that draws a radial gradient given the center and radius.

Parameters
x : The x-coordinate of the center of the radius
y : The y-coordinate of the center of the radius
radius : Must be positive. The radius of the circle for this gradient
colors : The colors to be distributed between the center and edge of the circle
positions : May be NULL. The relative position of each corresponding color in the colors array. If this is NULL, the the colors are distributed evenly between the center and edge of the circle.
tile : The Shader tiling mode



public RadialGradient (float x, float y, float radius, int color0, int color1, Shader.TileMode tile)

Create a shader that draws a radial gradient given the center and radius.

Parameters
x : The x-coordinate of the center of the radius
y : The y-coordinate of the center of the radius
radius : Must be positive. The radius of the circle for this gradient
color0 : The color at the center of the circle.
color1 : The color at the edge of the circle.
tile : The Shader tiling mode



・SweepGradient
色の変化方向が円環になっているグラデーションを描く

Public Constructors

public SweepGradient (float cx, float cy, int[] colors, float[] positions)

A subclass of Shader that draws a sweep gradient around a center point.

Parameters
cx : The x-coordinate of the center
cy : The y-coordinate of the center
colors : The colors to be distributed between around the center. There must be at least 2 colors in the array.
positions : May be NULL. The relative position of each corresponding color in the colors array, beginning with 0 and ending with 1.0. If the values are not monotonic, the drawing may produce unexpected results. If positions is NULL, then the colors are automatically spaced evenly.




public SweepGradient (float cx, float cy, int color0, int color1)

A subclass of Shader that draws a sweep gradient around a center point.

Parameters
cx : The x-coordinate of the center
cy : The y-coordinate of the center
color0 : The color to use at the start of the sweep
color1 : The color to use at the end of the sweep




サンプルコードはこちら
More...


package yanzm.example.gradienttest;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.RadialGradient;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.SweepGradient;
import android.os.Bundle;
import android.view.View;

public class GradientTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new GradientTestView(this));
}

private static class GradientTestView extends View {
private Paint mPaint;
private final int[] mColors;
private int CENTER_X;
private int CENTER_Y;

private Shader s1, s2, r1, r2, l1, l2;
float r;

public GradientTestView(Context context) {
super(context);

mColors = new int[] {
0xFFFF0000, 0xFFFF00FF, 0xFF0000FF, 0xFF00FFFF, 0xFF00FF00,
0xFFFFFF00, 0xFFFF0000
};
s1 = new SweepGradient(0, 0, mColors, null);
s2 = new SweepGradient(0, 0, Color.BLACK, Color.GREEN);
r1 = new RadialGradient(0, 0, 50, mColors, null, Shader.TileMode.CLAMP);
r2 = new RadialGradient(0, 0, 50, Color.BLACK, Color.BLUE, Shader.TileMode.CLAMP);
l1 = new LinearGradient(-30, 30, 30, 30, mColors, null, Shader.TileMode.CLAMP);
l2 = new LinearGradient(-30, 60, 30, 60, Color.BLACK, Color.RED, Shader.TileMode.CLAMP);

mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(32);

}

@Override
protected void onDraw(Canvas canvas) {
canvas.translate(CENTER_X, CENTER_Y/2);

mPaint.setShader(s1);
canvas.drawOval(new RectF(-r, -r, r, r), mPaint);

mPaint.setShader(r1);
mPaint.setStyle(Paint.Style.FILL);
canvas.drawCircle(0, 0, CENTER_Y/4, mPaint);

canvas.translate(0, CENTER_Y);

mPaint.setShader(s2);
mPaint.setStyle(Paint.Style.STROKE);
canvas.drawOval(new RectF(-r, -r, r, r), mPaint);

mPaint.setShader(r2);
mPaint.setStyle(Paint.Style.FILL);
canvas.drawCircle(0, 0, CENTER_Y/4, mPaint);

canvas.translate(-CENTER_X*3/4, -CENTER_Y/2);

mPaint.setShader(l1);
canvas.drawRect(-30, -30, 30, 30, mPaint);

canvas.translate(CENTER_X*3/2, 0);
mPaint.setShader(l2);
canvas.drawRect(-30, -30, 30, 30, mPaint);
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh){
CENTER_X = this.getWidth()/2;
CENTER_Y = this.getHeight()/2;
r = CENTER_Y/2 - mPaint.getStrokeWidth()*0.5f;
}
}
}




2009年7月22日水曜日

緑ヶ丘霊園

南武線津田沼駅降りてすぐの緑ヶ丘霊園に散歩に行きました。




津田沼駅はとてもレトロな駅で、もし南武線に急行があったら絶対止まらないだろうな。







駅のすぐ横に踏み切りがあるのもいい感じ。









駅から霊園に向かう道も太い並木があって、昔から変わらないんだろうなぁと思う。





いやー緑ヶ丘霊園って広いですね。それに木がたくさんあって、風が気持ちいい。


ネコさん、こんにちは




そこ、居心地いいですか? 墓の前にいるのわかるかな?

蒲田散歩

月曜日は蒲田に散歩に行きました。

夫と息子は自転車で、私は電車で行って現地で待ち合わせ。
商店街をぶらぶらしました。



おやつは『コアラのマーチ ミルクプリン味』



(がちゃがちゃしたいなぁ)



ゆうがお ってこんなに大きいのか。初めて見た。北海道では見ないからなぁ。



ネクタリンも初めて見た。ネクターってジュースのやつですね。

How to user pyROOT 応用編 その6

・軸を log スケールにする


cv = ROOT.TCanvas("cv", "Graph Test", 800, 800)

cv.SetLogx()
cv.SetLogy()



・grid を描く


cv = ROOT.TCanvas("cv", "Graph Test", 800, 800)

cv.SetGridx()
cv.SetGridy()



・大題を付ける


cv = ROOT.TCanvas("cv", "Graph Test", 800, 800)

pl = ROOT.TPaveLabel(0.3, 0.91, 0.7, 0.99, "Global Title")
pl.Draw()

pad = ROOT.TPad("pad", "title", 0, 0, 1, 0.9)
pad.Draw()
pad.cd()

graph.Draw("APL")

cv.Update();






・X軸, Y軸のタイトルを修飾


axisX = graph.GetXaxis()
axisX.SetTitle("x")
axisX.SetLabelFont(112)
axisX.SetTitleOffset(0.5)
axisX.SetTitleSize(0.07)

axisY = graph.GetYaxis()
axisY.SetTitle("x**2")






・ヒストグラムの修飾


hpx.SetFillColor(2)
hpx.SetLineWidth(5)






hp1.SetFillColor(2)
hp1.SetFillStyle(3002)
hp1.Draw()

hp2.SetFillColor(4)
hp2.SetFillStyle(3002)
hp2.Draw("SAME")






・マーカーの修飾


graph = ROOT.TGraph()
graph.SetMarkerColor(6)
graph.SetMarkerSize(1)
graph.SetMarkerStyle(12)

雨が傘を打つ音はどうして雑音にならないんだろう

どうして私たちは持っているもので満足できないんだろう

本当は認識しているよりも遥かに多くのものを

持っていて

貰っていて


どうしてそれだけでみんなが幸せになれないんだろう

2009年7月19日日曜日

Android - Resource -

res ディレクトリ以下のサブディレクトリ

res/anim/フレームアニメーションや Tweened アニメーション用の XML ファイル
res/drawable/イメージファイル (.png, .9.png, .jpg)
res/layout/レイアウト用 XML ファイル
res/values/ソースファイル内の値を利用するような XML ファイル
(colors.xml, strings.cml, styles.xml)
res/xml/任意の XML ファイル
res/raw/任意の Raw ファイル


Color の設定

/res/values/colors.xml


color_values


・resources_name : 個々の色情報を識別するための名前
・color_values : 色情報 (#RGB, #ARGB, #RRGGBB, #AARRGGBB)


TextView textView = new TextView(this);
Resources resources = getResources();
int color = resources.getColor(R.color.color1);
textView.setTextColor(color);



String の設定

/res/values/strings.xml


string_values


・resources_name : 個々の文字列情報を識別するための名前
・string_values : 文字列 ( 装飾 : 太字, : 斜体, : 下線 )

装飾あり : getText(ResourceID)
装飾なし : getString(ResourceID)



TextView textView = new TextView(this);
CharSequence str = getText(R.string.string1);
textView.setTextColor(str);




Icon の設定


アイコンの画像は drawable ディレクトリに入れる
独自のアイコンを作る場合は
http://developer.android.com/intl/ja/guide/practices/ui_guidelines/icon_design.html
にデザインのガイドラインがある

また、Androidが持っているシステムアイコンを使うには、

xml では
android:icon="@android:drawable/ic_menu_edit"

java では
.setIcon("android.R.drawable.ic_menu_edit");

のように記述する





リソースファイル内で他のリソースを利用

main.xml で Color Resource や String Resource を使うには

@color/resource_name
@string/resource_name

のように記述する



android:layout_width="fill_parent"
android:laytou_height="wrap_content"
android:textColor="@color/color1"
android:text="@string/app_name"
/>



携帯端末の地域/言語情報をもとにリソースを切り替える

特定の地域/言語情報のリソース用サブディレクトリ
= サブディレクトリ名 + '-' + 言語設定情報 + '-' + 地域設定情報

地域/言語情報に対応するサブディレクトが無い場合は、
標準のサブディレクトリ(- のないやつ)のリソースが参照される

res/values標準のサブディレクトリ
res/values-en-rGB英語(イギリス)環境用
res/values-en-rUS英語(アメリカ合衆国)環境用
res/values-ja日本語環境用

2009年7月18日土曜日

同窓会?

えー研究室の飲み会に参加してます。
場所は恵比寿ガーデンステーションで一次会
は18:30~20:30で、今二次会に突入しました。
なぜか二次会の場所も一次会と同じ。
デザートはバニラアイスクリームか
リンゴシャーベットかオレンジシャーベット
しかないのがつらい。

2009年7月17日金曜日

How to use pyROOT 基礎編 その8

・直線を描く

line = ROOT.TLine(start_x, start_y, end_x, end_y)
line.Draw()


・長方形を描く

box = ROOT.TBox(start_x, start_y, end_x, end_y)
box.Draw("SAME")



・円を描く

arc = ROOT.TArc(center_x, center_y, radius)
arc.Draw("SAME")


・楕円を描く

ell = ROOT.TEllipse( center_x, center_y, radius_x, radius_y)
ell.Draw("SAME")


・マーカーを描く

mark = ROOT.TMarker( x, y, 20)
mark.Draw("SAME")


・文字を入れる

text = ROOT.TText( start_x, start_y, "This is a pen." )
text.Draw("SAME")





#/bin/usr/env python

import sys, os
import ROOT


if __name__=='__main__':


graph = ROOT.TGraph()

for x in range(10) :
np = graph.GetN()
graph.SetPoint(np, x, x)

cv = ROOT.TCanvas("cv", "Graphics Example", 200, 10, 700, 500)


graph.SetLineWidth(3)
graph.SetLineColor(1)
graph.SetLineStyle(1)
graph.Draw("APC")

line = ROOT.TLine( 1, 3, 1, 8)
line.SetLineWidth(3)
line.SetLineColor(2)
line.SetLineStyle(2)
line.Draw("SAME")

box = ROOT.TBox( 3, 1, 5, 2)
box.SetFillColor(3)
box.Draw("SAME")

arc = ROOT.TArc( 5, 6, 2)
arc.SetLineWidth(3)
arc.SetLineColor(4)
arc.SetLineStyle(1)
arc.Draw("SAME")

ell = ROOT.TEllipse( 8, 3, 1.3, 2)
ell.SetLineWidth(3)
ell.SetLineColor(6)
ell.SetLineStyle(1)
ell.Draw("SAME")

mark = ROOT.TMarker( 2, 3, 20 )
mark.Draw("SAME")

text = ROOT.TText( 3, 9, "This is a pen." )
text.Draw("SAME")

cv.Update()


# export
cv.Print("graphics.png")

How to use pyROOT 基礎編 その7

Ntuple

ntuple は、 double, triple, quadruple, ・・・ の n番目のこと
Ntuple クラスを使うと、いろいろなヒストグラムを作ることができる


Ntuple の使い方は

1. 空の Ntuple を作成する
ntuple = ROOT.TNtuple("name", "title", "変数リスト" [, バッファサイズ])

変数リストは次のように ':' で区切る
"x:y:z:energy"
"px:py"


2. ファイルからデータを読み込む
ntuple.Fill(px, py)

3. Ntuple の中身を確認する
ntuple.Print()

4. ヒストグラムを作成する
ntuple.Draw("変数リスト" [, "条件"] [, "表示オプション"] )

変数リストは、ヒストグラムを作成するときに使用する式
"x"
"sqrt(x)"
"x+y/z"
"x:y"
"x:y:z"
"x*2:sqrt(y)"


条件は特定のデータからヒストグラムを作成することに使う
"x<0"
"sart(x+y)>4"
"x>0&&z<0"



* 条件用の変数を作成するには TCut を使う
cut1 = ROOT.TCut("x>0 && y>0 && z > 0")

複数の条件を組み合わせる
ntuple.Draw("sqrt(x):y*2", cut1 && cut2)



#/bin/usr/env python

import sys, os
import ROOT


if __name__=='__main__':


if len(sys.argv) < 2 :
sys.exit(1)

if not os.path.exists(sys.argv[1]) :
sys.exit(1)

# read data from file
fin = open(sys.argv[1], "r")
fins = fin.readlines()
fin.close()


# create Ntuple
ntuple = ROOT.TNtuple("n", "Tuple Example", "x:y:z:energy")


# set data point
for data in fins :
item = data.split(None)
ntuple.Fill(float(item[0]), float(item[1]),
float(item[2]), float(item[3]))

# print
ntuple.Print()

cv = ROOT.TCanvas("cv", "Graph Example", 200, 10, 700, 500)

ntuple.Draw("sqrt(x):y*2 >> hist", "z<0", "APL")
cv.Update()


# export
cv.Print("ntuple1.png")




ntuple に データを読み込ませたあと中身を表示するとこんな感じ

$ python ntuple1.py data2.dat
******************************************************************************
*Tree :n : Tuple Example *
*Entries : 5 : Total = 2773 bytes File Size = 0 *
* : : Tree compression factor = 1.00 *
******************************************************************************
*Br 0 :x : *
*Entries : 5 : Total Size= 622 bytes One basket in memory *
*Baskets : 0 : Basket Size= 32000 bytes Compression= 1.00 *
*............................................................................*
*Br 1 :y : *
*Entries : 5 : Total Size= 622 bytes One basket in memory *
*Baskets : 0 : Basket Size= 32000 bytes Compression= 1.00 *
*............................................................................*
*Br 2 :z : *
*Entries : 5 : Total Size= 622 bytes One basket in memory *
*Baskets : 0 : Basket Size= 32000 bytes Compression= 1.00 *
*............................................................................*
*Br 3 :energy : *
*Entries : 5 : Total Size= 652 bytes One basket in memory *
*Baskets : 0 : Basket Size= 32000 bytes Compression= 1.00 *
*............................................................................*

How to use pyROOT 基礎編 その6

関数 - Function -


1次元関数

TF1 クラスを使用する


f1 = ROOT.TF1('f1', 'x * sin(x) * exp(-0.1 * x)', -10, 10)
f1.Draw()





2次元関数

TF2 クラスを使用する


f2 = ROOT.TF2('f2', 'abs(sin(x) / x) * y * cos(y)', -5, 5, -5, 5)
f2.Draw("surf")
#f2.Draw("cont1")
#f2.Draw("lego")


f2.Draw("surf")



f2.Draw("cont1")



f2.Draw("lego")





パラメータ付きの関数

パラメータを [0], [1], [2],,, で置き換える


f3 = ROOT.TF1('f3', '[0] + [1] * exp(x)', -5, 5)

// set value of parameters
f3.setParameters(1, 2)

f3.Draw()


fitting にこの関数をつかう場合、設定したパラメータ値が初期値になる

How to use pyROOT 基礎編 その5

2次元データのプロット

TGraph というクラスを使用する


次のコードでは、引数にプロットするデータファイルを指定する。

データファイルの形式は
data_x data_y



#/bin/usr/env python

import sys, os
import ROOT


if __name__=='__main__':


if len(sys.argv) < 2 :
sys.exit(1)

if not os.path.exists(sys.argv[1]) :
sys.exit(1)

# read data from file
fin = open(sys.argv[1], "r")
fins = fin.readlines()
fin.close()


graph = ROOT.TGraph()

# set data point
for data in fins :
item = data.split(None)
np = graph.GetN()
graph.SetPoint(np, float(item[0]), float(item[1]))


cv = ROOT.TCanvas("cv", "Graph Example", 200, 10, 700, 500)

pad = cv.cd()
pad.SetGridx(1)
pad.SetGridy(1)

graph.Draw("APL")
cv.Update()


# export
cv.Print("graph1.png")






エラーバー付きのプロット

エラーバーを付けてプロットするには、 TGraphErrors クラスを使用する

ここでの引数にしていするデータファイルの形式は
data_x data_y data_x_err data_y_err



#/bin/usr/env python

import sys, os, array
import ROOT


if __name__=='__main__':


if len(sys.argv) < 2 :
sys.exit(1)

if not os.path.exists(sys.argv[1]) :
sys.exit(1)

# read data from file
fin = open(sys.argv[1], "r")
fins = fin.readlines()
fin.close()


dat = {'X' : array.array('f'),
'X_ERR' : array.array('f'),
'Y' : array.array('f'),
'Y_ERR' : array.array('f')}


# set data point
for data in fins :
item = data.split(None)
dat['X'].append(float(item[0]))
dat['X_ERR'].append(float(item[2]))
dat['Y'].append(float(item[1]))
dat['Y_ERR'].append(float(item[3]))


graph = ROOT.TGraphErrors(len(dat), dat['X'], dat['Y'],
dat['X_ERR'], dat['Y_ERR'])


cv = ROOT.TCanvas("cv", "Graph Example", 200, 10, 700, 500)

pad = cv.cd()
pad.SetGridx(1)
pad.SetGridy(1)

graph.Draw("APL")
cv.Update()


# export
cv.Print("graph2.png")






Tips プロット時のオプション

Draw("**") のときの ** を変えることで、いろいろなグラフが描ける

A : 軸をグラフの周りに描く
P : データを指定したマーカー (default は ・) でプロットする
L : 折れ線グラフ
C : データの間を滑らかな曲線で結ぶ


1次関数で fitting


#/bin/usr/env python

import sys, os, array
import ROOT


if __name__=='__main__':


if len(sys.argv) < 2 :
sys.exit(1)

if not os.path.exists(sys.argv[1]) :
sys.exit(1)

# read data from file
fin = open(sys.argv[1], "r")
fins = fin.readlines()
fin.close()


dat = {'X' : array.array('f'),
'X_ERR' : array.array('f'),
'Y' : array.array('f'),
'Y_ERR' : array.array('f')}


# set data point
for data in fins :
item = data.split(None)
dat['X'].append(float(item[0]))
dat['X_ERR'].append(float(item[2]))
dat['Y'].append(float(item[1]))
dat['Y_ERR'].append(float(item[3]))


graph = ROOT.TGraphErrors(len(dat), dat['X'], dat['Y'],
dat['X_ERR'], dat['Y_ERR'])


# fitting
graph.Fit("pol1")

# output fitting parameters
ROOT.gStyle.SetOptFit()

cv = ROOT.TCanvas("cv", "Graph Example", 200, 10, 700, 500)

pad = cv.cd()
pad.SetGridx(1)
pad.SetGridy(1)

graph.Draw("AP")
cv.Update()

# export
cv.Print("graph3.png")


How to use pyROOT 応用編 その5

ヒストグラムの一部を表示する

GetXaxis() と SetRange()
で X軸 の表示範囲を設定する



#/bin/usr/env python

import sys, math
import ROOT


if __name__=='__main__':

cv = ROOT.TCanvas("cv", "Histogram Example", 200, 10, 700, 500)

# create histogram ( identify, Title, number of class, xmin, xmax )
h1 = ROOT.TH1S('h', 'px', 100, -5., 5.)

for i in xrange(25000):
px = ROOT.gRandom.Gaus()
h1.Fill(px)

# fitting
h1.Fit("gaus")

# output fitting parameters
ROOT.gStyle.SetOptFit()

# set xrange
axisX = h1.GetXaxis()
axisX.SetRange(axisX.FindBin(-1), axisX.FindBin(1))

h1.Draw()
cv.Update()

# export
cv.Print("histogram6.png")


How to use pyROOT 基礎編 その3

ビルトイン関数で fitting

2. ヒストグラムの fitting

h1 = ROOT.TH1S(...)

・Gaussian fitting
h1.Fit("gaus")

・exponential fitting
h1.Fit("expo")

n次のべき関数 fitting
h1.Fit("poln")



fitting parameters を表示するには
ROOT.gStyle.SetOptFit()




#/bin/usr/env python

import sys, math
import ROOT


if __name__=='__main__':

cv = ROOT.TCanvas("cv", "Histogram Example", 200, 10, 700, 500)

# create histogram ( identify, Title, number of class, xmin, xmax )
h1 = ROOT.TH1S('h', 'px', 100, -5., 5.)

for i in xrange(25000):
px = ROOT.gRandom.Gaus()
h1.Fill(px)

# fitting
h1.Fit("gaus")

# output fitting parameters
ROOT.gStyle.SetOptFit()

h1.Draw()
cv.Update()


# export
cv.Print("histogram5.png")



How to use pyROOT 基礎編 その2

ヒストグラム - Histogram -


1. 1次元のヒストグラム

TH1S クラスを使う

引数は、 (名前, グラフの題名, ヒストグラムの階級数, xmin, xmax)



#/bin/usr/env python

import sys, math
import ROOT


if __name__=='__main__':

cv = ROOT.TCanvas("cv", "Histogram Example", 200, 10, 700, 500)

# create histogram ( identify, Title, number of class, xmin, xmax )
h1 = ROOT.TH1S('h', 'px', 100, -1., 1.)

for i in xrange(50000):
px = ROOT.gRandom.Gaus()
h1.Fill(px)

h1.Draw()
cv.Update()


# export
cv.Print("histogram1.png")






Draw() の引数を変えて、いろいろなヒストグラムを描くことができる


・エラーバー Draw("E")



・折れ線 Draw("L")



・点 Draw("P")

2009年7月13日月曜日

Android - Sensor を使う -

センサーの種類

Sensor クラスで定義されているセンサーの種類の定数

定数名説明
TYPE_ACCELEROMETER加速度1
TYPE_MAGNETIC_FIELD磁界2
TYPE_ORIENTATION傾き3
TYPE_GYROSCOPEジャイロスコープ4
TYPE_LIGHT輝度5
TYPE_PRESSURE気圧6
TYPE_TEMPERATURE温度7
TYPE_PROXIMITY近接8
TYPE_ALLすべてのセンサー-1

電車からandroid に愛を込めて

今東急線の帰宅ラッシュのなかで書いてます。
やっぱりソフトキーボードは打ちづらい。
mを押そうとしてdelを押してしまう。
やっぱり書くより見るほうがいいかな。
なんかいい方法が欲しいな。つくっちゃう?

2009年7月12日日曜日

Android - Toast を使う -




More...


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class ToastSample extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

findViewById(R.id.button_long).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(ToastSample.this, "Show Toast Long", Toast.LENGTH_LONG)
.show();
}
});

findViewById(R.id.button_short).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(ToastSample.this, "Show Toast Short", Toast.LENGTH_SHORT)
.show();
}
});
}
}

Android - Dialog を使う -

Dialog





AlertDialog






DatePickerDialog






TimePickerDialog






ProgressDialog

progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);



progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);





More...



res/layout/dialog_layout.xml


android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_question"
/>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center"
android:padding="30dip"
>
android:id="@+id/dialog_coffee"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_coffee_label"
android:layout_weight="1"
/>
android:id="@+id/dialog_tea"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_tea_label"
android:layout_weight="1"
/>







import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TimePicker;

public class DialogTest extends Activity {

EditText editText;

Dialog dialog;
AlertDialog alertDialog;
DatePickerDialog datePickerDialog;
TimePickerDialog timePickerDialog;
ProgressDialog progressDialog;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

editText = (EditText) findViewById(R.id.text);

setDialog();
setAlertDialog();
setDatePickerDialog();
setTimePickerDialog();
setProgressDialog();
}

// Dialog
public void setDialog(){
dialog = new Dialog(DialogTest.this);
dialog.setContentView(R.layout.dialog_layout);
dialog.setTitle("飲み物は?");
dialog.findViewById(R.id.dialog_coffee).setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
dialog.dismiss();
}
}
);
dialog.findViewById(R.id.dialog_tea).setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
dialog.dismiss();
}
}
);

dialogButton = (Button) findViewById(R.id.dialog_test);
dialogButton.setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
dialog.show();
}
}
);
}

// AlertDialog
public void setAlertDialog(){
alertDialog = new AlertDialog.Builder(DialogTest.this)
.setTitle("給食")
.setMessage("カレーライスは好きですか?")
.setIcon(R.drawable.icon)
.setPositiveButton("はい", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface di, int whichButton) {
}
})
.setNegativeButton("いいえ", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface di, int whichButton) {
}
})
.setNeutralButton("どちらでもない", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface di, int whichButton) { }
})
.create();

findViewById(R.id.alertDialog_test).setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
alertDialog.show();
}
});
}

// DatePickerDialog
public void setDatePickerDialog(){

DatePickerDialog.OnDateSetListener listener =
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker pikcer, int year, int month, int day) {
editText.setText(year + "年" + month + "月" + day + "日");
}
};

datePickerDialog = new DatePickerDialog(DialogTest.this, listener, 2009, 7, 12);

findViewById(R.id.datePickerDialog_test).setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
datePickerDialog.show();
}
});
}

// TimePickerDialog
public void setTimePickerDialog() {

TimePickerDialog.OnTimeSetListener listener =
new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker picker, int hour, int min) {
editText.setText(String.format("%02d時 %02d分", hour, min));
}
};

timePickerDialog = new TimePickerDialog(DialogTest.this, listener, 0, 0, true);

findViewById(R.id.timePickerDialog_test).setOnClickListener(
new View.OnClickListener() {
public void onClick(View v){
timePickerDialog.show();
}
});
}

// ProgressDialog
public void setProgressDialog() {

progressDialog = new ProgressDialog(this);
progressDialog.setTitle("調理中");
progressDialog.setMessage("カレーライスを作ってます~");
progressDialog.setIndeterminate(false);
//progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMax(10);
progressDialog.setCancelable(true);
progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
public void onCancel(DialogInterface di) {

}
});

findViewById(R.id.progressDialog_test).setOnClickListener(
new View.OnClickListener() {
public void onClick(View view) {
progressDialog.show();

new Thread(new Runnable() {
public void run() {
try {
for (int i=0; i < progressDialog.getMax(); i++) {
progressDialog.setProgress(i);
Thread.sleep(1000);
}
}catch (InterruptedException e){
}
progressDialog.dismiss();
}
}).start();
}
});
}

勉強会/Android SDK WG 第5回 セッション

昨日、日本 Android の会のSDK WG に行ってきました。
組み込み系の話はちょっと私には難しくてよくわからなかった
けれど、アプリの話はいろいろ参考になりました。
キーボードの話がおもしろかったなぁ。


セッションの後の飲み会では、たくさんの方と
お話することができてとても楽しかったです。
ありがとうございました!

2009年7月10日金曜日

How to use pyROOT 応用編 その4

関数の表示


identity 関数の引数 x は 長さ 4 の配列で、 (x, y, z, t) を表す。
ここでの TF1 の引数は ( グラフのタイトル、関数、関数の範囲 )
で、ROOT の TF1 コンストラクタには引数は与えられない。


#/bin/usr/env python

import sys, math
from ROOT import *

def identity( x ):
return x[0]

if __name__=='__main__' :

# create an identity function
f = TF1( 'pyf1', identity, -1., 1. )

# plot the function
cv = TCanvas()
f.Draw()

# export
cv.Print("graphtest6.png")







ここでの TF1 の引数は ( グラフのタイトル、関数、関数の範囲、媒介変数の数)
で、ROOT の TF1 コンストラクタには、2つの媒介変数が指定される。


import sys, math
from ROOT import *

class Linear:
def __call__(self, x, par):
return par[0] + x[0] * par[1]

if __name__=='__main__' :

# create a linear function with offset 5, and pitch 2
f = TF1( 'pyf2', Linear(), -1., 1., 2 )
f.SetParameters( 5., 2. )


# plot the function
cv = TCanvas()
f.Draw()


# export
cv.Print("graphtest7.png")


How to use pyROOT 応用編 その3

任意関数での ヒストグラムの fitting


#/bin/usr/env python

import sys, math
import ROOT


class Linear:
def __call__(self, x, par):
return par[0] + x[0] * par[1]

if __name__=='__main__':

cv = ROOT.TCanvas("cv", "Fitting Example", 200, 10, 700, 500)

# create a linear function for fitting
f = ROOT.TF1('f', Linear(), -1., 1., 2)

# create histogram ( identify, Title, ?, xmin, xmax )
h = ROOT.TH1F('h', 'px', 100, -1., 1.)
f2= ROOT.TF1('f2', '6. + x * 4.5', -1, 1.)

h.FillRandom('f2', 10000)


# fits the hitstogram with the 'Linear' function
h.Fit(f)

# export
cv.Print("graphtest4.png")

# print results
par = f.GetParameters()
print 'fitting result: const = ', par[0], ', pitch = ', par[1]


実行結果


$ python graphtest4.py
FCN=101.388 FROM MIGRAD STATUS=CONVERGED 29 CALLS 30 TOTAL
EDM=2.65063e-16 STRATEGY= 1 ERROR MATRIX ACCURATE
EXT PARAMETER STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 p0 9.89861e+01 9.94918e-01 4.29016e-03 -2.65160e-08
2 p1 7.57130e+01 1.55891e+00 6.72214e-03 8.21832e-09
Info in : file graphtest4.png has been created
fitting result: const = 98.9861239576 , pitch = 75.7130326833



2009年7月8日水曜日

Google Chrome OS


http://googlejapan.blogspot.com/2009/07/google-chrome-os.html


2010年後半には Google Chrome OS 搭載のネットブックが発売されるそうです。

楽しみー。

How to use pyROOT 応用編 その2

Gauss 分布のヒストグラムを書いてみよう


#/bin/usr/env python

import sys, math
import ROOT

if __name__=='__main__':

cv = ROOT.TCanvas("cv", "Gauss Example", 200, 10, 700, 500)

# create histogram( identify, Title, ?, xmin, xmax )
hpx = ROOT.TH1F('hpx', 'px', 100, -4, 4)

for i in xrange(25000):
px = ROOT.gRandom.Gaus()
hpx.Fill(px)

hpx.Draw()
cv.Update()

# export
cv.Print("graphtest3.png")


2009年7月7日火曜日

Android - Dialog -

・AlertDialog を表示


final AlertDialog.Builder builder = new AlertDialog.Builder(this);

/* set title of alertdialog */
builder.setTitle("Show AlertDialog!");

/* set Message */
builder.setMessage("This is a message");

/* set button and onClickListener */
builder.setPositiveButton("Button Title", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dia, int i) {
setResult(RESULT_OK);
}
});

/* create alertDialog */
builder.create();

/* show created alertDialog */
builder.show();

Android - レイアウト -

- ウィジェットのレイアウト -
・android:orientation="vertical"
レイアウト内に定義したウィジェットを順番に縦に配置

・android:layout_width="fill_parent"
親のウィジェットのサイズに合わせる

・android:id="@+id/myid"
ウィジェットに id を設定する

・android:numeric="integer"
入力として数値のみ許可する

・android:maxLength="3"
入力できる最大桁数を設定する

・android:maxLines="3"
TextView の最大行数を設定

・android:maxHeight="3"
TextView の最大高さ pixel

・android:maxWidth="3"
TextView の最大幅 pixel

- ウィジェットの種類 -
・TextView
・Button
・EditText

2009年7月5日日曜日

Android - 画像を表示 -

BitmapFactory() で /res/drawable/bmptest1.png を Bitmap 形式
にして表示する



import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.View;

public class BitmapTest extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BitmapView view = new BitmapView(this.getApplication());
setContentView(view);
}
}

class BitmapView extends View {
private Bitmap bmp;

public BitmapView(Context context) {
super(context);
setFocusable(true);
bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.bmptest1);
}
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(bmp, 0, 0, null);
}
}

2009年7月2日木曜日

How to use pyROOT 応用編 その1

上下に2つのグラフを表示したいなー。

そんなときはこれを使うべし。

cv.Divide( 1, 2 )



#/bin/usr/env python

import sys, math
import ROOT

if __name__=='__main__':

# set graph1 style
graph1 = ROOT.TGraph()
graph1.SetLineWidth(2)
graph1.SetLineColor(4)
graph1.SetLineStyle(1)

# set graph2 style
graph2 = ROOT.TGraph()
graph2.SetLineWidth(2)
graph2.SetLineColor(3)
graph2.SetLineStyle(1)

# set title
graph1.SetTitle("Graph Test 2 top")
graph2.SetTitle("Graph Test 2 bottom")

# set data point
for x in range(10) :
np = graph1.GetN()
graph1.SetPoint(np, x, x**2)
graph2.SetPoint(np, x, x)

# open canvas
cv = ROOT.TCanvas("cv", "Graph Test", 800, 800)

# divide canvas to two
cv.Divide(1,2)

# top plot
pad = cv.cd(1)
pad.SetGridx(1)
pad.SetGridy(1)

# plot to top pannel
graph1.Draw("APC")

# set X axise of graph1
axisY = graph1.GetYaxis()
axisY.SetTitle("x**2")


# bottom plot
pad = cv.cd(2)
pad.SetGridx(1)
pad.SetGridy(1)

# plot to bottom pannel
graph2.Draw("APC")

# set Y axise of graph1
axisY = graph2.GetYaxis()
axisY.SetTitle("x")


# set X axis
axisX = graph2.GetXaxis()
axisX.SetTitle("x")


# export
cv.Print("graphtest2.png")


How to use pyROOT 基礎編

・pyROOT の使い方

グラフツールの ROOT を python で import できるようにしたのが pyROOT

いよいよ ROOT でグラフを描きたくなったので、練習練習

必要なもの
・python
・pyROOT

今回はすでに設定されている PC で使い方を練習するので、
設定方法は他のところで調べて下さい
http://root.cern.ch/root/HowtoPyROOT.html
あたりで
もしかしたら後で書くかも
マニュアルはこちら
http://wlav.web.cern.ch/wlav/pyroot/


#/bin/usr/env python

import sys, math
import ROOT

if __name__=='__main__':

graph = ROOT.TGraph()

# set line width
graph.SetLineWidth(2)

# set line color
# 1: black (default)
# 2: red
# 3: green
# 4: blue
# 5: yellow
# 6: magenda
# 7: cyan
# 8: yellowgreen
# 9: purple
# 10: white
graph.SetLineColor(4)

# set line style
# 1: line (default)
# 2: dashed line
# 3: dot line
# 4: dot-dashed line
graph.SetLineStyle(1)

# set title
graph.SetTitle("Graph Test 1")


# set data point
for x in range(10) :
np = graph.GetN()
graph.SetPoint(np, x, x**2)

# open canvas
cv = ROOT.TCanvas("cv", "Graph Test", 800, 800)

pad = cv.cd()

# set grid
pad.SetGridx(1)
pad.SetGridy(1)

# set axises
axisX = graph.GetXaxis()
axisX.SetTitle("x")

axisY = graph.GetYaxis()
axisY.SetTitle("x**2")

# plot
graph.Draw("APC")


# plot line
line = ROOT.TLine(0, 40, 10, 40)
line.SetLineWidth(4)
line.SetLineColor(2)
line.SetLineStyle(2)
line.Draw("SAME")

# export
cv.Print("graphtest1.png")