Locked History Actions

ANAROOT/掲示板

ANAROOT掲示板

質問・要望・バグ情報などなんでも気軽に書き込んでください。

書き込みのルール

  • 新しいスレッドは上に来るようにしてください。
  • 日付(と名前、匿名でもいいけど)をはじめに書くようにしてください。(あとで整理しやすいので)

minos-1.1.1-minimalのインストール

mkdir minos-1.1.1-minimal
cp minos-1.1.1-minimal.tar.gz minos-1.1.1-minimal
cd minos-1.1.1-minimal
tar zxvf minos-1.1.1-minimal.tar.gz
make untar
make bootstrap
make all

久保田実験中に改善してほしいと思ったこと

(2014 11/30 近藤)

TArtCalibCoin

LoadData()の中で、

  if(COIN != detector) return;
  if(F13 != fpl) return;

としているが、これはSAMURAIの時しかダメ。しかも久保田実験の時のRawDataDevice=2 SAMURAI, Focal=3 F3となっている。 Device=0 BIGRIPS, Focal63 B3Fもあったりする。 いっそのこと、こういうMappingをパラメータにして読み込ませてはどうか?そうするとTArtCalibCoinを実験ごとに書き換えずにすむ。

あと

  virtual void ReconstructData(){}

  virtual void ReconstructData(){LoadData()}

としてほしい。CoinだけLoadDataにしないといけない、というがわからないし、よく忘れるので。

xml2csv, csv2xml

csvをopenofficeで編集した後、csv2xmlで変換するが、空欄のセルがあると変換後のxmlがずれてわかりづらいバグになる。空欄があるときにはWarningを出してほしい。また、変換後のファイル名は自動的に.区切りで判断しているが、誤って上書きする危険があるので、むしろファイル名をインプットする仕様にしてほしい。すでにファイルが存在するときには上書きしてよいかどうかを聞くようにしてほしい。

TArtEventStore::Open

Rawデータをopenして失敗した時のメッセージFailed to open the file...はRIBFROOT-InfoではなくErrorにしてほしい。気づきにくい。

解析残り時間(その2)

(2013 07/18 近藤) 2GBを超えるファイルが読めない場合はgccの

-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64

オプションをつければOK。

(2013 06/25 近藤) 解析残り時間表示用コードでTArtCounterというのを作ってみました。 AnaLoopにもあるけどアクセスできないので。AnaLoopとAnapawのカウンタを真似ました。 コンパイルしてライブラリをロードしてください。

こんな感じで1秒ごとに表示されます。

  RIBFROOT-Info : [TArtParserFactory] Format = RIDF
  RIBFROOT-Info : [TArtMapper] Constructor
  RIBFROOT-Info : [TArtParserRIDF] Run name = dayone
  RIBFROOT-Info : [TArtParserRIDF] Run number = 0251
====>                         -     141437 ( 19.0s passed, remaining is   1.8m)

.rootrcについて

(2013 06/07 近藤) 5/20の記事はウソでした。たぶん原因は.rootrcで

Unix.*.Root.UseTTFonts:     false

にしてると起こる。

(2013 05/20 近藤) ROOTのバージョンを変更したら.rootrcもあわせてあげないとTTree::Drawで2次元プロットするとROOTが落ちる。(結構ハマった。。。) $ROOTSYS/etc/system.rootrcをコピーしてくれば良い。

TArtSAMURAIParametersについて

