Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
���� ��������� ���� ����� �����
������� �������
�������� ���
�������������� �����������
目 次
� ����������� �
��� ����へ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� ����を使う� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� 解析データ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� 解析の流れ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
�� インストール � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
�� 環境設定 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� 同様の入門書 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� 起動と終了 �
��� 起動 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� 終了 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� バッチ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
ヘルプ、補完、履歴
��� ヘルプ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� 補完 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� 履歴 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� 情報 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� ����ファイルの中を見る �
��� ����ファイル� �� � � � ���� � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� とりあえず見る �������� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� ��������なしでは� ����� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� プログラムの実行 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� 印刷 �
�� ���を使う � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
�� ���を使わない その � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
�� ���を使わない その � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� 画面の分割 �
�� 分割 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
�� 表示 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
�� 印刷 ���を使わない � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
� フィッティング ��
��� ヒストグラムを作成する � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
��� 組込み関数でフィッティングする � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
��� フィッティングの結果の表示と統計の表示 � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
��� 自作関数でフィッティングする その1 � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
�� 自作関数でフィッティングする その2 ファイルのロード � � � � � � � � � � � � � � � � �
�� 関数のメンバ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
�
� ヒストグラム ��
��� オブジェクトの検索とヒストグラムの簡易生成 � � � � � � � � � � � � � � � � � � � � � � � � � �
��� 描画オプション � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
��� 重ねる � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
��� ログスケールにする � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
�� グリッドを表示する � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
�� 統計情報 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
��� 高さの上限と下限を設定する � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
��� 一部だけ描画する � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
��� ビン幅を変更する � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���� ��������� ��!する � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���� ヒストグラムの演算 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���� 射影 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���� プロファイル � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���� フィットスライス � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
��� 飾り � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
����� スタイルを変更する 背景等 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
����� タイトル �名前を変える � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
����� 軸にタイトルを付ける � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
����� 文字を入れる � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
���� 色を付ける � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���� 線の太さ �タイプを変える � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
����� マーカーを変える � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
����� 塗る � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
��� ��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
����� "�!�と #���の属性 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
����� ��$ の属性 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
����� 軸 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
����� エディタ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���� マクロ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���� ヒストグラムの生成 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
������ �次元ヒストグラム � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
������ �次元ヒストグラム � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���� �����からヒストグラムにデータを詰め込む � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���� ヒストグラムの情報を取得する � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���� ��の質量分布を見る � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
���� カット � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� グラフ �
��� グラフ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� エラーバー付きのグラフ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
� 関数 �
���� 予め形を与える関数 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���� 組み込み関数の応用 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
��
�� ����� �
���� 非クラスなデータ %�� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���� 非クラスなデータ ���& � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���� 自作クラス � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���� クラス化されたデータ %�� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
��� クラス化されたデータ ���& � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
��� '(���& "�)���*の利用 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
���� '(���& "�)���*の作成 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
�� その他 ��
���� ����環境設定 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���� �$で実行するときの�"等に関して � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���� アプリケーション コンパイル � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��
���
� �����������
��� ����へ
#�� ��!から +,,等のオブジェクト指向言語に移行していく中、解析環境も -��から ���� .�/等へ
移行しようとしています。これは取り扱うデータもオブジェクト化するための自然な流れのように思いま
す。ただし、-��を完全に捨てられるか�、新人さんは -��を知らなくていいか� というと判断しかねま
す。0�"0'に限って言えば移行期間中のため -��も #�� ��!も読める程度には知っておく必要がありま
す �。+1�� "�)���*の開発を中止し、"+� 2"3+ +��45 �!6 ���& -��7�8 9における -��" -����� �!8*
と ���� -��7�8 の繋がり等の動向を見るかぎり ����という選択肢は間違っていないでしょう。
��� ����を使う�
恐らく大きく別けて �通りの使いかたがあります。
� インターラクティブに使う。
� ライブラリとして使う。
前者は端末 2: ���;$ ���;6!���< ����!��等9で ����と叩くと出てくるプロンプトにどんどんコマン
ドを打ち込む使い方です。後者は +,,のソースの中で �#���等の ����にあるクラスを利用する方法で
す。物理解析ではどちらも利用します。
��� 解析データ
0�"0'ではデータを ����;-��"ファイルで保存する予定です。"+�で開発中の -��"ファイルも
����でアクセスできる予定です。今のところ � 54��で保存されていますが、� 54��ファイルは ������
ユーティリティーを使えば ����ファイルに変換できます �。
��� 解析の流れ
大雑把な解析の流れは以下のような感じです。もちろん、解析自体もインターラクティブにしても結構
です。
� 解析用プログラムを +,,で書いて実行する。 =ライブラリとして使う>
� 実行結果は ����ファイルで保存されているので、これを ����でアクセスして結果に一喜一憂
する。 =インターラクティブに使う>
� あとは、納得いくまで上記の繰り返し。
�� インストール
これは個々の環境・好みに依存しますので、一例をあげるに留めます。
� バージョン ����� �を ��&(� ���で���������������� �� ��にインストールする場合�
������������ 屋さんと付き合う方は彼らが移行しない限り必須でしょう。�������と ����� ������の ���� ��������の名前 内部での !��� 変換の挙動が若干異なるようです。��""# 年 $ 月 �% 日に #�"&�"'がリリースされました。
�
� ����
�� ���� ������� �� �� ����� �� ��
� ����
������ ������� ���������������� �� ��
���系の場合 ������ �������!���������������� �� ��"
����#���� �#��� $$��%��$�%�� $$�#�%��$&�%�
�$$��%��$�%�� $$�#�%��$&�%� はなくても問題ないと思います。"
��&�
��
��&� #�����
�' �� $�� ��������� �かたづけ"
+1�� ��)���*が存在しない場合 2見つけられない場合9は (���� という� 54��から ����へ変換
するプログラムはできません。また、+1�� ��)���*を使った場合 '(�? ��)���* 2+1��で開発9が必
要な場合もあります。
�� 環境設定
� )��(等の �(系の場合
������ �������!����がインストールされている場所
������ ()�*!+,()�*- +,�������-�%#�
������ ./�.01�)���()�*!+,./�.01�)���()�*- +,�������-��#%
ここで>����がインストールされている場所>というのは、+,�������-�%#������で ����にアク
セスできる場所です。上記のインストール例では���������������� �� ��です。
� 8�(等の 8�(系の場合
������ ������� ����がインストールされている場所
������ ()�* +,()�*- +,�������-�%#�
������ ./�.01�)���()�* +,./�.01�)���()�*- +,�������-��#%
��� 同様の入門書
本家 .�/の ����� �5�&�のみならず、日本語で書かれた入門書 .�@ �/があります。
起動と終了
��� 起動
����を起動するためには、端末 2: ���;$ ���;6!���< ����!��等9で ����と入力します。図 �のよ
うな派手なロゴが表示された後、図 �の状態になります。=��� .�/>が ����のプロンプトで . /内の数
字はコマンドを実行するにつれて増えていきます。起動時に表示される図 �を表示させずに起動したい場
合は、���� $�と入力します。
�
図 �� ����起動時に表示されるロゴ
図 �� 待ちうけ状態
��� 終了
����を終了させるためには、 2と入力します。
��� バッチ
実行内容を書いたファイル名が ��#� 3の場合、���� $% $2 ��#� 3とします。グラフィカルな画面等
は一切出力されずに実行されます �。
� ヘルプ、補完、履歴
2ピリオド 9で始まるコマンド以外は、基本的に +,,の文法にしたがって入力します。つまり、+,,
のインタープリターとして使います。ただし、+,,の文法に ���A忠実ではなく、便利なように 2�9拡張さ
れていますし、一方で制限もあります。�(�) の �� �*と同じです。
�
��� ヘルプ
4と入力すればヘルプが見られますが、個人的にはあまり役にたたない情報ばかりだと感じます。という
のも、基本的にこれは 2ピリオド 9で始まるコマンドのヘルプだからです。
��� 補完
強力な補完機能によって、利用できるクラスやそのメンバを見つけ出すことができます。
� �5#まで打ち込んでタブ 2��)9を打つと以下のように ����が知っているクラス等の候補を挙げて
くれます。
���� 6�7 �5#
�5#��
�5#��*�����
�5#�� 8����#����
�5#��
�5#��*�����
�5#�(���
�5#�(���9���
�5#����
また、�5#�まで打ち込んでタブ 2��)9を打つと �を補完してくれて �5#��となります。
� �5#�� :� ! ��; �5#���”まで打ち込んでタブ 2��)9を打つと以下のようにファイル候補を挙げて
くれます。
���� 6�7 �5#�� :� ! ��; �5#���”
���<�� ����
���<�� ����
�8)/=8
続けて、�と打ち込んでタブ 2��)9を打つと �5#�� :� ! ��; �5#���”���<�� まで補完してくれ
ます。このように補完を利用して �5#�� :� ! ��; �5#���”���<�� ����”"という文を完成させ
ることができます。
� �$>まで打ち込んでタブ 2��)9を打つとたくさんのメンバ候補を挙げてくれます。この補完機能を利
用すれば正確に思い出せないメンバを見つけ出すことができます。また、� としてタブ 2��)9を打っ
ても、� が自動的に �$>に変換されて同じ動作をします。
��� 履歴
デフォルトでは、? � ���� �#��に入力したコマンドの履歴が残っています。
��� 情報
����にはたくさんのクラスとそのメンバがあるため、����� �5�&� .�/にもその一部しか紹介されて
いません。クラスのメンバの情報は ���� ������ ��� �の ��?���!8� �5�&�から得ることができます。
�
また、インストール時に用いたソースプログラムの各クラスの 8$$ファイルからも同様の情報を得ること
ができます。また、同サイトの ��6�� �� �� ����からメーリングリストに参加することもできます。��!�
��5!さん達の開発者の対応の速さには非常に関心します。
� ���ファイルの中を見る
解析を行なうと、その結果をヒストグラムやツリー �の形でファイル保存するのが一般的です。このファ
イル ����ファイル の中を見ることから始めます。
��� ����ファイル� �� � � � �"�"� �
まず、"3+ 0�"0'実験における �� � � � ���� � ��を簡易シミュレーション �した結果ファイル
を ���� ��;;;� #��� � �$��&@� A�����$A��������#��������B�C�から取得します。これ
は � 54��のため、������を利用して ����ファイルに変換します。
������ ���<�� ���� ���<�� ����
これで、66(��5���� という名前の ����ファイルができます。
��� とりあえず見る ��������
����を起動して、プロンプト ���� 6�7に �1��;��� �%'と打つと図 � 2�9のようなウインドウが開
きます。次に、図 � 2)9のように左側にある �つのフォルダの真ん中のものをクリックすると右側のように
いくつかのファイルが見えます。この中の 66(��5���� をダブルクリックします。次に、図 � 289のように
左側にある �つのフォルダの一番下のものをクリックすると 66(��5���� のフォルダが現われます。これ
を繰り返すと (�というフォルダに行き着きます。このとき、(�にあるたくさんのブランチが右側に表
示されます。ここで、��5�をダブルクリックすると図 � 2&9のような分布が得られます。これは ����� �&
�5�!の数の分布です。期待通り、�であるイベントが最も多いことが分ります。
�1��;��� �%'に関しては、
�1��;��� �% �'なし"
�1��;��� � �名前が違う"
�1��;��� :�% ! ��; �1��;����"' ���;で生成"
でも構いません。
�(�) の +� ,に相当する。�ヒッグス粒子の質量を �"" �-に設定した (����� '��を用いています。&"" イベント。
2�9 2)9
289 2&9
図 �� ブラウザ 2�@)@89とヒストグラムの例 2&9
��� ��������なしでは� �����
���� 6�7 �5#�� :� ! ��; �5#���D���<�� ����D"'
���� 6C7 �$>���"'
�5#��:: ���<�� ���� *1��E �#�� ���<�� ���� �������� �� ����
�5#��: ���<�� ���� *1��E �#�� ���<�� ���� �������� �� ����
E8� �/#�����@ )�.5)��'C )�.5)��
���� 6�7 �$>��D)�.5)��D"'
���� 6�7 �$>���"'
�5#��:: ���<�� ���� *1��E �#�� ���<�� ���� �������� �� ����
�5#��: ���<�� ���� *1��E �#�� ���<�� ���� �������� �� ����
�/#�����@: )�.5)�� )�.5)��
E8� ����� ��C'C )������C
E8� �/#�����@ )�.5)��'C )�.5)��
���� 6<7 ��C$>/�;�DF���D"'
で図 � 2&9と同じ分布が得られます。
ここで、��C$>/�;�DF���D"'の (�は定義されていないにもかかわらず使うことができます。これは
����特有の機能です。+,,のコンパイラーを通すことを考えると
���� 6<7 ����� :��C ! ������:"�����$>5#���%A���D��CD"'
���� 6�7 ��C$>/�;�DF���D"'
が正しいですが、ちょっと長くなってしまいます。
また、�����というものは -0%でいうところの � 54��で、2オブジェクト9データを扱うための道具で
す。�F�����というクラスもありますが、これは �����クラスを継承したシンプルなクラスでわざわざ使
う価値はありません。�����はその名の通りツリーで、ブランチやリーフを持っています。使用時にリー
フを意識することは少ないですが、�����&��で =葉っぱ>のアイコンを見ることができます。ブランチに
ブランチが存在しないときリーフとして表示されるようです。
次に、どんなブランチがあるか調べるためには次のように (�#���"や ���;�"を使う。
���� 6G7 ��C$>(�#���"'
���� 6B7 ��C$>���;�C"' �� �イベント目の情報
���� 6H7 ��C$>���;�"' �� 引数なしだと、一つ前と同じ情報。つまり、�イベント目の情報。
���� 6I7 ��C$>���;��"' �� �イベント目の情報
���"を使うと特定のブランチの情報が得られる。
���� 6C�7 ��C$>���DF���D"' �� F���の情報
���� 6CC7 ��C$>���D(����D"' �� (����6�7の情報、配列で引数を省略した場合は 6�7
���� 6C�7 ��C$>���D(����6�7D"' �� (����6�7の情報
���� 6C�7 ��C$>���D(����6�7D"' �� (����6�7の情報
��� プログラムの実行
エディターで次のような内容のファイル ��5��+を作成します。
,
�5#�� :� ! ��; �5#���D���<�� ����D"'
�$>��D)�.5)��D"'
��C$>/�;�DF���D"'
-
����を起動して以下のようなコマンドを実行すると図 � 2&9と同じ分布が得られます。
���� 6�7 � F��� 3
このように �を使うと該当するファイルを読み込んで実行してくれます。
� 印刷
ポストスクリプト等の形式で結果を保存する方法を説明します。����では 4�のみならず、�4�、6�?、
�B6の形式をサポートしています。
�� ���を使う
���章で説明したように � F��� 3を実行します。図 �のように #���の部分をクリックすると、メニュー
が現われます。この中の '�B� 0�の部分を利用すれば簡単に保存できます。'�B� 0� 8�!B���4�をクリック
すると、
�
0��� #� J�3��� (�#��> (�����#�� �#�� C �� �� %��� �����
と端末に表示されて、8��4�という名前で保存されたことが分ります� ここで使用される名前はキャンバ
ス 2�+�!B�� +����9に付けられた名前です。違う名前を付けたい場合は、'�B� 0����をクリックして名前
と形式を選択して保存します。
'�B� 0� 8�!B���+を選択すると、表示されている図を再現するためのコードを出力してくれますので、
どうすればこの位置にこのような文字を出力できるか、等が分ります。ちなみに、'�B� 0� 8�!B����B6は
グラフィックス情報を CD"で保存してくれます。
図 �� キャンバス 8�で #���をクリックした画面
�� ���を使わない その �
同様に � F��� 3を実行します。キャンバス名が 8�なので C$>(�#���"'とします。これで、8��4�と
いう名前の -�� '8��4 ができます。
���� 6�7 � F��� 3
���� 6C7 C$>(�#���"'
0��� #� J�3��� (�#��> (�����#�� �#�� C �� �� %��� �����
-��! というメンバには次のように �つの引数を与えることができます。
��#� (�#������� ��: �#�����K ���� ���#����: ���#��"
�つ目はファイル名で、�つ目は保存形式 24�、�4�、6�?、�B6、8$$、��� 9です。保存形式を省略すると、
拡張子から判断してくれます。
���� 6�7 C$>(�#���DF��� ���DKD���D"'
0��� #� J�3��� (�#��> (�����#�� �#�� F��� ��� �� %��� �����
���� 6�7 C$>(�#���DF��� �#�DKD�#�D"'
0��� #� J�3��� (�#��> 905 �#�� F��� �#� �� %��� �����
���� 6<7 C$>(�#���DF��� �#�D"'
0��� #� J�3��� (�#��> 905 �#�� F��� �#� �� %��� �����
�
�� ���を使わない その �
ポストスクリプトに関しては描画したすべてのファイルと �つのファイルに保存する方法があります。
���� 6�7 � F��� 3
���� 6C7 �(�����#�� ���D���� ��DKCC�"'
���� 6�7 ��C$>/�;�DF���D"' C$>L�����"'
���� 6�7 ��C$>/�;�D(����D"' C$>L�����"'
���� 6<7 ��C$>/�;�D(@���D"' C$>L�����"'
���� 6�7 ��C$>/�;�D(����D"' C$>L�����"'
���� 6G7 �� 3�����"'
インターラクティブに行なう場合は C$�L�����"は必要ありませんが、バッチ等で行なうときはこれ
がないときちんと保存されません。より複雑な場合は ��節に解説があります。
�-�� '8��4 クラスのコンストラクタの第 �引数には以下のような値でポストスクリプトのタイプを変
更できます。もちろん、�4�を指定するとページの概念がなくなります。
CCC �����#� ��
CC� ������ ��
CC� ���
� 画面の分割
-0%でいう ��!�の方法を紹介します。
�� 分割
まず、次のようにしてキャンバスを作ります。
�3��� :C ! ��; �3����DCDKDC �#���D"'
�つ目はタイトルです。�つ目の引数は作成するオブジェクトと同じにしておきます。これは ����内で
オブジェクトを管理するために使う名前で �����$>5#���%A���DCD"'のようにオブジェクトを探すとき
に必要な名前です。コードに見えるオブジェクトと ����が管理しているオブジェクトの名前は同じ方が
分りやすいことは容易に想像できます。
画面の分割は /#�#��というメンバを使います。例えば、C$>/#�#����K�"とすると図 のようになり
ます。
�
図 � 画面分割� E�B�&�2�@�9
�� 表示
まず、以下の準備作業をします。
���� 6�7 �5#�� :� ! ��; �5#���D���<�� ����D"'
���� 6C7 �$>��D)�.5)��D"'
���� 6�7 �3��� :C ! ��; �3����DCDKDC �#���D"'
���� 6�7 C$>/#�#����K�"'
ここで、
���� 6<7 ��C$>/�;�DF���D"'
とすると予想外 2�9のことが起こります。左上の部分に表示されずに、全体、つまり、図 � 2&9のように
なってしまいます。
これはオブジェクト指向ならではの発想で、目的のオブジェクトに移動しなければ依然として 8�全体に
いるということです。図 の黄色の枠がそれを正に表しています。ということで、
���� 6�7 C$>3����"'
���� 6G7 C$>/#�#����K�"'
���� 6B7 C$>��C"'
���� 6H7 ��C$>/�;�DF���D"'
とすれば目的が達成できます。図 は ��数字"を利用して、��5�に加えて F?�5�、1��5�、-$�5�、
-*�5�、-��5�を表示したものです �。
�最後に �����.�" を実行しています。
��
図 � ����� �& �5�!に関する分布
もう少し複雑な分割も次のように行ないます。分割された個々の枠の名前は、8� �、8� �のようにキャ
ンバス名 8�に> 数字> を付けたものになります。
���� 6��7 C$>3����"'
���� 6�C7 C$>/#�#���CK�"'
���� 6��7 C$>���"'
���� 6��7 C��$>/#�#����K�"'
���� 6�<7 C��$>���"
この結果は図 �になります。また、アクティブな枠、つまり、黄色の枠に囲まれている領域を示すため
のオブジェクトとして �(�というものが常に存在します。これを利用すると、
���� 6��7 C$>3����"'
���� 6�C7 C$>/#�#���CK�"'
���� 6��7 C$>���"'
���� 6��7 �(�$>/#�#����K�"'
���� 6�<7 �(�$>���"'
でも同じ結果になります。
��
図 �� より複雑な分割
�� 印刷 ���を使わない
画面分割を利用した図をポストスクリプトにしたい場合は L�����"と F�;(���"の位置が重要です。
特に、複数ページにしたい場合は F�;(���"を一番始めのページの前にも入れる必要があります。
���� 6�7 � F��� 3
���� 6C7 C$>3����"' C$>/#�#����KC"'
���� 6�7 �(�����#�� ���D����� ��DKCC�"'
���� 6�7 �� F�;(���"' �� ここにも F�;(��が必要
���� 6<7 C$>��C"' ��C$>/�;�DF���D"'
���� 6�7 C$>���"' ��C$>/�;�D(����D"'
���� 6G7 C$>L�����"'
���� 6B7 �� F�;(���"'
���� 6H7 C$>��C"' ��C$>/�;�D(@���D"'
���� 6I7 C$>���"' ��C$>/�;�D(����D"'
���� 6C�7 C$>L�����"'
���� 6CC7 �� 3�����"'
� フィッティング
��� ヒストグラムを作成する
まずはフィットするためのヒストグラムを作成することから始めます。���節のように
���� 6�7 � F��� 3
とすると、図 � 2&9にあるように ( ��4というヒストグラムができます。この ( ��4という名前は一時的
に使われる名前のためフィット等には不向きです。実際、この名前を使ってもフィットはできますが表示等
��
の挙動が若干違いますし、いくつかの制限 �も出て来ます。
ということで、次のようにきちんとヒストグラムを作成します。
���� 6C7 ��C$>/�;�D(����>>�����D"'
これで 4$�5�というヒストグラムが作成されます。
��� 組込み関数でフィッティングする
��5����!、1$4�!�! ���、-��*!�����、"�!&�5が予め準備された組込み関数で、それぞれ ���、����、
���� 2�は �以上の任意の整数9、����という表現をします。
���� 6�7 �����$>5#��D����D"'
���� 6�7 �����$>5#��D����D"'
���� 6<7 �����$>5#��D����D"'
���� 6�7 �����$>5#��D���D"'
領域を限定してフィットしたい場合は、
���� 6G7 �����$>5#��D���DKDDKDDK$H� KH� "'
のように行ないます。フィット結果を重ねたくない場合は、
���� 6B7 �����$>5#��D���DKD�DKDDK$H� KH� "'
���� 6H7 �����$>/�;�"'
のように行ないます。�つ目の引数はフィッティングに関するオプションで、その他に . 2"�:���(��& �� (�&、
デフォルトは �� �� (�&9、8 2�� �� ������ �� ��� ��! )* D���' �8(�!�G5�9等があります。�つ目の引
数はプロット 2E���9に関するオプションで、�次元ヒストグラムなら 8 2エラーバー付き9等があります。
これらの詳細は ����� �5�&� .�/にあります。
��� フィッティングの結果の表示と統計の表示
���� 6I7 ���@��$>������5#��"'
とすればフィッティングの結果の表示が図にも表示されます。������5#��"は引数を取ることもできて、非
表示に戻すには
���� 6C�7 ���@��$>������5#���"'
とします。また、すべての情報を表示するには
���� 6CC7 ���@��$>������5#��CCCC"'
とします。
同様に、統計量に関しても以下のようになります。
���� 6C�7 ���@��$>�����������"' �� 非表示
���� 6C�7 ���@��$>����������CCCCCCC"' �� すべての情報
���� 6C<7 ���@��$>�������������CCCC"' �� デフォルト、����������"と同じ
�私の経験では、������������� �������� 等で入れ子にできないことに気づきました。
��
������5#��"と �����������"の設定での �����$>5#��D���D"'のフィット結果は図 �のようになり
ます。
図 �� フィットの結果 2結果に意味はない���9
��� 自作関数でフィッティングする その1
まずは関数を準備する必要があります。ここでは組込み関数にもありますが、とりあえず ��5����!を作
成します。
���� 6CH7 �5C :�C ! ��; �5C�D�CDKD6�7:����$��$6C7":��$6C7"��� :6�7:6�7""DK$�� K�� "'
のようにパラメータを . /で囲んで表します。�つ目と �つ目の引数はこの関数の 2とりあえず9定義される
領域です 2�� � � � �9。あとはパラメータの初期値を設定してフィットするだけです。
���� 6CI7 �C$>���(��������C�� K� K�� "' �� 6�7、6C7、6�7の順番
���� 6��7 �����$>5#��D�CD"'
初期値の設定 �は
���� 6�C7 �C$>���(��������KC�� "' �� 6�7 ����(�������ではなく ���(������"
���� 6��7 �C$>���(�������CK� "' �� 6C7
���� 6��7 �C$>���(��������K�� "' �� 6�7
���� 6�<7 �����$>5#��D�CD"'
のように個々にも設定できます。特に、���(�������は最大 ��個の引数しか取り扱えないのでそれ以
上の場合は ���(������を利用する必要があります。また、パラメータにもう少しましな名前を付けた
い場合は、
���� 6��7 �C$>���(�F����D3DKD���DKD�#��D"' �� 6�7、6C7、6�7の順番
あるいは、
���� 6�G7 �C$>���(�F����KD3D"' �� 6�7
�より正確には再設定であり、何もしなければ �あるいは "が設定されている。
��
���� 6�B7 �C$>���(�F���CKD���D"' �� 6C7
���� 6�H7 �C$>���(�F����KD�#��D"' �� 6�7
���� 6�I7 �����$>5#��D�CD"'
のようにします。
�� 自作関数でフィッティングする その2 ファイルのロード
今回は予め関数を書いたファイルを準備しておいてそれを利用してフィッティングを行ないます。
/��%���� �@9���/��%���� :�K /��%���� :��"
,
������ ��6�7:����$��6�7$��6C7":��6�7$��6C7"��� :��6�7:��6�7""'
-
の内容を �*��5���+に保存します。ここでは故意にファイル名と関数名に違いを持たせています。ちなみ
に、また ��5����!です。
まあ、この辺で ����を一度抜けていると仮定してもう一度始めから行ないます。
���� 6�7 � F��� 3
���� 6C7 ��C$>/�;�D(����>>�����D"'
���� 6�7 . �@9��� 3
ここで使った .はファイルを読み込むための ����のコマンドです。実際、
���� 6�7 �#��
や
���� 6<7 ����#�� �� 長いので と打ってリターンします。
とすると読み込んだファイル 2�*��5���+9や関数 2�*��5�9が存在することが分ります。後は先ほどと同
じような手続で関数を準備して、パラメータを設定してフィットするだけです。
���� 6�7 �5C :�#�5� ! ��; �5C�D�#�5�DK�@9��K$�� K�� K�"'
���� 6G7 �#�5�$>���(��������C�� K� K�� "'
���� 6B7 �����$>5#��D�#�5�D"'
�� 関数のメンバ
次のようなメンバがあります。これらを使用すればプログラム内でも値を取得することができます。こ
こではセミコロンを意図的に付けていません。
���� 6H7 �#�5�$>/�;�"' �� 描画
���� 6I7 �#�5�$>9��3�#�2����" �� �#�2���
����� /��%����"C �<CG<�GB�G<G�CIHC�M��
���� 6C�7 �#�5�$>9��(��������" �� Cつ目のパラメータの現在の値
����� /��%����"I �II<GC�CBC����H���M�C
���� 6CC7 �#�5�$>9��(�������C" �� �つ目のパラメータの現在の値
����� /��%����"�$C �II�GG�H<IBCH�C<B�M��"
���� 6C�7 �#�5�$>9��(��������" �� �つ目のパラメータの現在の値
�
����� /��%����"� CI�<CCGB�C��C<��<�M�C
���� 6C�7 �#�5�$>9��(�F����" �� Cつ目のパラメータの現在の名前
����� ��: ��<��H���C"D��D
���� 6C<7 �#�5�$>9��F���" �� 関数の名前
����� ��: ��H%I��"D�#�5�D
���� 6C�7 �#�5�$>9���#����" �� 関数のタイトル
����� ��: ��H%I�I<"D�@9��D
���� 6CG7 �#�5�$>9��F/5�" �� 自由度
����� 0����"�C
���� 6CB7 �����$>5#��D���D"' �� 組込み関数でも同様のことができる。
���� 6CH7 ���$>/�;�"' �� 描画
� ヒストグラム
解析結果を保存した ����ファイルを如何に操るかという視点で話を進めます。したがって、一般的な
ヒストグラムの作り方は最後の方にあります。
��� オブジェクトの検索とヒストグラムの簡易生成
検索は �����$>5#���%A���DD"が基本です。�章でも触れましたが、�����からヒストグラムを生成す
るためには E���関数の引数に以下のようにリダイレクト>>を追加すればできます。ただし、ヒストグラ
ムのビン幅等は勝手に決められてしまいます。
���� 6�7 �5#�� :� ! ��; �5#���D���<�� ����D"'
���� 6C7 �$>��D)�.5)��D"'
���� 6�7 ��
�/#�����@: )�.5)�� )�.5)��
E8� ����� ��C'C )������C
���� 6�7 �/#�����@$>���"'
�/#�����@: )�.5)�� )�.5)��
E8� ����� ��C'C )������C
���� 6<7 ����� :��C ! ������:"�����$>5#���%A���D��CD"'
���� 6�7 ��C$>/�;�D(����>>�����D"'
���� 6G7 ��
�/#�����@: )�.5)�� )�.5)��
�1N ����� ��C )������C � � ��HI%ICH
�1N �*C5 ����� (���� � � ��H%I���H
E8� ����� ��C'C )������C
���� 6B7 �*C5 :����� ! ��*C5:"�����$>5#���%A���D�����D"'
���� 6H7 �����$>/�;�"'
しかしながら、ビン幅等が勝手に決められては困ることが多いので更に引数を追加します。
���� 6I7 ��C$>/�;�D(����>>���������K$��� K��� "D"'
���� 6C�7 �*C5 :������ ! ��*C5:"�����$>5#���%A���D������D"'
���� 6CC7 ������$>/�;�"'
�
また、条件を満たすものだけを表示するためには次のように第 �引数を使います。+,,言語の文法と同
じく、>かつ>をOOで、>あるいは>をPPで表します。
���� 6C�7 ��C$>/�;�D(����>>���������K$��� K��� "DKD(@��� > $�� OO (���� J ��� D"'
���� 6C�7 �*C5 :������ ! ��*C5:"�����$>5#���%A���D������D"'
���� 6C<7 ������$>/�;�"'
とりあえず、以下の作業のことを考えて次のような内容で 4��4���3�� �+というファイルを作成してお
きます。
,
�5#�� :� ! ��; �5#���D���<�� ����D"'
�$>��D)�.5)��D"'
����� :��C ! ������:"�����$>5#���%A���D��CD"'
��C$>/�;�D(����>>������C��K$��� K��� "D"'
��C$>/�;�D(@���>>�@����C��K$��� K��� "D"'
��C$>/�;�D(����>>������C��K$<�� K<�� "D"'
��C$>/�;�D(@��� (����>>��@����C��K$��� K��� KC��K$��� K��� "D"'
�*C5 :����� ! ��*C5:"�����$>5#���%A���D�����D"'
�*C5 :�@��� ! ��*C5:"�����$>5#���%A���D�@���D"'
�*C5 :����� ! ��*C5:"�����$>5#���%A���D�����D"'
�*�5 :��@��� ! ��*�5:"�����$>5#���%A���D��@���D"'
C$>3����"'
-
��� 描画オプション
ヒストグラムの描画オプションの一例で、以下の通り行なうと、図 �のようになります。
���� 6�7 � ������*#�� 3
���� 6C7 C$>/#�#����K�"' C$>��C"'
���� 6�7 �����$>/�;�"'
���� 6�7 C$>���"'
���� 6<7 �����$>/�;�D8D"' �� エラーバー付き、8�K8CK8�K8�K8<
���� 6�7 C$>���"'
���� 6G7 �����$>/�;�D.D"' �� 折れ線
���� 6B7 C$>��<"'
���� 6H7 �����$>/�;�D(D"' �� 指定されたマーカー、(�
��
図 �� ヒストグラム� 描画
��� 重ねる
E���のオプションに '0D1を指定します。複数のオプションの指定も可能で、連続して書いてもいい
しスペース区切りでもいいようです。
���� 6I7 C$>���"' �� C全体に戻る。
���� 6C�7 C$>3����"'
���� 6CC7 �����$>/�;�"'
���� 6C�7 �@���$>/�;�D�)=8D"' �� 重ねる。
���� 6C�7 �����$>/�;�D�)=8 8D"' �� エラーバー付きのヒストグラムを重ねる。
��� ログスケールにする
���.��@�"や ���.����"を使用します。以下の例にあるように現在のパッドは �(�でアクセスできま
す。あるいは、C Cや C �を使用することもできます。
���� 6C<7 C$>���"' C$>3����"' C$>/#�#����K�"'
���� 6C�7 C$>��C"'
���� 6CG7 �����$>/�;�"'
���� 6CB7 C$>���"'
���� 6CH7 �(�$>���.��@�"' �� 現在のパッドをログスケールに変更する。
���� 6CI7 �����$>/�;�"'
���� 6��7 �(�$>���.��@��"' �� 現在のパッドをリニアスケールに変更する。
���� 6�C7 �����$>/�;�"'
��
�� グリッドを表示する
グリッドを表示するためには、���9�#���"や���9�#�@�"を使用します。非表示にするためには、���9�#����"
や ���9�#�@��"を使用します。
���� 6��7 C$>���"'
���� 6��7 �(�$>���9�#���"'
���� 6�<7 �����$>/�;�"'
���� 6��7 C$>��<"'
���� 6�G7 �(�$>���9�#���"'
���� 6�B7 �(�$>���9�#�@�"'
���� 6�H7 �����$>/�;�"'
�� 統計情報
���節にあります。
��� 高さの上限と下限を設定する
���=�#����"や ���=#�#����"を使います。
���� 6�7 � ������*#�� 3
���� 6C7 C$>/#�#����KC"'
���� 6�7 C$>��C"' �����$>/�;�"'
���� 6�7 �����$>���=�#����I� "'
���� 6<7 �����$>���=#�#������ "'
���� 6�7 C$>���"' �����$>/�;�"'
��� 一部だけ描画する
���)�#������"を使えば簡単にできます。以下のように行うと、図 ��のような結果が得られます。
���� 6�7 � ������*#�� 3
���� 6C7 C$>/#�#����KC"'
���� 6�7 C$>��C"' �����$>/�;�"'
���� 6�7 �����$>���)�#������$C�� KC�� "'
���� 6<7 C$>���"' �����$>/�;�"'
��
図 ��� ヒストグラム� 一部表示
��� ビン幅を変更する
�次元ヒストグラムの場合は
���� 6�7 �����$>��%#���"'
���� 6G7 C$>��C"' �����$>/�;�"'
のように行うと ビンずつまとめてくれます。この場合は 4$�5�に上書きされます。これを避けたい場
合は
���� 6B7 �*C5 :������ ! �����$>��%#���KD������D"'
���� 6H7 C$>���"' �����$>/�;�"'
���� 6I7 C$>��C"' ������$>/�;�"'
のように行います。�次元ヒストグラムには ��%#�というメンバはありません。
���� ��������� ��!する
�����$>/�;F����#����"'では一般に面積 �にはなりません。これは "5��!��� *から計算したイベ
ント数に合わせる場合に便利で、例えば ����イベントにしたい場合は
���� 6�7 � ������*#�� 3
���� 6C7 �����$>/�;F����#����DDKC��<"'
とします。また、面積を �にしたい場合は、もしビン幅が同じであれば
���� 6�7 �����$>/�;F����#����DDKC �������$>9��1#�Q#����C"""'
とすれば面積 �になります。あるいは、次節のヒストグラムの演算を利用して
C �������$>9�������Q�#�����":�����$>9��1#�Q#����C""
倍して面積 �の新しいヒストグラムを作成することができます。ビン幅が異なる場合はもう少し複雑な操
作をする必要があります。
��
���� ヒストグラムの演算
ヒストグラム間の加減乗除やスケール倍といった操作が比較的簡単にできます。ただし、ビンの分け方
が共通でないとできません。以下のように行うと、図 ��のような結果が得られます。
���� 6�7 � ������*#�� 3
���� 6C7 �*C5 :� ! ��; �*C5��:�����"M�:�����""' �� 加
���� 6�7 �*C5 :� ! ��; �*C5��:�����"$�:�����""' �� 減
���� 6�7 �*C5 :� ! ��; �*C5��:�����":�:�����""' �� 乗
���� 6<7 �*C5 :� ! ��; �*C5��:�����"��:�����""' �� 除
���� 6�7 �*C5 :� ! ��; �*C5�� �:�:�����""' �� スケール倍
���� 6G7 C$>/#�#����K�"'
���� 6B7 C$>��C"' �����$>/�;�"'
���� 6H7 C$>���"' �$>/�;�"'
���� 6I7 C$>���"' �$>/�;�"'
���� 6C�7 C$>��<"' �$>/�;�"'
���� 6CC7 C$>���"' �$>/�;�"'
���� 6C�7 C$>��G"' �$>/�;�"'
図 ��� ヒストグラム� 演算
���� 射影
�次元ヒストグラムを $軸あるいは *軸に射影するためには以下のように行ないます。*軸への射影の結
果は図 ��のようになります。
���� 6�7 � ������*#�� 3
���� 6C7 ��@���$>(��A��#��R�"$>/�;�"' �� �����$>/�;�"と同じはず。
���� 6�7 ��@���$>(��A��#����"$>/�;�"' �� �@���$>/�;�"と同じはず。
��
図 ��� ヒストグラム� *軸への射影
��とすれば分りますが、��@��� ��と ��@��� �@ができています。これ以外の名前のオブジェクトに
したい場合は
���� 6<7 ��@���$>(��A��#��R�D��D"' ��$>/�;�"'
���� 6�7 ��@���$>(��A��#����D�@D"' �@$>/�;�"'
���� 6G7 ��
�/#�����@: )�.5)�� )�.5)��
�1N ����� ��C )������C � � ��HII���
�1N �*C5 ����� (���� � � ��H%G�H��
�1N �*C5 �@��� (@��� � � ��HII��H�
�1N �*C5 ����� (���� � � ��H%GI%H
�1N �*�5 ��@��� (@��� (���� � � ��H%G�CB�
�1N �*C/ ��@������ (@��� (���� � � ��HH<B<�
�1N �*C/ ��@�����@ (@��� (���� � � ��H<�GHH
�1N �*C/ �� (@��� (���� � � ��H<<���
�1N �*C/ �@ (@��� (���� � � ��HB�<��
E8� ����� ��C'C )������C
のようにします。更に、特定のビン間のみ射影したい場合は次のように行います。
���� 6B7 ��@���$>(��A��#��R�D���DK��@���$>9����#��"$>5#��1#����"K
��@���$>9����#��"$>5#��1#��C��""' �� 一行です。
�� 目的を考えると分りますが 9��R�#�ではなく 9����#�です。
���� 6H7 ���$>/�;�"'
���� プロファイル
�次元ヒストグラムを $軸あるいは *軸にプロファイリング 2ビン毎に平均値と �D'の計算9するため
には以下のように行ないます。結果は図 ��のようになります。
��
���� 6�7 � ������*#�� 3
���� 6C7 ��@���$>(���#��R�"'
���� 6�7 ��@���$>(���#����"'
���� 6�7 ��
�/#�����@: )�.5)�� )�.5)��
�1N ����� ��C )������C � � ��HII�H�
�1N �*C5 ����� (���� � � ��H%G��CH
�1N �*C5 �@��� (@��� � � ��HII��G�
�1N �*C5 ����� (���� � � ��H%G%���
�1N �*�5 ��@��� (@��� (���� � � ��H%G�HHH
�1N �(���#�� ��@������� (@��� (���� � � ��HH��H
�1N �(���#�� ��@������@ (@��� (���� � � ��H<���H
E8� ����� ��C'C )������C
���� 6<7 C$>/#�#����K�"' C$>��C"' ��@���$>/�;�"'
���� 6�7 C$>���"' ��@�������$>/�;�"'
���� 6G7 C$>���"' ��@������@$>/�;�"'
図 ��� ヒストグラム� プロファイル
射影のときと同じように新しいオブジェクトには ��@��� ���と ��@��� ��@ という名前が自動的に付
きます。これ以外の名前のオブジェクトにしたい場合は
���� 6B7 ��@���$>(���#��R�D������D"'
���� 6H7 ��@���$>(���#����D�����@D"'
のように行います。特定のビン間のみのプロファイルに関しても射影のときと同じように行ないます。
���� 6I7 ��@���$>(���#��R�D�������DK��@���$>9����#��"$>5#��1#����"K
��@���$>9����#��"$>5#��1#��C��""' �� 一行です。
�� 目的を考えると分りますが 9��R�#�ではなく 9����#�です。
���� 6C�7 �������$>/�;�"'
��
�-��H��クラスは �3�Eクラスを継承しているのでヒストグラムと同じように扱うことができます。
���� フィットスライス
適切なタイトルが思いつかないのでメンバ関数 25#���#��R�"K 5#���#����"9の名前そのままです
が、この関数の機能はプロファイルに似ています。ビン毎に与えられた関数でフィットをします。デフォル
トでは ��5����!ですが引数を与えることで変更できます。図 ��は以下のように行なった結果です。
���� 6�7 � ������*#�� 3
���� 6C7 ��@���$>5#���#��R�"'
���� 6�7 ��
�/#�����@: )�.5)�� )�.5)��
�1N ����� ��C )������C � � ��HII�%GH
�1N �*C5 ����� (���� � � ��H%GGC%H
�1N �*C5 �@��� (@��� � � ��HII�G�H
�1N �*C5 ����� (���� � � ��H%G%�B�
�1N �*�5 ��@��� (@��� (���� � � ��H%G�%�H
�1N �*C/ ��@����� 5#���� ���� �� ��6�7!3������ � � ��HHBC��
�1N �*C/ ��@����C 5#���� ���� �� ��6C7!=�� � � ��HHBHIH
�1N �*C/ ��@����� 5#���� ���� �� ��6�7!�#�� � � ��HHB�G�
�1N �*C/ ��@�����#� �#�2��� � � ��HHHG�H
E8� ����� ��C'C )������C
���� 6�7 C$>/#�#����K�"'
���� 6<7 C$>��C"' ��@�����$>/�;�"'
���� 6�7 C$>���"' ��@����C$>/�;�"'
���� 6G7 C$>���"' ��@�����$>/�;�"'
���� 6B7 C$>��<"' ��@�����#�$>/�;�"'
図 ��� ヒストグラム� 5#���#��R�"
��
��� 飾り
���節も参考にしてください。
������ スタイルを変更する � 背景等
デフォルトではヒストグラムの背景等は真っ白ではありません。
���� 6�7 �����$>�����@���D(�#�D"'
とスタイルを変更します。2たぶん9真っ白になるはずです。
������ タイトル �名前を変える
図 �のようになります。
���� 6�7 � ������*#�� 3
���� 6C7 C$>/#�#����KC"' C$>��C"' �����$>/�;�"'
���� 6�7 �����$>����#����D0������ =���D"' �� 左上の (����が 0������ =���に変更される。
���� 6�7 ��
�/#�����@: )�.5)�� )�.5)��
�1N ����� ��C )������C � � ��HII��%�
�1N �*C5 ����� 0������ =��� � � ��H%G�B��
�1N �*C5 �@��� (@��� � � ��HII%��
�1N �*C5 ����� (���� � � ��H%GH�H
�1N �*�5 ��@��� (@��� (���� � � ��H%G���
E8� ����� ��C'C )������C
���� 6<7 �����$>���F���D�������D"'
���� 6�7 ��
�/#�����@: )�.5)�� )�.5)��
�1N ����� ��C )������C � � ��HII��%�
�1N �*C5 �@��� (@��� � � ��HII%��
�1N �*C5 ����� (���� � � ��H%GH�H
�1N �*�5 ��@��� (@��� (���� � � ��H%G���
�1N �*C5 ������� 0������ =��� � � ��H%G�B��
E8� ����� ��C'C )������C
���� 6G7 C$>���"' �����$>/�;�"' �� 右上の �����が �������に変わった。
���� 6B7 �������$>/�;�"' �� 新しい名前でもアクセス可能。
�
図 �� ヒストグラム� タイトルと名前
����� 軸にタイトルを付ける
���� 6H7 �����$>���R�#����D(�,�- �9�S"D"'
�� , -を付けると .��R形式と勝手に判断してくれる。
���� 6I7 �����$>�����#����D8���#���< �9�ST,$C-"D"'
���� 6C�7 �����$>/�;�"'
���� 6CC7 �����$>9��R�#��"$>����#����������� H"' �� �軸からのオフセットの調節
���� 6C�7 �����$>/�;�"'
������ 文字を入れる
普通のテキストのみならず "�1C形式の文字も簡単に入れられます。以下のように行なうと、図 �のよ
うな結果が得られます。
���� 6�7 � ������*#�� 3
���� 6C7 �����$>/�;�"'
���� 6�7 ����� :�C ! ��; �������� KH� KD=��� ���� UD"'
���� 6�7 �C$>/�;�"'
���� 6<7 ����� :�� ! ��; �������� KG� KD=��� ���� UD"'
���� 6�7 ��$>�������5������"'
���� 6G7 ��$>��������#���� C"'
���� 6B7 ��$>/�;�"'
���� 6H7 �.��� :�C ! ��; �.���'
���� 6I7 �C$>�������)�#���CC"'
���� 6C�7 �C$>��������#���� C"'
���� 6CC7 �C$>/�;.������ K<� KDV��T,V��- ���� UT,�-D"'
�
� �������5���の引数� >���?�! �E,4��8����!>
-��8����!に関しては �@�@�がありますが、�でいいでしょう 2たぶん9。#�! �Eに関しては �から ��
までありますが、これは .�/を参照してください。
� �������)�#��の引数� >���(�����! �� ���6!,B�� �8�� ���6!>
3�����! �� ���6!��! に関しては �@�@�がそれぞれ ��? @8�! ��@��6( で B�� �8�� ���6!���! に関して
は �@�@�がそれぞれ )� ��@8�! ��@ �4となっています。
図 �� ヒストグラム� テキスト
������ 色を付ける
���� 6�7 � ������*#�� 3
���� 6C7 �����$>���.#��3������"' �� 赤
���� 6�7 �����$>/�;�"'
������ 線の太さ �タイプを変える
���� 6�7 �����$>���.#��Q#�����"'
���� 6<7 �����$>/�;�"'
���� 6�7 �����$>���.#����@����"'
���� 6G7 �����$>/�;�"'
������ マーカーを変える
���� 6B7 �����$>���=�&����@����"' �� クロス
���� 6H7 �����$>���=�&��3�����<"' �� 青
���� 6I7 �����$>/�;�D(D"'
��
������ 塗る
以下のように行なうと、図 ��のようになります。
���� 6�7 � ������*#�� 3
���� 6C7 �����$>���5#��3������"'
���� 6�7 �����$>/�;�"'
���� 6�7 �����$>���5#����@�������"'
���� 6<7 �����$>/�;�"'
図 ��� ヒストグラム� 塗る
��� ���
���を使うとヒストグラム等の飾り付けが非常に簡単にできます。また、���でない方法に対するヒン
トもたくさん得られます。
������ ����と ����の属性
���� 6�7 � ������*#�� 3
���� 6C7 �����$>/�;�"'
として、2� 9 I 2 ��9付近で右クリックをすると図 ��のようにメニューが表示されます。この中で最後
の �つ、'� "�!�0 ��)5 ��と '� #���0 ��)5 ��をそれぞれ選択したとき表れる新しいウィンドウが図 ��で
す。"�!�の属性に関しては上から色 2'� "�!�+����9、幅 2'� "�!�%�& (9、スタイル 2'� "�!�' *��9、#���
の属性に関しては色 2'� #���+����9とスタイル 2'� #���' *��9を選択することができます。
��
図 ��� 右クリック
図 ��� "�!�と #���の属性
������ ����の属性
次に、左上の>-$�5�>と書かれている文字の上で右クリックをすると若干異なるメニューが表示されま
す。この中で最後から �番目の '� ��$ 0 ��)5 ��を選択すると図 ��が表示されます。ここでは、色 2'� <
��$ +����9、フォント 2'� ��$ #�! 9、アラインメント 2'� ��$ 0��6!9、サイズ 2'� ��$ '���9を選択する
ことができます。
��
図 ��� ��$ の属性
����� 軸
次に、$軸の、例えば、���という数字の上 2カーソルが変化します9で右クリックをするとまた異なる
メニューが表れます。下の方には �� ��や "�)��に関する属性を変更できる項目がたくさんあることが分り
ます。これは ����のプロンプトで �����$>9��R�#��"$>の次に与えることのできるメンバ関数の名前
と同じになっています。'� "�)���J�� を選択して ����のような数字を入れて �Fすると<���から ���ま
での数字が $軸から若干離れます。これと �����$>9��R�#��"$>���.%���������� �C"'と同じです。
では、$軸にラベルを付けてみます。右クリックで表示されるメニューの中の '� �� ��を選択します。
図 ��のように入力して �Fするとラベルが付きます。このラベルと $軸との距離は '� �� ���J�� で設定
できます。
図 ��� ���� 軸
*軸に関しても同様に、例えば、��という数字の上で右クリックして表示されるメニューを利用して設
定を変更できます。
������ エディタ
次に、ウィンドウの上に #��� 1&� K��� �4 ��!� �!�4�8 +������と列んでいるメニューの中で 1&� を
クリックします。その中の 1&� ��を選択すると、図 ��が新しく表示されます。これを利用すれば様々な
飾り付けが可能です。
��
図 ��� ���� 1&� ��
一例として、左上にある>-$�5�>のような文字を入力する方法を紹介します。まず、1&� �� 2図 ��9で
-�B�"�)��をクリックで選択します。まだ何も起こりませんが、そのままヒストグラムの方に戻ります。こ
こで、左クリックを押しながら領域を選択します。カーソルのようなものが選択した領域内に表れるので
何も考えず適当に文字を入れてリターンすれば �Fです。
������ マクロ
章でも説明したように #��� 1&� K��� �4 ��!� �!�4�8 +������の中から #����'�B� 0� 8�!B���+を選
択します。すると、8��+というファイルができるのでその中身を参考にすることができます。
これは、���でいろいろ設定したものを ����のプロンプトでも活用したい場合や、���で設定した
複雑な内容のことを ����のプロンプトでも再現したい場合に便利です。
���� ヒストグラムの生成
������ �次元ヒストグラム
次のようなデータファイル �(�� �&� が存在すると仮定します。
$� �CC<
H �C<�B
� IG<B
以下の通り行なうと、図 ��のようになります。
���� 6�7 �*C5 :�C ! ��; �*C5�D�CDKD�C �#���DKC��K$�� K�� "'
���� 6C7 �C$>/�;�"'
��
���� 6�7 V#����� J������>
���� 6�7 #������ �#��DC�#�� ��D"'
���� 6<7 ���%�� �'
���� 6�7 ;�#�� ��#� >> �" �C$>5#����"'
���� 6G7 �#� �����"'
���� 6B7 �C$>/�;�"'
図 ��� �次元ヒストグラム
������ �次元ヒストグラム
次のようなデータファイル �(�� �&� が存在すると仮定します。
$� �CC< � GI�CG
H �C<�B C� G�H<
� IG<B H CBHH�
以下の通り行なうと、図 ��のようになります。
���� 6�7 �*�5 :�� ! ��; �*�5�D��DKD�� �#���DKC��K$�� K�� KH�K$�� K�� "'
���� 6C7 ��$>/�;�"'
���� 6�7 V#����� J������>
���� 6�7 #������ �#��D��#�� ��D"'
���� 6<7 ���%�� �K@'
���� 6�7 ;�#�� ��#� >> � >> @" ��$>5#����K@"'
���� 6G7 �#� �����"'
���� 6B7 ��$>/�;�"'
��
図 ��� �次元ヒストグラム
���� �����からヒストグラムにデータを詰め込む
今までは �����からヒストグラムを作成するために E���というメンバを使っていました。しかし、こ
れを使わなくてもヒストグラムを生成してそこにデータを詰め込むことができます 2当たり前か���9。
次のような内容のファイル、H��-$�+を準備します。
��#� �#��(������� :�K
���� �� :#����F��K
���� �� :���K �*C5 :�"
,
���# 0���� #����'
���# 5����� ��6C��7'
�1��� :%�#���� ! �$>9��1����#����F��"'
�1��� :%��� ! �$>9��1�������"' �� �����から所定の �1���のアドレスを取得。
%�#����$>���)�������O#����"'
%���$>���)���������"' �� �1���に値そのものを取得するためのD箱Dを指定する。
0���� � ! �0����"�$>9��8���#���"' �� 全イベント数
��� �0���� #!�'#J�'MM#" ,
%�#����$>9��8���@�#"'
%���$>9��8���@�#"' �� イベント毎に上記のD箱Dに値を詰める。
��� �0���� A!�'AJ#����'MMA" ,
�$>5#�����6A7"'
-
-
-
����を起動して次のように実行すると図 �のような結果が得られます。これは図 �と同じ結果のは
��
ずです。
���� 6�7 �5#�� :� ! ��; �5#���D���<�� ����D"'
���� 6C7 ����� :��C ! ������:"�$>9���D)�.5)�����CD"'
���� 6�7 . �#��(� 3
���� 6�7 �*C5 :�C ! ��; �*C5�D�CDKD���� ��DKC��K$��� K��� "'
���� 6<7 �#��(����CKDF���DKD(����DK�C"'
���� 6�7 �C$>/�;�"'
図 �� ヒストグラム� �����で E���を使わない場合
���� ヒストグラムの情報を取得する
特定のビンの中にある数を知るためには次のように行ないます。
���� 6�7 �5#�� :� ! ��; �5#���D���<�� ����D"'
���� 6C7 �$>��D)�.5)��D"'
���� 6�7 ��C$>/�;�D(����>>������C��K$�� K�� "D"'
���� 6�7 �����$>9��1#�3��������" �� 'を付けない。
����� �����"� CB����������������M��
���� 6<7 �����$>9��1#�3�������C"
����� �����"H ������������������M��
���� 6�7 �����$>9��1#�3�������C��"
����� �����"B ������������������M��
���� 6G7 �����$>9��1#�3�������C�C"
����� �����"< I�����������������M��
表示されたヒストグラム 2図 �9と比較するとよく分りますが �から ���までの引数で表示されているビ
ンにアクセスできます。�でアンダーフローした数で ���でオーバーフローした数にアクセスできます 。��もちろん、�""や �"�は定義したヒストグラムのビン数で変わります。
��
図 �� ヒストグラム� -$�5� 2��� � �� � �� ��K9
�����$>9��でタブを押すと様々な �� 関数があることが分ります。以下に代表的なものを挙げておき
ます。
���� 6B7 �����$>9��1#�3������C" �� ビンの中央値
���� 6H7 �����$>9��1#�Q#����C" �� ビンの幅
���� 6I7 �����$>9��1#�8�����C" �� エラー �ビン中のエントリー数の平方根"
���� 6C�7 �����$>9��8���#���" �� 全エントリー数 �表示されている統計情報"
���� 6CC7 �����$>9��=���" �� 平均 �表示されている統計情報"
���� 6C�7 �����$>9���=��" �� �=� �表示されている統計情報"
���� 6C�7 �����$>9��R�#��"$>9��F%#���" �� �軸のビン数
���� 6C<7 �����$>9��R�#��"$>9��R���" �� �軸の最大値
���� 6C�7 �����$>9��R�#��"$>9��R�#��" �� �軸の最小値
���� �"の質量分布を見る
非常に簡単に ��候補の質量分布を見てみます。単純に、����� �& �5�!のバンクに入っている始めの �
つのD5�!のみを使って質量を組んでいます。ただし、電荷は逆であることを要求しています。もちろん、
解析自体の正確さは全くありません。結果は図 ��のようになります。
���� 6�7 �5#�� :� ! ��; �5#���D���<�� ����D"'
���� 6C7 �$>��D)�.5)��D"'
���� 6�7 ��C$>/�;�D�2����8����6�7M8����6C7"::�$
�(����6�7M(����6C7"::�$
�(@���6�7M(@���6C7"::�$
�(����6�7M(����6C7"::�"DK
DF���>!� OO E����6�7:E����6C7J�D"' �� 一行
�
図 ��� �� 候補の質量分布 2��K9
���� カット
E���等の引数に与えるカットの条件も予め定義して組み合わせて使うことができます。
���� 6�7 �5#�� :� ! ��; �5#���D���<�� ����D"'
���� 6C7 �$>��D)�.5)��D"'
���� 6�7 �3�� �C ! DF���>!�D'
���� 6�7 �3�� �� ! DE����6�7:E����6C7J�D'
���� 6<7 �3�� �� ! �C OO ��'
���� 6�7 ��C$>/�;�D�2����8����6�7M8����6C7"::�$
�(����6�7M(����6C7"::�$
�(@���6�7M(@���6C7"::�$
�(����6�7M(����6C7"::�"DK
�C OO ��"' �� 一行
���� 6G7 ��C$>/�;�D�2����8����6�7M8����6C7"::�$
�(����6�7M(����6C7"::�$
�(@���6�7M(@���6C7"::�$
�(����6�7M(����6C7"::�"DK
��"' �� 一行
� グラフ
��� グラフ
次のようなデータファイル 6��4(�&� が存在すると仮定します。
C � � �
� � < �
�
� � � �
< � � �
� � � �
以下のように行なうと図 ��のような結果が得られます。
���� 6�7 V#����� J������>
���� 6C7 #������ �#��D���� ��D"'
���� 6�7 ���%�� �6�7K@6�7'
���� 6�7 #�� #���� ! �'
���� 6<7 ;�#�� ��#� >> �6#����7 >> @6#����7" MM#����'
���� 6�7 �#� �����"'
���� 6G7 �9��� :�C ! ��; �9����#����K�K@"'
���� 6B7 �C$>/�;�D)(D"'
���� 6H7 C$>3����"' C$>/#�#����K�"' C$>��C"' �C$>/�;�D)(D"'
���� 6I7 �C$>���=�&����@����"' C$>���"' �C$>/�;�D)(D"'
���� 6C�7 C$>���"' �C$>/�;�D)(.D"'
���� 6CC7 C$>��<"' �C$>/�;�D)(3D"'
図 ��� グラフ
��� エラーバー付きのグラフ
次のようなデータファイル 6��4(<����&� が存在すると仮定します。
C � � � � C � �
� � < � � � � �
� � � � � C � �
< � � � � � � C
� � � � � C � �
��
以下のように行なうと図 ��のような結果が得られます。
���� 6�7 V#����� J������>
���� 6C7 #������ �#��D����$��� ��D"'
���� 6�7 ���%�� �6�7K@6�7K��6�7K�@6�7'
���� 6�7 #�� #���� ! �'
���� 6<7 ;�#�� ��#� >> �6#����7 >> @6#����7 >> ��6#����7 >> �@6#����7" MM#����'
���� 6�7 �#� �����"'
���� 6G7 �9��� :�� ! ��; �9���8������#����K�K@K��K�@"'
���� 6B7 ��$>/�;�D)(D"'
���� 6H7 C$>3����"' C$>/#�#����K�"' C$>��C"' ��$>/�;�D)(D"'
���� 6I7 C$>���"' ��$>/�;�D)(.D"'
���� 6C�7 C$>���"' ��$>/�;�D)(3D"'
図 ��� エラーバー付きグラフ
�� 関数
フィティングの章でパラメータ付きの関数に関してはいくつか例を挙げましたが、その他の関数に関し
て述べます。
���� 予め形を与える関数
�変数の関数は次のように定義して使います。�変数としては �を使います。
���� 6�7 �5C :�C ! ��; �5C�D�CDKDI :�#��� :�"DK$G �KG �"'
���� 6C7 �C$>/�;�"'
���� 6�7 C$>3����"' C$>/#�#����K�"' C$>��C"' �C$>/�;�"'
�変数の関数は次のように定義して使います。�変数としては �、@を使います。
��
���� 6�7 �5� :�� ! ��; �5��D��DKDI :�#��� :�":���@"DK$G �KG �K$G �KG �"'
���� 6�7 C$>���"' ��$>/�;�"'
���� 6<7 C$>���"' ��$>/�;�D����D"'
���� 6�7 C$>��<"' ��$>/�;�D���CD"'
���� 6G7 C$>���"' ��$>/�;�D����D"'
以上の結果は図 ��のようになります。
図 ��� 関数
���� 組み込み関数の応用
組み込み関数を組み合わせて
��2�9 I � ���
���� , �� � �������
���� 2��� � � � ��9
��2�9 I � ���
���� , � 2��� � � � ��9
等の関数を書くためには以下のようにします。�����"等の引数は変数のオフセットで、�����"M�����"
の �番目の ��5����!の変数は �番目の ��5����!で �@�@�の �つを使うので次の �から始まります。
���� 6B7 �5C :�� ! ��; �5C�D��DKD�����"M�����"DK$C� KC� "'
���� 6H7 ��$>���(��������� K� K� KC� K< K� "'
���� 6I7 ��$>/�;�"'
���� 6C�7 �5C :�< ! ��; �5C�D�<DKD�����"M������"DK$C� KC� "'
���� 6CC7 �<$>���(��������� K� K� K� "'
���� 6C�7 �<$>/�;�"'
�� �����
0�"0'ではデータを �����クラスで保存できます。ただし、� 54��という歴史を引きずっているため
現在の構造は 2情けないぐらい9非常にシンプルです。これは近い将来改善される可能性は大いにあります
��
が、現状では ������を内部的にコールしている程度だと思います。
多くの実験グループが ����を採用する理由は #�� ��!ではなく +,,を使うことができるということ
ではなくそのデータの取り扱い、つまり、オブジェクト化されたデータを取り扱うことができるからだと
思います。もちろん、必然的に +,,等の言語に制限されますが���
����では決まった手続きで作成した自作クラスをそのままファイルに保存したり読み込んだりするこ
とができます。
���� 非クラスなデータ "�� �
まずはクラスではなく単純なデータを �����で保存してみます。ここでは -(� �!の数と �次元運動量
をイベント毎に保存することを考えます。次のようなマクロを 4(� �!<!�8����<��� ��+という名前で準備
します。
,
�5#�� :� ! ��; �5#���D������$����� ����DKD������D"'
0���� �(�����'
/��%���� (�(�����6��7K(@(�����6��7K(�(�����6��7K8(�����6��7'
����� :� ! ��; ������D(�����DKD(������D"'
�$>1����D�(�����DKO�(�����KD�(������0D"' �� �� %#� �#���� #������
�$>1����D(�(�����DK(�(�����KD(�(�����6�(�����7�/D"' �� G< %#� ����#�� ��#��
�$>1����D(@(�����DK(@(�����KD(@(�����6�(�����7�/D"' �� G< %#� ����#�� ��#��
�$>1����D(�(�����DK(�(�����KD(�(�����6�(�����7�/D"' �� G< %#� ����#�� ��#��
�$>1����D8(�����DK8(�����KD8(�����6�(�����7�/D"' �� G< %#� ����#�� ��#��
�� 5#�� �� �いい加減なデータです。"
��� �0���� #!�'#J�'MM#" ,
�(����� ! #MC'
��� �0���� A!�'AJ�(�����'MMA" ,
(�(�����6A7 ! /��%�����#:A"'
(@(�����6A7 ! /��%�����#:A"'
(�(�����6A7 ! /��%�����#:A"'
8(�����6A7 ! �2���(�(�����6A7:(�(�����6A7M
(@(�����6A7:(@(�����6A7M
(�(�����6A7:(�(�����6A7"'
-
�$>5#���"' �� �����に書き込んで次のイベント用になる。
-
�$>Q�#���"' �� 5#��に書き込む
-
ツリーを準備しておき、それにブランチを付けていきます。ブランチを設定するためには、その名前、デー
タがある場所、そして、データの型が必要で、それを上記のように 1����D名前DKDデータがある場所DKD
データの型D" とします。
��
����を起動して次のように実行します。うまくいけば、 � ������$�����$;�#�� 3の実行では何
もメッセージがでません。 W�� �で、4(� �!<!�8�������� というファイルの存在が確認できるはずです。
���� 6�7 � ������$�����$;�#�� 3
���� 6C7 W��
���� 非クラスなデータ ���#
とりあえず ��������で確認すると図 ��のようになっているはずです。
図 ��� �����&��� �����
では、����ファイルをプログラムから読み込みます。次のようなマクロを 4(� �!<!�8����<���&�+と
いう名前で準備します。
,
�5#�� :� ! ��; �5#���D������$����� ����D"'
0���� �(�����'
/��%���� (�(�����6��7K(@(�����6��7K(�(�����6��7K8(�����6��7'
����� :� ! ������:"�$>9���D(�����D"'
�$>���1���)�������D�(�����DKO�(�����"'
�$>���1���)�������D(�(�����DK(�(�����"'
�$>���1���)�������D(@(�����DK(@(�����"'
�$>���1���)�������D(�(�����DK(�(�����"'
�$>���1���)�������D8(�����DK8(�����"'
�� �1��� :%8 ! �$>9��1����D8(�����D"' �� この �行の方法でも可
�� %8$>���)�������8(�����"'
�� ��� ��
0���� �8���#�� ! �0����"�$>9��8���#���"'
���/でシェルコマンドを実行します。
��
��� �0���� #!�'#J�8���#��'MM#" ,
�$>9��8���@�#"'
��� JJ DV �� (����� ! D JJ �(����� JJ ����'
��� �0���� A!�'AJ�(�����'MMA" ,
��� JJ A JJ D �D
JJ (�(�����6A7 JJ DK D
JJ (@(�����6A7 JJ DK D
JJ (�(�����6A7 JJ DK D
JJ 8(�����6A7 JJ D"D JJ ����'
-
-
-
予めデータを読み込む場所を ���1���)������で設定しておけば、9��8���@�数字"で該当するイベ
ントのデータを所定の場所に書き込んでくれます。また、9��1���と ���)������を組み合わせて設定
する方法もあります。
����を起動して実行すると次のようになります。
���� 6�7 � ������$�����$��� 3
V �� (����� ! C
� ��K �K �K �"
V �� (����� ! �
� ��K �K �K �"
C �CK CK CK C B����"
V �� (����� ! �
� ��K �K �K �"
C ��K �K �K � <G<C"
� �<K <K <K G I�H�"
V �� (����� ! <
� ��K �K �K �"
C ��K �K �K � CIGC�"
� �GK GK GK C� �I��"
� �IK IK IK C� �HH�"
V �� (����� ! �
� ��K �K �K �"
C �<K <K <K G I�H�"
� �HK HK HK C� H�G<"
� �C�K C�K C�K �� BH<G"
< �CGK CGK CGK �B BC�H"
���� 自作クラス
自分で作ったクラスを ����で使うことは簡単にできます。次のような =@3���クラスを作ってD*<
+�����+という名前で保存します。
��� =@3���
,
��
��#���
0���� ��#�'
��%�#
=@3����" ,-'
�#���� ?=@3����" ,-'
0���� 9��0/�" , ������ ��#�' -
��#� ���0/�0���� �" , ��#� ! �' -
-'
����を起動して次のような操作で自作クラスを使用することができます。
���� 6�7 . =@3��� 3
���� 6C7 =@3��� :� ! ��; =@3����"'
���� 6�7 �$>���0/�B"'
���� 6�7 �$>9��0/�"' �� ' を付けると何も表示されない。
���� 6<7 �$>9��0/�"
�0����"B
���として自作クラスの存在を確認することができます。2リストが非常に長いので リターンし
ます。9
���� 6�7 ���
�3MM ���#���" ��� �*��� �(�����&
�3MM ���#���" ���� �*��� �(�����& 83������
�3MM ���#���" ���� �*��� �(�����& 81��&���
�3MM ���#���" ��� �*��� �(�����& �(���8������ ��%�# �F���
=@3��� 3 � ��� =@3���
���� クラス化されたデータ "�� �
����の最近のバージョンでは ��%A��を継承しなくても ����ファイルに保存することができます。
しかし、継承しない場合は ' ������と呼ばれるメンバ関数を自前で準備しなければいけない等の面倒なこ
とが多いので、継承した方が何かと楽です。D*+�����+を次のように変更します。
V#����� D��%A�� �D �� 追加
��� =@3��� ��%�# ��%A�� �� 変更
,
��#���
0���� ��#�'
��%�#
=@3����" ,-'
�#���� ?=@3����" ,-'
0���� 9��0/�" , ������ ��#�' -
��#� ���0/�0���� �" , ��#� ! �' -
3���/���=@3���KC" �� 追加
��
-'
V#� W���#������30F���" �� 追加
3���0���=@3���"' �� 追加
V���#� �� 追加
次に、以下のようなマクロを ���4��<��� ��+という名前で準備します。�5#��には第 �引数を与えるこ
とができ、�1% 2あるいは +�10�19、�1+�10�1、�-E0�1、�10E というキーワードを使うこと
ができます。�1%は既に存在している場合以外は新しいファイルを作ります。�1+�10�1はファイル
の存在の有無に関係なく新しくファイルを作ります。�-E0�1は存在するファイルを更新するために使い
ます。�10Eは読み込みだけを行うために使います。
,
�����$>(�����.#���D . =@3��� 3MMD"'
�5#�� :� ! ��; �5#���D�#����$��� ����DKD�83�8)�8D"'
����� :� ! ��; ������D�DKD�#���� 3���D"'
=@3��� :� ! ��; =@3����"'
�$>1����D�@DKD=@3���DKO�"'
��� �0���� #!�'#J�'MM#" ,
�$>���0/�#:�"'
�$>5#���"'
-
�$>Q�#���"'
-
これを � �#����$;�#�� 3のように実行すると ���4��<8�������� というファイルができます。また、同
時に D*+���� +���という '(���& ��)���*もできます。
��� クラス化されたデータ ���#
�����&��で ���4��<8�������� を確認します。Q��#�� #� J�3��� �3���> �� �#�#���@ ���
��� =@3��� #� �#�%��という警告が気になる場合は、予め . =@3��� 3MMを実行する必要があ
ります。
では、����ファイルをプログラムから読み込みます。次のようなマクロを ���4��<���&�+という名前
で準備します。
,
�����$>(�����.#���D . =@3��� 3MMD"'
�5#�� :� ! ��; �5#���D�#����$��� ����D"'
����� :� ! ������:"�$>9���D�D"'
=@3��� :� ! ��; =@3����"'
�1��� :% ! �$>9��1����D�@D"'
%$>���)�������O�"'
0���� �8�� ! �$>9��8���#���"'
��
��� �0���� #!�'#J�8��'MM#" ,
%$>9��8���@�#"'
��� JJ # JJ D D JJ �$>9��0/�" JJ ����'
-
-
. =@3��� 3MMの代わりに . =@3��� 3Mすると依存するファイルの時間情報を調べて '(���& ��)���*が
最新なら再度構築しません。 . =@3��� 3MMなら必ず再構築します。
����を起動して実行すると以下のようになります。
���� 6�7 � �#����$��� 3
0��� #� J�L�#��@���� )3.#3> ���#�� ����� �#%��@ =@3����3 ��
� �
C �
� <
� G
< H
��� $%���# &�'���(の利用
便利なクラスに関しては一般に '(���& ��)���*にして再利用します。例えば、�次元運動量を取り扱う
�.������S����クラスはL����'M';��);��)-(*��8����として存在します。このライブラリを使うために
は、次のように予め ��@���� .���D�#%(�@�#� ��D"'を実行する必要があります。
���� 6�7 ��@���� .���D�#%(�@�#� ��D"'
���� 6C7 �.������S���� :� ! ��; �.������S�����CK�K�K<"'
���� 6�7 �$>/����"'
!!>/���#�� �%A�� � HIGC�HHK ���!�.������S����K ���!�.������S����
�( $>HIGC�I< � ����� ��������
�( �R C
�( �� �
�( �U �
�( �L�#2��0/ � �%A�� ��#2�� #����#�#��
�( �1#�� ����CG<H %#� �#��� ����� ;���
�8 < �#�� �� �����@ �� ��K@K�K�" �� ���K�@K��K�"
�L�#2��0/ � �%A�� ��#2�� #����#�#��
�1#�� ����CG<H %#� �#��� ����� ;���
���� $%���# &�'���(の作成
先程の =@3���クラスを '(���& ��)���*にしてみます。若干面倒ですが、以下の �つのファイルを準備
する必要があります。
� D*+�(@ D*+�8$$
これが自作クラスの実装を記述したファイルで、今回は D*+�����+を少し編集したものです。
�
� D*+"�!:E�?�(
'(���& ��)���*を構築するために +����の内容を ����#��に教えるファイルです。
� D�:�H��
普通のD�:�H��です。L����'M'; �� ;D�:�H��を参考にして作ります。
�つのファイルの内容は以下の通りです。D�:�H��は ��&(� "�!5$ ���で確認したものです。
� D*+�(
V#����� D��%A�� �D
��� =@3��� ��%�# ��%A��
,
��#���
0���� ��#�'
��%�#
=@3����" ,-'
�#���� ?=@3����" ,-'
0���� 9��0/�" , ������ ��#�' -
��#� ���0/�0���� �" , ��#� ! �' -
3���/���=@3���KC"
-'
� D*+�8$$
V#����� D=@3 �D
3���0���=@3���"'
� D*+"�!:E�?�(
V#���� ��30F���
V���� �#�& ��� �� ���%��'
V���� �#�& ��� �� �����'
V���� �#�& ��� �� ����#���'
V���� �#�& 3MM ��� =@3���'
V���#�
� D�:�H��
�%A��� ! �
����� ! ��
/����� ! ��
���(����� ! $� V &��� ;�#����� ���� D$�D
�
3RR ! �MM
3RR5.)9� ! $� $Q�� $�(03
./ ! �MM
./5.)9� ! $�
��5.)9� ! $�����
����35.)9� ! +������ ����$���#� $$����"
����.01� ! +������ ����$���#� $$�#%�"
����9.01� ! +������ ����$���#� $$��#%�"
3RR5.)9� M! +�����35.)9�"
.01� ! +�����.01�" +����.01�"
9.01� ! +�����9.01�" +����.01�"
=��1N� ! =@3 +��%A���" =@3/#� +��%A���"
=���3� ! =@3 +������" =@3/#� +������"
=�.01�� ! �#%=@3 +�/�����"
�L550R8� +������" +��%A���" +�/�����"
�� +�=�.01��"
+�=�.01��" +�=��1N�"
+�./" +���5.)9�" +�./5.)9�" +T +����(�����" +X +�8R(..0FE.01�"
X��� D+X ����D
���
X�� $� +�=�.01��" +�=��1N�" ���
�#����� ���
X�� $� :/#� :
�L550R8� +������"
+������" +��%A���"
+�3RR" +�3RR5.)9�" $ +J
=@3 +��%A���" =@3 �
=@3/#� +������" =@3 � =@3.#�&/�� �
X��� D9�����#�� �#�#���@ +X D
����#�� $� +X $ +T
��&�を実行して ��)D*+���を構築します。先程のマクロファイル ���4��<���&�+の�����$�(�����.#���D .
=@3��� 3MD"'を ��@���� .���D�#%=@3 ��D"'に変更して実行すると同じ結果が得られます。
D*+����クラスのメンバに基本的なデータ型の '�" B�8 ��を追加することも可能ですが、その場合は
D*+"�!:E�?�(を
��
V���� �#�& 3MM ��� =@3���M'
のように変更する必要があります。これは正しくクラスオブジェクトのサイズを認識するためのおまじな
いです。また、クラス等の '�" B�8 ��の場合は更に �4�� しないためにコメントに>;;��>を追加する必要
があります �
� その他
���� ����環境設定
自作のマクロ集やライブラリー集をデフォルトの検索パスに追加するためには
+*�=8� �����
で設定します。����のデフォルトはL����'M';� 8;�*� ������ �8です。このファイルのE*!���8-� (
と D�8��-� (は次のようになっています。
L�#� : ���� /@��#(�� +��������"��#%
L�#� : ���� =��(�� +��������"�����
したがって、これにL3�D1;��� ;��)やL3�D1;��� ;�����を追加したい場合は+*�=8� �����に次
のように書きます。
L�#� : ���� /@��#(�� +��������"��#% +�*�=8"�������#%
L�#� : ���� =��(�� +��������"����� +�*�=8"����������
これらの設定は �8��$>(�#���"'で確認することができます。
���� �)で実行するときの�&等に関して
���� 6�7 . �@9��� 3
と行なう代わりに、
,
�����$>.��=���D�@9��� 3D"'
-
を使います。また、
,
�����$>(�����.#���D . �@9��� 3D"'
-
も使うことができます。これはバッチ用のファイル内で � ������*#�� 3と同等のことをするためにも
使えて
��バージョン 0#�"&�"& 時点での制限です。!���は開発ペースが速いため、このような制限は将来なくなるかもしれません。
��
,
�����$>(�����.#���D � ������*#�� 3D"'
-
のようにします。
���� アプリケーション コンパイル
このチュートリアルでは ����をライブラリとして使ったアプリケーションの開発には触れませんが、
そのときのコンパイルオプションに関しては簡単に説明しておきます。����をライブラリとして使った
場合、>一体何をリンクすればいいのか�>という疑問にぶつかるはずです。
というわけで ����にはそれを表示してくれるコマンド ����$���#�が準備されています。以下、
D�:�H��の一部です。
����0F3� ! +������ ����$���#� $$����"
����.01� ! +������ ����$���#� $$�#%�"
グラフィックを使う場合は$$�#%�ではなく$$��#%�です。ただし、これらのオプションは必要なくても
すべて表示されてしまうので、それが気にいらない場合はこのコマンドの結果を参考にして必要なものだ
けを各自で設定します。
参考文献
.�/ �� ��5!@ #� ��&����:��� �� ����
( 4�;;��� �8��!�8(
.�/ M� '(�����:� �!& �� ��7���
( 4�;;�������� �(�:5��8�74;N �7���;
=猿にも使える ���� 2���� �(�8( �B�! ��!:�*� 8�! 5��9>
.�/ F� #57��
( 4�;;���<7�8�:�:�74;N ?57��:;�:��!5$;-�8:�6��;���(�&�;&���*;���������( ��
( 4�;;���<7�8�:�:�74;�5)6;�O;��);&�8�;��� � �� ��;
=E���ユーザーのための ����入門 猿にも使える ����:番外編>
��