#acl Known:read,write All:read #この行は編集しないでください。(たぶんできないけど) = 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の時しかダメ。しかも久保田実験の時のRawDataは Device=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のカウンタを真似ました。 コンパイルしてライブラリをロードしてください。 * TArtCounter.cc [[attachment:TArtCounter.cc]] * TArtCounter.hh [[attachment:TArtCounter.hh]] * 使用例 [[attachment:CounterExample.cc]] こんな感じで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講習会資料です。 * インストールのメモ(例) [[attachment:install-example.txt]] * マクロによる解析の例 [[attachment:MakePlaHist.C]] * ANAROOTに関する資料 [[attachment:ANAROOT講習会資料.pdf]] SAMURAIに関する情報は[[http://be.nucl.ap.titech.ac.jp/~smdayone/moin.cgi|SAMURAI Dayone Wiki]]ページをご参照ください。 === nadekoのhstore === (2012 08/07 近藤) すでにファイルが存在する場合には上書きするかどうかを聞いて、yesなら上書き、という風にしてほしい。 (2012 09/06 田中) これは僕も前から思ってました。一方printは問答無用で上書きするのもyes/noにしたいです。 近い内に更新します。 === パラメータについての提案 === (2012 12/05 近藤) 作ってみました。型についてはいちいちXMLファイルに書くという決まりにしました。 * [[attachment:TArtUserParameters.hh]] * [[attachment:TArtUserParameters.cc]] * [[attachment:UserParameters.xml]](パラメータXMLファイルの例) これはSAMURAIに限らずどのセットアップでも使えるので、とりあえずクラス名を--(TArtParameters)--TArtUserParametersとしました。 --(ただし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(text,val) ); return; } //__________________________________________________________________________ const Double_t TArtSAMURAIParameters::FindCalibBeamPara(std::string text) const { std::map::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 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 近藤)作ってみました。 * [[attachment:TArtCSVParameter.hh]] * [[attachment:TArtCSVParameter.cc]] 使用例 {{{ 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とかを指定するところより 先に書かないと優先されないので、先に書くことをおすすめする。 ちなみに"//"はコメントアウトとして使えます。 また、行の途中にコメントアウト書くことも出きるようになりました。 === 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 は未対応(実際問題、そういう場合はないと思われるので無視) [[attachment:calc2xml.v2.xsl]] ポイントは再帰関数を使えば変数っぽいことが実装できるということ。 多分動くと思います。 (再帰関数を使っているのでものすごくでかいファイルをコンバートするときはメモリ不足とかになるかも) パッケージ化したのが以下の通りです。 [[attachment:anaroot_filter.ver1.01.jar]] 下記のエントリーを参考にインストールください。 前のバージョンが入ってるときは何か怒られるかも知れません。 === XML by OpenOffice (入出力) === (2012 04/21 近藤) OpenOfficeのCalcはどうも隣り合うセルはまとめて一つの要素としてしまう様子。そのためにある行の列の要素数が1つ少なくカウントされている。変数を定義できるとまあすぐに対応できるのだけれど、xsltでは定数しか定義できない。今のところ挫折中。 (2012 04/20 近藤) 小林君の作ったものを参考にして作って(パクって)みました。 [[attachment:xml2calc.xsl]] [[attachment:calc2xml.xsl]] [[attachment:anaroot_filter.ver1.00.jar]] calc2xml.xslはほとんどどっかからパクったものです。ちゃんと中身をチェックしていませんが、とりあえずSAMURAIHOD.xmlとかちゃんと読み書きできました。 .` ` . '''xml の出力で、バグが見つかったので、今のところ使いものになりません(同じ行の隣り合うセルに同じ値があると、正しく出力されない)。もう少しお待ちください。 → 上記エントリーで解決''' .` ` . !OpenOffice Calc で xml を取り込むためのフィルタ ([[attachment:xml2calc.xsl|xml2calc.xsl]]) を XSLT で作成した。 xml を出力するためのフィルタ ([[attachment:calc2xml.xsl|calc2xml.xsl]]) と合わせて使うと、!OpenOffice Calc で xml の読み書きができる。!Open Office では、XSLT のフィルタのパッケージを簡単に作ることができるので、[[attachment:anaroot_filter.ver0.02.jar|anaroot_filter.ver0.02.jar]] という XSLT フィルタパッケージ (拡張子は .jar)を作った。以下、使い方を示す。 1. [[attachment:anaroot_filter.ver0.02.jar|anaroot_filter.ver0.02.jar]] を任意のディレクトリにダウンロード 1. !OpenOffice Calc を起動し、[ツール(__T__)] > [XML フィルタの設定...] を開く。 1. [パッケージを開く(__O__)] ボタンを押し、ダウンロードしてきた [[attachment:anaroot_filter.ver0.02.jar|anaroot_filter.ver0.02.jar]] を開く。 1. 「XML フィルタ ' ANAROOT XML Filter' は正常にインストールされました。」というメッセージがでる。これで準備完了。 1. 次にデータの出力を行う。まず以下のようなデータを作る。変数名は必ず1行目に書く。数字のみの変数名は使えないようだ。値が入ってないセルなどがあると、うまく動かないかもしれない。sheet 名はNEBULA。複数の sheet には対応している? ||<:#BBBBBB> ||<:#BBBBBB> A ||<:#BBBBBB> B ||<:#BBBBBB> C || ||<:#BBBBBB> 1 || ID || NAME || value || ||<:#BBBBBB> 2 || 1 || U101 || 3.1 || ||<:#BBBBBB> 3 || 2 || U102 || 4.1 || ||<:#BBBBBB> 4 || 3 || U103 || 5.1 || ||<-4> NEBULA || 1. [ファイル(__F__)] > [名前を付けて保存(__A__)] を選択。 1. ファイル名を test とし、ファイルの種類(__T__) で ANAROOT_XML xml を選択し、「選択した書式を保持(__K__)」で保存。 1. 以下のような xml ファイル (test.xml) が作成される。 .{{{ 1 U101 3.1 2 U102 4.1 3 U103 5.1 }}} 1. !OpenOffice Calc を再起動。 1. 次にデータの読み込みを行う。 1. [ファイル(__F__)] > [開く(__O__)] を選択。 1. ファイル名: test.xml, ファイルの種類(__T__) で ANAROOT_XML xml を選択し、開く。 === XML by OpenOffice === [[http://www.jagat.or.jp/sgml/ooo/BeyondXML.htm|BeyondXML]] を使った時のメモ。これをベースに、Openoffice で 直接 XML 形式をいじれるような XSLT ファイルを書くのも悪くないかもしれない。XSLT を書くに当たり、[[http://www.atmarkit.co.jp/fxml/tanpatsu/xslt/xslt00.html|サンプルで覚えるXSLTプログラミング]] がとても参考になりそう。 1. [[http://www.jagat.or.jp/sgml/ooo/BeyondXML09_en.zip|BeyondXML version 0.9(英語版)のダウンロード]] から zip ファイルをダウンロード 1. 適当な所で展開し、中身を確認 .{{{ $ 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/ }}} 1. Open Office Calc を起動し、[ファイル(__F__)] > [開(__O__)] で Sample Data フォルダ の !CalcSample09.ods を開く。 1. Open Office Calc の [ツール(__T__)] > XML フィルタの設定... を開く。 1. 新規作成(__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) 空白 }}} 1. [ファイル(__F__)] > [エクスポート(__T__)] を選択。 1. ファイルの種類(__T__) で BeyondXML-Calc-to-XML xml を選択し、保存。 1. !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(para->GetID(), npla)); }}} で、Findなんちゃらではこのmapから検索します。 {{{ std::map::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みたいなもの ===== 僕はこんなスクリプト使っています。(近藤) [[attachment:makeanadir.sh]] (2012/2/14 田中) analoginをそのままにシンプルにしてみました(誤爆対策でy/n付き) [[attachment: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かと。 <
>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ファイルをたくさん作りだすとかなりのディスク容量が必要になるかも? --