(2012 12/05 近藤) 例えばTArtSAMURAIParameters::ParseHODPlaPara(TXMLNode *node)では

  for ( ; node; node = node->GetNextNode()) {
    if (node->GetNodeType() == TXMLNode::kXMLElementNode) { // Element Node
      if (strcmp(node->GetNodeName(), "ID") == 0)
        id = atoi(node->GetText());
      if (strcmp(node->GetNodeName(), "NAME") == 0)
        name = node->GetText();
...

と書かれているが、

  for ( ; node; node = node->GetNextNode()) {
    if (node->GetNodeType() == TXMLNode::kXMLElementNode) { // Element Node
      if (strcmp(node->GetNodeName(), "ID") == 0)
        id = atoi(node->GetText());
      else if (strcmp(node->GetNodeName(), "NAME") == 0)
        name = node->GetText();
...
      else
        TArtCore::Warning(__FILE__,"invalid Node Name in ParseHODPlaPara");

として、パラメータファイルの書き損じなどに気付きやすいようにしておきたいです。

TLorentzVector

(2012 11/13 近藤) Erelを組むときにROOTのクラスTLorentzVectorを使うと便利。 だけどオブジェクトの生成をループの中に書くと、とっても解析遅くなるので注意。 (体感では10倍以上遅くなった。)

ANAROOT講習会@東工大

(2012 10/17 近藤) ANAROOT講習会資料です。

SAMURAIに関する情報はSAMURAI Dayone Wikiページをご参照ください。

nadekoのhstore

(2012 08/07 近藤) すでにファイルが存在する場合には上書きするかどうかを聞いて、yesなら上書き、という風にしてほしい。

(2012 09/06 田中) これは僕も前から思ってました。一方printは問答無用で上書きするのもyes/noにしたいです。 近い内に更新します。

パラメータについての提案

(2012 12/05 近藤) 作ってみました。型についてはいちいちXMLファイルに書くという決まりにしました。

これはSAMURAIに限らずどのセットアップでも使えるので、とりあえずクラス名をTArtParametersTArtUserParametersとしました。 ただしTArtBigRIPSParametersやTArtSAMURAIParametersの親っぽい名前になってしまっているので、 もっと下々な感じの名前の方が良いかもしれません。名前募集中。 TArtCore::Warningを復活させて欲しい。パラメータのミスっている場合のメッセージにちょうど良いので。 今はとりあえずInfoで代用させています。

(2012 07/18 近藤) ANAROOTでは全体で一個で良いようなパラメータ(例えばNEBULA全体の位置とかHodoscopeの全体の位置とか)の扱いの例が無い。 そういうパラメータの取扱いについての提案。 自分のオフライン解析では以下のようなことをしています。

void TArtSAMURAIParameters::ParseCalibBeamPara(TXMLNode *node){
  std::string text;
  Double_t    val=0;
  for ( ; node; node = node->GetNextNode()) {
    if (node->GetNodeType() == TXMLNode::kXMLElementNode) { // Element Node
      if (strcmp(node->GetNodeName(), "NAME") == 0)
        text = node->GetText();
      if (strcmp(node->GetNodeName(), "val") == 0)
        val = atof(node->GetText());
    }
  }
  beam_pmap.insert( std::pair<std::string,Double_t>(text,val) );
  return;
}
//__________________________________________________________________________
const Double_t TArtSAMURAIParameters::FindCalibBeamPara(std::string text) const
{
  std::map<std::string,Double_t>::const_iterator it = beam_pmap.find(text);
  if(it != beam_pmap.end()) {
    return it->second;
  }
  else return 0;
}

としておいて、使うときには

  const Double_t offset = samuraiparameters->FindCalibBeamPara((string)"TOF713Offset");
  fTOF = fTOF+ offset;

とする。つまり名前でパラメータを管理しておくということ。

オンラインのバージョンだとパラメータを増やす度にTArtSAMURAIParametersを書き換えないといけなかったが、 こうしておくといちいちソースを書き換えなくてよいので楽ちん。 ただし型(ここではDouble_t)と初期値(ここでは0)は決めておかないといけない...

(2012 09/06 田中) たしかにparametersを書き換えるのはかなり面倒なので、そういう思想の実装に切り替えるのは賛成です。

>>型縛り
template<class T> void TArtSAMURAIParameters::FindCalibBeamPara(std::string text, T* val) const

として、見つからなかった時はval=0(null)とするのが個人的な趣味にそぐいます。 さらに凝ったことを考えると、先にParseすると型の処理がめんどうなので、 一回目の呼び出しで呼び出された型に応じてatofしたりstringとして保存すればいい気がします。 これは

ParsePara(double val)
ParsePara(string val)

と必要な型ごとにParseする関数を作るか、もしくは、

if(typeid(*val) == typeid(double){ hogehoge;}

とかで処理を分岐すればうまくいく気がします。

Mapについての要望(疑問?)

(2012 07/06 近藤) 現在PlasticのTArtRIDFMapはpairを用いて管理されている。Mapをキーにしたpairコンテナにparaを格納しておく。TArtCalibPlastic内でFindPlasticPara(&mm)としてparaを見つけ、para->GetID()してあるIDのplaにデータを入れる。ただしSAMURAIではF3plとF3pl-40nsというのがあって、こいつはTは違うけどQは同じ。この場合、例えばF3pl-40nsのparaにはQのMapは(重複しているために)格納されないので、Qのデータが入らない。別のIDに同じマップが割り当てられてもええじゃないか、という仕様にしてほしい。(でもSAMURAI DayoneではなぜかF3pl-40nsのQが見える。なぜ?)

ただしデメリットもある。多チャンネルのものの場合、誤って違う2つのIDのQに対して同じMapを書いてしまったりする。そうするとそれっぽいデータは入っているので、TとQの相関を見ない限り気づかなくなる。

例えば違うIDのものでMapがかぶったら、Warningメッセージを出すのかな?でもメッセージはわりと無視しそうだし。うーむ。誰か妙案ありませんか?

SAMURAI-DayoneはF3pl-40nsでもQを入れる様にしたはず。詳しくは田中君。(磯部)

(2012 09/06 田中) DayoneではQが見えなといちいち文句言われそうだったのでとりあえずmultimapを使いました。 まさに近藤さんが欲しているような機能をもっているのがmultimapかと思います。 ただし、multimapは幾分扱いが面倒だったりするのでもう少し愚直な方法で実装するのもありだと思います。 とりあえずはmapを共有するdetectorはf3pl-40nsだけだったように希少なので、 そいつだけ特別扱いして「気をつける」が無難でしょうか。

csv形式のParameterファイルの読み込み

(2012 08/20 近藤)少し修正しました。 LoadParameterListという関数を作りました。

PLA, db/Pla/PlaMap.csv
NEBULA, db/NEBULA/NEBULAMap.csv
NEBULA, db/NEBULA/NEBULATCal.csv

という中身のParaList.csvを用意しておいて、LoadParameterList("ParaList.csv")とすれば複数のファイルを一気に読み込んでくれます。

(2012 07/04 近藤)作ってみました。

使用例

  TArtCSVParameter *para = new TArtCSVParameter();
  para->LoadParameter("NEBULA","input1.csv");
  para->LoadParameter("NEBULA","input2.csv");
  para->Write("output.xml");
  delete para;

以下仕様

  • カンマの数がおかしいとメッセージ
  • 改行はスキップ
  • 空白はスキップ
  • 複数のファイルを読み込める。例えばMapとTcalのパラメーターなどを別々のファイルにできる。
  • 同じ情報(ID)がある場合には上書きされる。IDで各ノードを識別しているので、別のファイルで同じIDがある場合には、先に呼んだ方が上書きされます。注意。
  • xmlファイルを吐ける
  • xmlのNodeを渡せばANAROOTですぐに使えるはず(まだ未確認。最悪xmlファイル吐いて読み込めばいいのだけれど...)
  • XMLの構造が変わるとダメかも?今は

 dataroot
     |--------------------|----...
   NEBULA              NEBULA
     |                    | 
  ID(=1),NAME,...    ID(=2),NAME,...

という構造のみを考慮している。

ANAROOTと組み合わせるときにrootcintでエラーになるが、optionの-pをつけるとできた。

そのうち、 TArtSAMURAIParameters *para = new TArtSAMURAIParameters(); para->LoadParameter("NEBULA","input1.csv"); を出来るようにしたいです。 中身はTArtCSVParameterを呼んでいる感じ。(磯部)

Nadekoのdlopen error

(2012 07/03 近藤)ROOTのバージョンを5.34.00にしたら以下のエラー

[kondo@kurage anaroot]$ root
add include path : -I/home/kondo/exp/samurai/dayone/anaroot/src/include
reading libXMLParser.so
reading /home/kondo/exp/samurai/dayone/anaroot/src/lib/libanaroot.so
dlopen error: /home/kondo/exp/samurai/dayone/anaroot/src/lib/libananadeko.so.0: undefined symbol: gDirectory
Load Error: Failed to load Dynamic link library /home/kondo/exp/samurai/dayone/anaroot/src/lib/libanaroot.so

ROOTのversion5.30.00だと大丈夫。Nadekoのversionは2012SAMURAI.dayone.tanakaのr322。

(2012 09/06 田中) gDirectoryの定義されているファイルが変わったんでしょうかね。 発見したらまた書き込みます。

(2012 10/12 田中) 5.34.02を試してみましたが普通に問題ありませんでした。 おそらく5.34.00がだめなんでしょう。

2012SAMURAI.dayone.tanakaコンパイルエラー

(2012 06/27 近藤)2012SAMURAI.dayone.tanakaをコンパイルするとこんなエラー。

src/TAlEncSAMURAIDCHitExample.cc: In member function 'virtual bool TAlEncSAMURAIDCHitExample::Calculate()':
src/TAlEncSAMURAIDCHitExample.cc:258: 警告: 符合付きと符合無しの整数式同士の比較です
src/TAlEncSAMURAIDCHitExample.cc:267: 警告: 符合付きと符合無しの整数式同士の比較です
src/TAlEncSAMURAIDCHitExample.cc:269: error: call of overloaded 'abs(double&)' is ambiguous
/usr/include/stdlib.h:691: note: candidates are: int abs(int)
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/cstdlib:142: note:                 long int std::abs(long int)
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/cstdlib:172: note:                 long long int __gnu_cxx::abs(long long int)
src/TAlEncSAMURAIDCHitExample.cc:275: 警告: 符合付きと符合無しの整数式同士の比較です
make[2]: *** [src/TAlEncSAMURAIDCHitExample.o] エラー 1

これは僕のPCだけ?環境依存?fabsにしておいてほしい。 また警告の符号なんたらというメッセージもかなり気になる。

(2012 09/06 田中)

警告: 符合付きと符合無しの整数式同士の比較です

これは例えば、

for(int i=0; i<std::vector::size(); ++i){;}

とかすると、std::vector::size()の戻り値はintじゃなくてstd::vector::size_typeなので怒られるのですが、 実用上は問題ないので放置しています。 これを真面目に対処するとたぶん、

for(std::vector::sizetype i=0; i<std::vector::size(); ++i){;}

とかなりますが、実際問題、型で表現できる数の上限を越えたらどっちにしろ循環するのでここまで手を加えてもめんどくさいだけで、

for(int i=0; i<(int)std::vector::size(); ++i){;}

と、明示的にキャストしてしまえばwarningは(設定によるかもしれませんが)出なくなります。 無駄に警告が増えるのは良くないので全部intにキャストしてしまっていいと思います。

error: call of overloaded 'abs(double&)' is ambiguous

これは完全に僕のまちがいでした。std空間に定義されているabsはintなんですね。 std::absではなく、普通にabsにすればdouble版が呼ばれるはずです。

anafile

(2012 04/21 近藤) anafileで定義していないゲートが書いてあるとrootが落ちる。出来ればそんなゲート定義していないよ、っていうメッセージが出てほしい。

(2012 04/22 田中) histogramに使った場合はbookした時点でerrorメッセージがでます。stopで使った場合はstartしたあとにgateがなかったら落ちます。 stopより先にanafileでgateを定義させればstopを処理する時点でerrorを吐けますが、、考えておきます。

(2012 06/03 田中) anafileまわりの仕様が変わったので解決かと

TAlEncSAMURAIPlaExample

(2012 04/21 近藤) TLcalとTRcalの追加をお願いします。

(2012 04/22 田中) 2012SAMURAI.NaN.tanakaに追加しました。

anafile編集用のemacsのlispコード

(2012 04/19 近藤)Julienが作った lispのコード を少しいじってAnaloopのanafile用にした。

ana-mode.el

~/.emacs.d/に放り込んで.emacsに以下を追加すればOK。

; ANALYS mode
(autoload 'ana-mode "~/.emacs.d/ana-mode.el" "Mode for editing ANA files." t)
(setq auto-mode-alist (cons '("\\.ana$" . ana-mode) auto-mode-alist)) 

(2012 04/23 田中) comment out に指定する文字の定義は<analys>とかを指定するところより 先に書かないと優先されないので、先に書くことをおすすめする。 ちなみに"//"はコメントアウトとして使えます。 また、行の途中にコメントアウト書くことも出きるようになりました。

AnaLoopのIDのリスト

(2012 04/18 近藤) Analoopでlv()でvalの定義が出るけど、IDのリストを表示させるコマンドがほしい。

(2012 04/18 田中) やっぱりIDを表示は大変なので、EWNum.hhの該当部分をまるごとprintすることにしました。とりあえずこれで勘弁願います。

解析残り時間

(2012 04/03 近藤) Analoopでstatus()としたときに後何分で解析が終わるかを表示させてほしい。

(2012 04/18 田中) どこからか全イベント数を取ってこれますか?(自分で書くのは...)

(2012 06/03 田中) 実装しました(2012SAMURAI.dayone.tanaka)。それに伴い、今までAnalysis Speedは解析ルーチンだけの時間にしてたがGetNextEventも解析時間に入れることに。

掲示板ページはじめました

(2012 03/31 近藤) 要望、Question、バグ情報などをまとめました。

XML by OpenOffice (複数X window)

入出力は下記のエントリーで問題ないが、OpenOffice(最近はlibreoffice)は同一ユーザーによる 複数アプリケーションの起動に対応していない。 さらに、複数のリモートアクセスによる複数のX windowにおいて、新しいファイルを開いたときに それぞれのX windowにフォワードできない。 つまり、同一のユーザーアカウントを使っているとOpenOfficeの奪い合いになる。 dbの編集は違うユーザーアカウントで行う、とかが妥協点かも。最悪。

XML by OpenOffice (入力)

(2012 06/08 田中) xmlの書き方で、一部のparameterに歯抜け・余分があるとはみ出したりする。 対応は大変だと思うのでユーザーが気をつけるということで。

XML by OpenOffice (出力)

(2012 06/02 田中) 出力するときに隣り合うセルの要素が同じだとだめなのを解決した。 ただし、一行目で隣り合う(ry は未対応(実際問題、そういう場合はないと思われるので無視)

calc2xml.v2.xsl

ポイントは再帰関数を使えば変数っぽいことが実装できるということ。 多分動くと思います。 (再帰関数を使っているのでものすごくでかいファイルをコンバートするときはメモリ不足とかになるかも)

パッケージ化したのが以下の通りです。

anaroot_filter.ver1.01.jar

下記のエントリーを参考にインストールください。 前のバージョンが入ってるときは何か怒られるかも知れません。

XML by OpenOffice (入出力)

(2012 04/21 近藤) OpenOfficeのCalcはどうも隣り合うセルはまとめて一つの要素としてしまう様子。そのためにある行の列の要素数が1つ少なくカウントされている。変数を定義できるとまあすぐに対応できるのだけれど、xsltでは定数しか定義できない。今のところ挫折中。

(2012 04/20 近藤) 小林君の作ったものを参考にして作って(パクって)みました。

xml2calc.xsl

calc2xml.xsl

anaroot_filter.ver1.00.jar

calc2xml.xslはほとんどどっかからパクったものです。ちゃんと中身をチェックしていませんが、とりあえずSAMURAIHOD.xmlとかちゃんと読み書きできました。

  •  

  • xml の出力で、バグが見つかったので、今のところ使いものになりません(同じ行の隣り合うセルに同じ値があると、正しく出力されない)。もう少しお待ちください。 → 上記エントリーで解決

  •  

  • OpenOffice Calc で xml を取り込むためのフィルタ (xml2calc.xsl) を XSLT で作成した。 xml を出力するためのフィルタ (calc2xml.xsl) と合わせて使うと、OpenOffice Calc で xml の読み書きができる。!Open Office では、XSLT のフィルタのパッケージを簡単に作ることができるので、anaroot_filter.ver0.02.jar という XSLT フィルタパッケージ (拡張子は .jar)を作った。以下、使い方を示す。

  • anaroot_filter.ver0.02.jar を任意のディレクトリにダウンロード

  • OpenOffice Calc を起動し、[ツール(T)] > [XML フィルタの設定...] を開く。

  • [パッケージを開く(O)] ボタンを押し、ダウンロードしてきた anaroot_filter.ver0.02.jar を開く。

  • 「XML フィルタ ' ANAROOT XML Filter' は正常にインストールされました。」というメッセージがでる。これで準備完了。
  • 次にデータの出力を行う。まず以下のようなデータを作る。変数名は必ず1行目に書く。数字のみの変数名は使えないようだ。値が入ってないセルなどがあると、うまく動かないかもしれない。sheet 名はNEBULA。複数の sheet には対応している?

A

B

C

1

ID

NAME

value

2

1

U101

3.1

3

2

U102

4.1

4

3

U103

5.1

NEBULA

  1. [ファイル(F)] > [名前を付けて保存(A)] を選択。

  2. ファイル名を test とし、ファイルの種類(T) で ANAROOT_XML xml を選択し、「選択した書式を保持(K)」で保存。

  3. 以下のような xml ファイル (test.xml) が作成される。
    • <?xml version="1.0" encoding="UTF-8"?>
      <dataroot>
      <NEBULA>
      <ID>1</ID>
      <NAME>U101</NAME>
      <value>3.1</value>
      </NEBULA>
      <NEBULA>
      <ID>2</ID>
      <NAME>U102</NAME>
      <value>4.1</value>
      </NEBULA>
      <NEBULA>
      <ID>3</ID>
      <NAME>U103</NAME>
      <value>5.1</value>
      </NEBULA>
      </dataroot>
  4. OpenOffice Calc を再起動。

  5. 次にデータの読み込みを行う。
  6. [ファイル(F)] > [開く(O)] を選択。

  7. ファイル名: test.xml, ファイルの種類(T) で ANAROOT_XML xml を選択し、開く。

XML by OpenOffice

BeyondXML を使った時のメモ。これをベースに、Openoffice で 直接 XML 形式をいじれるような XSLT ファイルを書くのも悪くないかもしれない。XSLT を書くに当たり、サンプルで覚えるXSLTプログラミング がとても参考になりそう。

  1. BeyondXML version 0.9(英語版)のダウンロード から zip ファイルをダウンロード

  2. 適当な所で展開し、中身を確認
    • $ unzip BeyondXML09_en.zip
      $ cd BeyondXML09
      $ ls
      BeyondXML-Calc-to-RNG.xsl
      BeyondXML-Calc-to-XML.xsl
      BeyondXML-Table-to-RNG.xsl
      BeyondXML-Table-to-XML.xsl
      BeyondXML-XML-to-Calc.xsl
      BeyondXML-for-Calc.xsl
      BeyondXML-for-Table.xsl
      README_BeyondXML.html
      Sample Data/
  3. Open Office Calc を起動し、[ファイル(F)] > [開(O)] で Sample Data フォルダ の CalcSample09.ods を開く。

  4. Open Office Calc の [ツール(T)] > XML フィルタの設定... を開く。

  5. 新規作成(N) ボタンを押し、[全般] タブで以下のように指定。

    • [全般] タブ
      フィルタ名(F)        BeyondXML-Calc-to-XML
      アプリケーション(F)   OpenOffice.org Calc (.ods)
      ファイルの種類名前(C) BeyondXML-Calc-to-XML
      ファイル拡張子(D)     xml
      コメント(E)  なし
      
      [変換] タブ
      DocType(A)                空白
      DTD(B)                    空白
      エクスポート用 XSLT(D)      BeyondXML-XML-to-Calc.xsl ファイルのパス
      インポート用 XSLT(F)        空白
      インポート用 テンプレート(I) 空白
  6. [ファイル(F)] > [エクスポート(T)] を選択。

  7. ファイルの種類(T) で BeyondXML-Calc-to-XML xml を選択し、保存。

  8. CalcSample09.xml が作成される。

warning messesage

エラー等はく際は
- Info
- Error
- Warn (現段階ではDebugと同等)
- Debug
を用意しているが、Infoが多くでて来ると、start()した後にうざい。
その為にWarnを準備しているが、どこかにメッセージをつめておいて、
dmesg()
みたいな事をしたらメッセージをdumpする仕様にしようかと思っている。

TArtDataObjectのSetDetectorNameについて

nai->SetDetectorName(para->GetDetectorName());

みたいに"*"演算子なしで受け渡ししたいので、

void SetDetectorName(TString *val){name = *val;}

をつけ加えませんか? (2012 2/28 田中)

TClonesArrayのClear

TCLonesArrayでメモリリークが起こる理由がわかった気がする。 公式をみると、

TClonesArray::Delete
 Clear the clones array. Use this routine when your objects allocate
 memory (e.g. objects inheriting from TNamed or containing TStrings
 allocate memory). If not you better use Clear() since if is faster.

と書いてあり、TStringsをクラス内で使っている場合はClearではなくDeleteを使えとのこと。 基本的にClearではなくDeleteにしたほうがいいかも。 (2012 2/27 田中)

bug情報の書き込みについて

これから先バグ報告スレッドがあると便利かも? あと、プログラムが落ちた場合は、

The lines below might hint at the cause of the crash.
...
that might help us fixing this issue.
===========================================================
#12 0x064ccc59 in TCanvas::RaiseWindow() () from /usr/local/root.5.32/lib/root/libGpad.so
...
#16 0x07a3eae6 in hn () at src/TArtAlias.cc:19
===========================================================

の部分を貼っつけてください。 あとはどうやったら落ちたとか再現性とかまで言っていただけるとdebugが楽です。 (2012 2/25 田中)

最適化

(2012 2/9 田中)FindなんちゃらでPlaとかParaを探すときに現在はシーケンシャルに検索しているけれど、 これを、あらかじめmappingしておいて一発で検索出きるようにしたところNEBULAのencで大体二倍速になった。 具体的にはTClonesArrayのnewをするところで同時にIDをkeyとし、何番目に入れたかやparaを値としてstd::mapにつめます。

 fIDNPlaMap.insert(std::pair<int, int>(para->GetID(), npla));

で、Findなんちゃらではこのmapから検索します。

 std::map<int,int>::const_iterator it = fIDNPlaParaMap.find(id);
 if(it != fIDNPlaParaMap.end()) return GetNEBULAPlaPara(it->second);
 else return 0;
(ClearDataでstd::map.clear()を呼のを忘れずに。)

Findとつくものに対して全てmapを作って上げれば完成です(NEBULAの場合は3箇所)。 気が向いたら実装してみてください。

環境設定について

(2012 2/8 田中) thisroot.shはスクリプトがあるディレクトリで実行しないとおかしくなるので、僕は.bashrcに、

# root
export temp_dir=$PWD
cd /usr/local/root
source bin/thisroot.sh
cd $temp_dir
unset temp_dir

# anaroot
export TARTSYS=$HOME/anaroot
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TARTSYS/lib

こんなのを書いています。 いずれディレクトリ構造や昔のanaloginみたいなのも作る必要があると思うので、 そのときにこの問題も合わせて検討ください。

-> cdをcdlsという関数に張り替えているのが原因でした。普通の場合は

. /usr/local/root/bin/thisroot.sh

とかで問題ないのですね。お騒がせしました。

analoginみたいなもの

僕はこんなスクリプト使っています。(近藤) makeanadir.sh

(2012/2/14 田中) analoginをそのままにシンプルにしてみました(誤爆対策でy/n付き) analogin.sh (変更したいけど権限がないといって怒られる...)。

(2012/03/31 近藤)WritableGroupに加えてみました。変えられるかどうか試してみてください。

これを回す前に、

exp/commisioning_samurai
exp/commisioning_samurai/src(anaroot_vX.X.Xへのリンクを貼ることになる気がする)
exp/commisioning_samurai/users
exp/commisioning_samurai/users/default(新しいユーザーを作るときはこれをまるごとコピることになる)

を置いてもらい、あとは.bashrcに

alias analogin='source hogehoge/analogin.sh'

と書いてもらえば完成です。

XML by Linux PC

LinuxでXMLをエクセルのように編集できるソフト誰か知りませんか?(近藤) ないとxmlは形式は使いづらい。。。 とりあえず磯部さんにxml<-->csv変換スクリプトをperlで作ってもらったので、 csvにしてOpenOffice.org 3.1.1で編集してみる。 こいつで保存すると文字列を""でくくる。まったく余計なことをしやがりますね。。。 xml2csv.plの適当なところに

$line =~ s/\"//g;# added for remove double quotation

みたいのを入れる。

ただしxml2csv.plはすべてのIDでパラメータの数が同じ場合のみ。田中君はInterruptのch用にIgnoreというパラメータをこのchだけに入れていたりするので、こういうのに対応しようとスクリプトを変えようと思うとかなり面倒。うーむ。。。やっぱりLinuxでエクセルlikeなエディタがあるとよいのですけれど。実はMACやWindowsはできる?できないのはLinuxだけ?

google documentを利用

磯部さんがgoogle documentからダウンロードするスクリプトを書いてくれたのでそれを使うまでのメモ。

  1. まずはgoogleドキュメントで適当にスプレッドシートを作成。
  2. getxml.pyを走らせるためにgdata-2.0.16.tar.gzというpythonモジュールをどっかから持ってくる。

んでrootで

python setup.py install

これで入るみたい。だけどgetxml.pyを走らせると

ImportError: No module named json

と怒られる。

yum search json

でpython-json.noarchというのがあるので yum installする。そうすると動いた!素敵です。

yum searchでpython-gdata.noarchというのも引っかかったのでこれもyumで入るっぽいです。

ANAROOTの心配?

treeなどを含むrootファイルは結構容量がある。複数の人がANAROOTを使用して皆がそれぞれrootファイルをたくさん作りだすとかなりのディスク容量が必要になるかも?

-->初めはディスクサイズを気にしないでtreeに書き出し、気になり始めたらデータを削る事を考えてはと思っている。(磯部)

ANAROOTコンパイルエラー(1)

コンパイルすると以下のようなエラーで怒られる。

make[4]: Entering directory `/home/kondo/exp/temp/anaroot/sources/Reconstruction/BigRIPS'
rootcint -f anabrips_dict.cc -c -I. -I../../.. -Iinclude -I/usr/local/src/root/root_v5.30.00/include -I../../Core/include include/TArtBeam.h include/TArtBeamPara.h include/TArtBigRIPSParameters.h include/TArtCalibPID.h include/TArtDetMap.h include/TArtFocalPlane.h include/TArtFocalPlanePara.h include/TArtIC.h include/TArtICPara.h include/TArtOptMatrix.h include/TArtPID.h include/TArtPPAC.h include/TArtPPACPara.h include/TArtPlastic.h include/TArtPlasticPara.h include/TArtRIPS.h include/TArtRIPSPara.h include/TArtTOF.h include/TArtTOFPara.h include/segidlist.h anabrips_linkdef.h
Error: cannot open file "TDOMParser.h"  include/TArtICPara.h:6:
Error: cannot open file "TXMLNode.h"  include/TArtICPara.h:7:
Error: cannot open file "TDOMParser.h"  include/TArtPlasticPara.h:6:
Error: cannot open file "TXMLNode.h"  include/TArtPlasticPara.h:7:
Warning: Error occurred during reading source files
Warning: Error occurred during dictionary source generation
!!!Removing anabrips_dict.cc anabrips_dict.h !!!
Error: rootcint: error loading headers...
make[4]: *** [anabrips_dict.cc] Error 1

anaroot/sources/Reconstruction/BigRIPS/Makefile.amに

CXXFLAGS += -I$(ROOTSYS)/io/xmlparser/inc                                       

を追加した後autogen.shなどの標準のINSTALLの手順を踏めばOK。 -->コンパイルできても動かない。

-->確か何かxml関連のパッケージをインストールしないといけないが、何を入れる必要があるか忘れちゃいました。yum search xmlでそれっぽいのを入れてみて下さい。たぶんヘッダーで関数定義は可能だが、実体を含むライブラリが無くて動かないんだと思います。(磯部)

-->rootのconfigureで--enbale-xmlを付けたらうまくいきました。その前にあらかじめxml関係をインストールしておかなくてはいけないかも。(近藤)

-->defaultで--enable-xmlかも。libxml2とlibxml2-develを入れればOKかと。 <<br>>http://root.cern.ch/drupal/content/build-prerequisites Ignoreというパラメータをこのchだけに入れていたりするので、こういうのに対応しようとスクリプトを変えようと思うとかなり面倒。うーむ。。。やっぱりLinuxでエクセルlikeなエディタがあるとよいのですけれど。実はMACやWindowsはできる?できないのはLinuxだけ?

google documentを利用

磯部さんがgoogle documentからダウンロードするスクリプトを書いてくれたのでそれを使うまでのメモ。

  1. まずはgoogleドキュメントで適当にスプレッドシートを作成。
  2. getxml.pyを走らせるためにgdata-2.0.16.tar.gzというpythonモジュールをどっかから持ってくる。

んでrootで

python setup.py install

これで入るみたい。だけどgetxml.pyを走らせると

ImportError: No module named json

と怒られる。

yum search json

でpython-json.noarchというのがあるので yum installする。そうすると動いた!素敵です。

yum searchでpython-gdata.noarchというのも引っかかったのでこれもyumで入るっぽいです。

ANAROOTの心配?

treeなどを含むrootファイルは結構容量がある。複数の人がANAROOTを使用して皆がそれぞれrootファイルをたくさん作りだすとかなりのディスク容量が必要になるかも?

--