Alignment concept †ミリピードコードのブローベル先生のホームページ Chi2 global minimization の概念を示すサンプルプログラムを作ってみた。ミニマムを捜すのに2次微分行列を作って、対角化する。対角化した2次微分係数と1次微分係数の比が最小点を与える。以下のプログラムはまだ途中。でも対角化すると、パラボラ関数の2次係数がでている。 回転は試しにR(a,b,g)(作用順がabg,符合が色色)対角化は以下の場所からひろったが... http://pc-physics.com/taikakuka.html gcc -lm -o proofDiag proofDiag.c ./proofDiag LAPACKを使うときは以下の頁のものに書き変える。 http://www.k.mei.titech.ac.jp/~stamura/NumericalComputation-Tips.html LAPACKについてMakfileまでついてるsampleがあったのでdspevを動かそうとしたが、三角行列の型式で詰める詰め方が分らない。dsyevは求める固有値を与えるが、順番を変えてしまい、変換行列もその順番になる。dsyev_は正方行列をフォートランのプログラムにわたす。もとのsampleに、上のproofdiag.cの行列部分を加えた。dspevも使えるようにした。正方行列のpackedフォーマットのロードに関してはGlobalChi2のコードに代入の方法があった。ボインタのインクリメントではなぜか失敗する。 MA27と言うのも使っているようなので、テストプログラムを作ってみた。これは連立方程式をとくプログラムのように思える。ただライブラリーを作ってみた。mainプログラムとライブラリをリンクするときには-lg2cオプションが必要。入力行列は対称でないとだめ。 http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CIP/cprogram7.html この結果を、グラントとパベルに説明した。マルチミューオン解析についてはレベル1レベル2を与えてレベル3サーチを行ないたいとの意向をパベルに説明して、カルロスにメールを書くことを了解してもらった。グラントはデータベースを経ないで直接ジヲメトリーを少し変えることが出来ないかを調べると言っていた。グラントにトラックサーチの結果、残差計算はiPatrec,xKalman,GlobalChi2Fitterでちがうのかと聞いたら、1つのときは皆おなじになるが、ふたつ以上のときはオブジェクトのなまえを変えてTrk::Trackクラスを作るとのこと。残差計算はTrk::Trackクラスを使う部分で共通。 バリデーションのためにL1L2のCSC multimuonのずれファイルを12.0.6で作製した。13.0.10ではエラーがでる。pcatsij01のGlobalChi2で作業する。pcatsij03(x86_64)にバイナリをコピーして動かすとg2cがないと言うようなエラー。再コンパイルが必要な様だ。 たしかにパベルの言うように、対角化してずれを求める問題は、直接ずれをxとし2次微分をMとして、1次微分をVとするとMx=Vの問題に帰着しそうだ。それなら変に順番をかえるdspevより直接解く法がまし。 連立方程式の方が良いことが分ったので、L1L2を入れて、L3をMA27でといてみるとトラックがちゃんと引ける中心付近のパラメータが決定できていることを確認した。フォートランのMA27演習問題は対称に入力する必要が有る。それで間違っていた。DIRECT_SOLVEというdspevを使うものを走らせると、1時間以上たってもおわらない。ターミネートした。 12.0.6のSiGlobalChi2Algs-00-00ー54ではlevel1,2,3を一緒に解析するので,level3のみの解析がしにくい。そこで13.0.10で同じことをする。そのときはずれのrootファイルをpool_insertFileCatalogしておく。 multimuon sampleの解析 †まずデータをとって来る必要がある。07年3月のAlingmentハイパーニュース参照。 /castor/cern.ch/grid/atlas/caf/misal1_mc12 http://hep.nbi.dk/atlas/copyfromcastor.php?section=Projects&lang=en&version= この中のグリッドのやり方でないと、エラーになる。nsls xxxはOK。でも ssh lxplus.cern.ch "rfcat xxx" > xxx ではエラーになった。 gridのdq2_getでデータセットをpcatsij02にコピーした。でもメモリー1Gのpcatsij02では無理。72GのデータをNFSマウントでpcatsij01で解析させたい。動的なもの以外をオープンにした。portmap,nfslock,nfsを再スタートするとOKになった。 http://www.asahi-net.or.jp/~AA4T-NNGK/nfs.html Jive XMLファイルは以下のところ。13,0.10で生成した。 http://kkuatx.hep.kyokyo-u.ac.jp:~ryuichi/jiveFiles/multiMuJive.tar.gz multimuon datasetは100kイベントだがCtl-Cでとめた為、落としたのは43k。カルロスのページにある通り、Level3をダブルコーン?でやると 25kで2328個のモジュールが最適化できる。マトリックスをテキストで書き出すジョブは終了した。Iter0_monitor.rootの中をTBrowserで見てみた。確かにカルロスの報告の通り、ビームにオフセットがある。そのままクリックするとビンがわるいので、以下のようにヒストグラムに書き出してプロット。(田中純一先生マニュアル) TTree *ttree2=(TTree*)_file0->Get("GlobalChi2/General") ttree2->Draw("Trk_d0>>hTrk_d0(200,-2.5,2.5)") 分解能を見ようとしたが、エラーになる。MakeClassしてみると、 Float_t TrkRes[10000][200]; //[nTracks] SiGlobalAlignAlgでつめている。二つめはhit。コードで解析する必要がある。次は行列の計算。1イベントだけ行なうようにJOが作ってある。 13.0.10はMCはsqliteでOKなので、そのままLocalのpacmanで解析可能。 pcatsij01のHDが8月14日にdemsgをみるとread-onlyになっていた。マトリックスデータをpcatsij02にコピーした。 残差は何もしないでもピクセルが良くなっている。確かにpixelのLevel1はVtxCandidateから作られる数字にかなりあう。ピクセルLevel2,3が30ミクロンなのであまりシリアスなアライン無でOKになるようだ。というわけなので、今の各結果について、残差をみなおしてみることにする。 Level 1のアラインメントを行うにはbeamの情報がつかえる †07年7月末のアラインメント電話会議(木曜)のバレンシアの報告で、LEVEL1のアラインメントにvertexの情報を使って、アラインメントパラメータを決定できた報告がある。この報告でいけることが確定したので、あとはLEVEL2のみ。ほぼいけそうになって来たらしい。 SimulationでAlignment rootファイルの収束観測 †課題:ミスアラインメントを強調するviewer(グローバルのところにリンクがある)の利用、またはヒストグラムツールの作成。 viewerにpt100GeVでミスアラインメントの効果を見たファイルを読み込んだが、エラーが出るので、原因を調べたい。ー>viewerのroot fileをみたら、α、β、γ(x,y,z回転、以下abg)と移動、ピクセル、SCT、レイヤーの区別のフラグのある順序依存のずれ記述のファイルだった。pool.rootはクラス定義からしてあるもの。全然違うものだった。 InDetAlignDBToolにずれの生成ツールがある。LXRのIdentifier searchで調べたところ、InDetAlignGenAlgs/example/IDAlignWrite.pyに使っているところがある。InDetExample/InDetAlignExample/shareにも使っている例がある。 その例を動かしてみた。 ToolSvc.InDetAlignDBTool INFO Geometry initialisation sees 1744 pixel and 8176 SCT modules giving 34 alignment keysESC[m ToolSvc.InDetAlignDBTool INFO Keys/channels are: /Indet/Align/ID [0] /Indet/Align/PIX [100] /Indet/Align/PIXEC1 [200] /Indet/Align/PIXEC2 [201] /Indet/Align/PIXEC3 [202] /Indet/Align/PIXB1 [203] /Indet/Align/PIXB2 [204] /Indet/Align/PIXB3 [205] /Indet/Align/PIXEA1 [206] /Indet/Align/PIXEA2 [207] /Indet/Align/PIXEA3 [208] /Indet/Align/SCT [101] /Indet/Align/SCTEC1 [209] /Indet/Align/SCTEC2 [210] /Indet/Align/SCTEC3 [211] /Indet/Align/SCTEC4 [212] /Indet/Align/SCTEC5 [213] /Indet/Align/SCTEC6 [214] /Indet/Align/SCTEC7 [215] /Indet/Align/SCTEC8 [216] /Indet/Align/SCTEC9 [217] /Indet/Align/SCTB1 [218] /Indet/Align/SCTB2 [219] /Indet/Align/SCTB3 [220] /Indet/Align/SCTB4 [221] /Indet/Align/SCTEA1 [222] /Indet/Align/SCTEA2 [223] /Indet/Align/SCTEA3 [224] /Indet/Align/SCTEA4 [225] /Indet/Align/SCTEA5 [226] /Indet/Align/SCTEA6 [227] /Indet/Align/SCTEA7 [228] /Indet/Align/SCTEA8 [229] /Indet/Align/SCTEA9 [230] たくさんオブジェクトを作っているようだが、その値はどうやって調べるのか? dispCSCで作ったAlignableTransformをprintDBでlogに書き出したところは、オイラー角で書いているので、abgだと小さい角度が、回して戻すようになって、大きな角度が表示されている。実際には対角メイン。checkコードで確認した。 当面はLevel3のみをチェックするほうが簡単。level2,level3は64ビットでやるほうがよいかも。DBToolでntupleを作っているのでこれはHepAlignableTransformからパラメータをfloatにoffsetとオイラー角にして落としている。abgが0,0,gammaなら、euler角でgamma,0,0になるはず。 というわけで、ntupleを比較すればよい。クラスを使わずfloatとlongだけなので簡単。12.0.6のpython fileのInDetAlignNt.pyは古い書き方のように見えるがコメントをはずせばTHistSvcのntupleを作る。複数のntupleファイルを作れる例にもなっている。 Alignment fileを使ってチェック †InDetAlign_Cosmic_LocalChi2_1 のroot fileは12.0.6/DBReleaseに入っているようだ。sqlite3 COMP130.dbでアライメントフォルダーのID番号を確認した。kit 12.0.6でチェックを行う。testarea/I2.0.6/InnerDetector/../InDetCosmicRecExampleで行う。 個別モジュールでのチェック †統計をあげて、モジュールごとの計測方向のずれのチェック。ビンを失敗してeta=+6が表示されてない。run 3098, 50k event. 外側のウエファーが赤。内側が黒。上書きしたので統計数値は外側。 eta 方向の平均値をプロファイルを使って調べる †http://www.slac.stanford.edu/comp/unix/package/cernroot/30207/TProfile.html SCT_ID.hでパラメータを取得する。プロファイルの引数はname,titleなのでTHistSvcに登録するときは、nameを同じにする。 コードは簡単で以下のもの。run 3007 10k event. 40 minutes. http://kkuatx.hep.kyokyo-u.ac.jp/~ryuichi/InDetSoftwareTutorial.tar SR1コスミック解析 †SR1コスミックデータはLEVEL2シフト解析に向いているかもしれない。レイヤーごとにシステマテックなずれがある。このアラインメント無しの解析はtestarea/12.0.3で行った。12.0.3にはalignmentファイルが無いのであらわに指定しない限り、そのまま。 HepTransform3D †http://natsci.kyokyo-u.ac.jp/~takasima/doxy/CLHEP1800/html/classHepTransform3D.html という風なので、回転してから移動する変換。 Misalignment 演習 †ひさしぶりにアラインメントの演習を12.0.6で行った。SimulationでATLAS-CSC-00-01-00を指定すると/InDet/AlignのInDetAlign_CSC_02が選択される。Digitizationでも同じDetDescrVersionを指定する。InDetRecExample/jobOptions.pyではATLAS-CSC-00-00-00を指定する。しかしこれでは実行直前にDigitからInDetAlign_CSC_02を読み込んで、つじつまがあってしまう。そこでjobOptions.pyに include ( "InDetAlignExample/InDetAlignableOverride.py") を前のほうに入れる。(磁場のスクリプトの前に入れた。)そうするとInDetAlignable.pyがブロックされ、Misalignmentファイルが読まれなくなった。IOVSvcが機能していることを確認した。 pt100GeVを1000イベント作って、ふたつの結果を比較した。single muon 1000eventなのになんでこんなにエントリーがあるのか?JiveXMLを作成してイベントを見てみたが、Pixelはノイズが多い。SCTはSCTRDOは空。トラックはほぼ直線。 Basic Alignment Wiki page †https://twiki.cern.ch/twiki/bin/view/Atlas/InDetAlignment https://twiki.cern.ch/twiki/bin/view/Atlas/GlobalChi2Approach 12.0.0でグローバルChi2を動かそうとしたがSCT_ModuleConditionsToolがないとなる。->doMonitoring=True でこれはOK。 Not found DLL InDet::InDetCTBTracking。->above change introduces doTrackSegments=True that means TRT should run -> doTrackSegments part changed #ref(): File not found: "globalChi.pdf" at page "GeometryAlignment" アラインメントの状況を強調して表示するツールviewerがある。 この実行はrootで.x align_view.cxx とする。 Alignment Workshop@CERN †http://physics.syr.edu/%7Elhcb/public/alignment/LHCAlignmentWorkshop/ HepAlignableTransform †InDetDetDscr/InDetReadoutGeometryを通じて変更する。Identifier Searchで引っかかるパッケージをチェックする。 データベースを使ってずれを入れた例はInDetRecExampleの11.0.3の所に残っている。11.2.0のcosmicでもやったはずだが、例が残っていない。Book keepingが不十分だった。 New Tracking EDM の Residual plot 作成 †以下の文書は Trk::Trackクラスの解説。 https://uimon.cern.ch/twiki/bin/view/Atlas/TrkTrack さて、displacement fileの作り方はわかったので、次にこれからresidualをプロットする必要が有る。やり方としては、nominal position のESDファイルを読んで、displacementファイルで測定器の場所をセットしたときの読みのずれをプロットするのをためしてみたい。良くわからないがChi2AlignAlgs.cxxを使ってみた。エラーが出たのでみてみると、作ったdisplacement fileに中身がなかった。 GeoAlignableTransformとはVolumeに付加されるデータで、以下のデータ要素を保持しているもの。最後のvectorで最初のワールド座標へ戻る道筋が示される。 mutable unsigned short int _count;//RCBase.h HepTransform3D _transform; //GeoTransform.h HepTransform3D *_delta;//GeoAlignableTransform.h std::vector<GeoGraphNode *> _parentList;//GeoAlignableTransform.h GeoAlignableTransformのメソッドにvoid setDelta(const HepTransform3D & Delta)がある。Identifier search で探すとInnerDetector/InDetDetDescr/InDetReadoutGeometry/src/SiDetectorManager.cxxなどで呼ばれる。setAlignableTransformLocalDeltaやsetAlignableTransformGlobalDeltaがよんでいる。これが使われるのはどこでしょう? Identifier searchで探したが見付からなかった?ということはまだ出来てない? こうなったらアルゴリズムを作って動かす方がよさそう。ESD解析ということで10.0.2のエド・モイスのtutorialあたりでやってみよう。10.5.0はInDetRecExampleのスクリプトがだいぶ変わっている。 コンパイルエラーが出るのでなおしましょう。 #ref(): File not found: "InDetSoftwareTutorial.h.Hit" at page "GeometryAlignment" #ref(): File not found: "InDetSoftwareTutorial.cxx.Hit" at page "GeometryAlignment" #ref(): File not found: "requirementsHit" at page "GeometryAlignment" 元のプログラムのようにHitLoop()をつくって、いくつかの変更の後動いた。結果をlxatlにrsyncし関係者が見れるようにした。printout があるので残差はすぐ出ると思ってたら、コードの上でのTrackPaparametersが純粋仮想クラスであるのに気がつかづまごまごしている。実体化するときにはAtaPlaneクラスになる。なるほどこれがポリモーフィッククラスといわれるわけですね。 RIO_OnTrackつまりヒットデータについての残差分布をとってみた。40muのところに山があるのは何故か良くわからない。lxatlのInDetExample/10.0.4/InnerDetector/InDetExampleをrsyncした。 #ref(): File not found: "stripResidual.eps" at page "GeometryAlignment" RIO_OnTrackのdumpではclusterとなっているのでhitはクラスターであるにもかかわらず最初のストリップの場所とのによる残差をとったことによるミス。クラスターサイズをとって計算しなおす必要がある。SCT_ClusterOnTrack.hはInnerDetector/InDetRecEvent/InDetRIO_OnTrackにある。結局このデータではストリップの数にアクセスできなかった。ストリップの数が入っているデータを作る必要がある。 考えてみるとInDetRIO_OnTrackクラスはSCT_Clusterクラスをポインターで指しているが、これがrootに書かれたときにどうなるかが良くわからない。結局、reconstructionの時点が解析に最善のときのような気がしてきた。 Tracking/TrkEventTrkEventCnv/CnvToolsがどうもポインターのリカバーをするものらしい。これを動かせば、リカバーが出来るかも。と思ったがソースがないところを見ると出来てないみみたい。ESD解析ツールはまだ出来てないと言うことか。もういちど測定器をずらすのに挑戦しよう。 ESDの段階でずれを入れてもResidualの計算をローカル座標でやっている限り、ずれの効果は見えない。結局reconstructionの時にずらしておかないと、ずれの効果を直接見れない。 10.5.0でInDetRecExampleのjobOptions.pyを変更して、ずれを入れてresidualの図が出るようにした。コードはlxatl:~ryuichi/InDetAlignAlgs/10.5.0にrsyncで入れた。 #ref(): File not found: "residual80umBl2.eps" at page "GeometryAlignment" #ref(): File not found: "residualNoDisp.eps" at page "GeometryAlignment" #ref(): File not found: "AlignmentExercise.ppt" at page "GeometryAlignment" #ref(): File not found: "AlignmentExercise2.ppt" at page "GeometryAlignment" Chi2AlignAlg を動かす †以前動かしていた時使ったInDetRec_xKalman.pool.rootだとログファイルがどんどん増えるのでキャンセル。 scp lxplus.cern.ch:/afs/cern.ch/atlas/maxidisk/d173/ESD/InDetESD_Zee1of4.root ./ として今使っているらしいファイルを持ってきて、jobOption ファイルを変えるともっともらしいことをやっているようにも見える。でも途中に出てくる90度回したみたいなメッセージはなんのことなのか?いちおう動いたが見方がよくわからない。misalignment file:NominalAlignment.rootの作り方を見るためにInDetAlignAlgs-00-00-40をチェックアウトした。どう作ったかの情報がないので、自分で作った方がよさそう。この説明Wikiが最近できた。パッケージの説明も添付する。levelと言う変数が意味不明。DispModeも不明。 https://uimon.cern.ch/twiki/bin/view/Atlas/InDetAlignHowTo #ref(): File not found: "InDetAlignWrt.txt" at page "GeometryAlignment" このほかにInDetAlignAlgsのREADMEによさそうなコメントが有ったのでためしてみた。システマティックにrphi方向に80μmだけB5を移動してみた。InDetRecExampleを使う。InDetAlignAlgs/example/alignjobOptions.pyを実行してみている。 InDetAlignWrt INFO InDetAlignWrt::initialize() called ToolSvc ERROR Factory for Tool InDetAlignDBTool not found InDetAlignWrt FATAL InDetAlignDBTool not found AthenaEventLoopMgr ERROR Unable to initialize Algorithm: InDetAlignWrt AthenaEventLoopMgr ERROR Failed to initialize base class MinimalEventLoopMgr ServiceManager ERROR Unable to initialize Service: AthenaEventLoopMgr ApplicationMgr FATAL Invalid initial state Appl icationMgr INFO Application Manager Terminated successfully writeDBS.pyを見ると少し違っているので修正したらいちおう正常終了した。このファイルを使ってChi2Alignを動かすとわかりやすいのではないか? #ref(): File not found: "alignjobOptions.py" at page "GeometryAlignment" #ref(): File not found: "takaWritePool.py" at page "GeometryAlignment" 上のファイルのwriteはTrueでないとだめ。プログラムの中身を読まないとフラグ設定は出来ない。streamも変更しないとダメ。10.5.0で中身のあるrootファイルが出来たので、ESD解析も10.5.0に移行する。 ずれのrootファイルデータ作成はToolSvc.InDetAlignDBToolのINFOをみてチェックできる。今のところずれのファイルがまともでない。 ずれが思ったように入ったrootファイルが出来た。layer3の一個ずつのずれ80μmにするのはDispMode を3にする。出来たファイルはTBrowerでチェックできた。 alignment displacement file †TFile *file = TFile::Open("NominalAlignment.root") file->ls() POOLContainer_AlignableTransform->Scan() 多分defaultのWriteの結果。DispRphi=0.08、DispR=0.1、DispZ=0.1 alingnment 再開 kit 使用 †mkdir SiRobustAlign cd SiRobustAlign; cp ../scratch/105setup.sh ./ . setup.sh; mkdir 10.5.0; cd 10.5.0/ cp ../../scratch/10.5.0/requirements ./ cmt config . setup.sh cmt co -r SiRobustAlign-00-00-23 InnerDetector/InDetAlignment/SiRobustAlign cd InnerDetector/InDetAlignment/SiRobustAlign/*/cmt cmt config; . setup.sh; gmake CVSのところのREADMEファイル #ref(): File not found: "SiRobustAlignREADME" at page "GeometryAlignment" Tracking Howto †まずEDMを理解する。 https://uimon.cern.ch/twiki/bin/view/Atlas/TrackingEDM この文書で通常のヘリックスパラメータをペリジーPerigee(Closest approach)と呼んでいる。このパラメータはz軸にヘリックスが最も近付く点を基準に角度パラメータを決める。&mimetex(\(locX, LocY, \phi, \theta, q/p\));の角度定義の意味が良く分らないが、多分測定器基準系に対するその地点での角度だと思われる。(?)トラックパラメータについての文献で私が使っているのは古いCDFノート1790。 そのつぎはMCTruth https://uimon.cern.ch/twiki/bin/view/Atlas/MCTruthSuggestions TrkPrepRawData contains the "prepared raw data" (also known as RIOs - Reconstruction Input Objects) for the Tracking EDM. MCTruthで良く使うのはバーテックスと発生粒子だけ。となるとレッスン2のInDetPriVxCBNTなるコードでバッーテックスのtruthを見ているところを使うことになる。あとは粒子のtruthの取り方を探すことにする。 Generators/GeneratorObjects/GeneratorObjects/ Generators/GenAnalysisTools/TruthExamples ZmumuにHistSampleを入れてみたが、500イベントで66しかZなし。HepMCを調べることにする。Simulation/HepMCというのもある。 http://mdobbs.home.cern.ch/mdobbs/HepMC/ あとRecExCommon関係もみとかないとけない。 https://uimon.cern.ch/twiki/bin/view/Atlas/ReconstructionDocumentation code reading †RobustAlingmentのChi2AlignAlg.cxxを読むと、const DataVector<Trk::Track>* trks;がヒットの情報を持っているので、これを回してtrackパラメータを調べるのはUK勉強会の例題と同じ。内側のセンサーの座標を基準にしているのは、勘違いではないか?内側センサーの中心のストリップを基準に残差を計算してるようだ。内側を基準座標にするのではなく、アキシャルストリップを持つウエファーとするべきだと思う。レイヤーごとに内側、外側が交互にアキシャルストリップになってる。これはバレルもフォワードも。 http://kkuatx.hep.kyokyo-u.ac.jp/~ryuichi/doxygen/SiRobustAlign/10.1.0/html/index.html https://uimon.cern.ch/twiki/bin/view/Atlas/TrackingPackageDocumentation 05 May ソフトウエアワークショップ †https://uimon.cern.ch/twiki/bin/view/Atlas/UkInnerDetectorSoftwareTutorial #ref(): File not found: "InDetSoftwareTutorial.cxx" at page "GeometryAlignment" アラインメントでは自前のデータが必要。そこでIan HinchliffのOpening Pleanayでも10.0.1を使えば全部できるとあるので、10.0.2やってみたら、ESDまでできた。AtlasG4Sim, Digitization, InDetRecExampleに順にできたPool.rootファイルを渡してESDを作る。ほぼOut of Boxでできる。simulationはminbiasでlxplusでは30イベントが限度。物理イベントはバッチでないとだめ。 アラインメントではRoland HaertelがESDからアラインメントをするパッケージを作っている。それは新しいTrk::Trackクラスを使っているので、今後の参考になる。UKで最近将来のDeveloperの卵向けにtutorialをEd Moyseがやったようだ。InnerDetectorのページにWikiのリンクがある。それの2までをLXRで例を探してやってみた。これもESDを使っているようである。プライマリバーテックスを求めて、インパクトパラメータをだしている。添付したのは2.3までの例。 2.4 はそのまま4行コピーすれば動く。でもerrorMatrixの部分はどこからとってくるのか不明。 課題3のピクセルのID helperを取ってくるところで、コンパイルエラーになる。またまたLXRでサーチしたら、 AtlasTest/DetDescrTest/IdDictTest/src/IdDictTest.cxx というのがあった。これを参考にすればできそう。他にサマリー何とかというのも見ろとなっている。ヘルパーのポインタをクラスのメンバにしたのは失敗。 3.3のb-layerをはずして再フィットするのはコンパイルできた。コンテナクラスvectorとDatavectorの関係を調べよう。多分継承してるんでしょう。 IdHelperのポインターをクラスのメンバーにしてしまったので、前方参照する必要が有る。前方参照は独習C++のp99に説明有り。 #ref(): File not found: "ReFitTrack.cxx" at page "GeometryAlignment" #ref(): File not found: "ReFitTrack.h" at page "GeometryAlignment" 自分の計算機で解析 †CVSでは新しいのは10.1.0でSiRobustAlignをするように書いてある。pacmanでathenaをいれた。AtlasG4Simのminbiasは20イベントできた。lxplusではEvtMaxをどう選んでも2004イベントでこける。よくわからないのでdata fileをcastorからコピーしている。中村君のページにやり方が書いてある。とりあえず [atx13] /home/ryuichi/data/SiRobust > ssh lxplus.cern.ch "rfcat /castor/cern.ch/user/h/haertel/ESD/InDetESD_Zee_4963events.root" > InDetESD_Zee_4963events.root;date とした。 結局READMEファイルにも或るとおり、2GB以上メモリーがないと動かないようだ。4963イベントを越えても動き続けて、1.2Gを越えた。1.5Gしかメモリーがないので止めた。 どうも1.5倍のイベント数を解析するようなので3000イベントにすると1.2Gぐらいで終わってくれた。plotChi2AlignHistos.cxxを使うと図がたくさん出てくるが、意味がよくわからない。 このほかAtlasG4SimのjobOptions_Geo2G4_Pythia.pyをやって20イベントmin-biasイベントを作ってみた。その後、Digitizationをcoして、DC2となってたのでseg fault. Rome-Initialにしてやりなおし。Digitはできた。 alignment program †To look at the alignment codes CVS areas, follow the following links: Robust Alignment: Global Chi2 Alignment: For the Global Chi2 Alignment, I just freshly added the stuff (the old prototype code is also there in src/proto for archiving). Most of the technical functionalities are tested. But there is still testing needed on the check of numbers, etc... In particular, the output has not been tested yet, and there is still developement going on for the format of the output, the interaction with the Databases in the future, etc... So you can run the program on events, produce bigvector/bigmatrix and/or do the solving but as I said the output has not been tested on a reasonable sample. Only detailed intermediate steps debugging has been performed for the ingredients. I'll prepare some notes about problems I have observed and for which we should be aware. Cheers, Adlene. Cosmic run Wiki Page †https://uimon.cern.ch/twiki/bin/view/Atlas/InDetCommissioning Engineering Drawing の見つけ方 †まずhpglのviewerをインストールします。 #ref(): File not found: "hpglview-530_Win95_NT_CERN.zip" at page "GeometryAlignment" それからEDMSのNavigatorページに飛んで、図面を探します。Atlas Detector->Inner Detector->Semi Conductor Tracker->PBS-Barrel SCT->SCT-Barrels->Barrel 3 のなかに"ATLAS SCT BARREL - MOD ARRANG.B3+BARREL ENDS(TA11?)"というアッセンブリーの図面がありますが、この図面はCDDをクリックし、Visualize Drawingの項目のpre-visualizeをクリックすると見ることができます。 https://edms.cern.ch/cedar/plsql/cedarw.home?cookie=3287703&project=ATLAS Oxford大学でのバレルのアッセンブリーの写真 †http://natsci.kyokyo-u.ac.jp/~takasima/picture/zpOxford/index.html アッセンブリーの本家オックスフォード大学のページ http://www-pnp.physics.ox.ac.uk/~viehhaus Calibration and Alignment page †http://atlas.web.cern.ch/Atlas/GROUPS/DATABASE/project/calib/ GeoModelではGeoAlignableTransformというのでGeometryの変換行列を作ってやると、あとでそこにDeltaというずれの行列を足せるようだ。ずれを変換行列どの順番のところで入れるのかはよくわからない。HepTransform3DはOpenGLと同様の回転のあと平行移動する4行4列の変換行列。このDeltaを作成するのはInnerDetector/InDetAlignment/InDetAlignAlgsで基本的にIOVSvcのパッケージを使う。MySQLで読めるはずだが、まだ高嶋は成功してない。PoolのデータとしてDeltaを書くのもあるようだがよくわからない。 Simulation on lxatl †SUSYの勉強もしないといけないので、東大のlxatlでEvent Generationをしてみた。まずは そのまま動かす。電子3イベント。でも最近はトップのページが元のmacroで動くものに戻っている。このG4AtlasAppsはgeant4をpythonで動かすもので将来のもの。 http://atlas.web.cern.ch/Atlas/GROUPS/SOFTWARE/OO/simulation/geant4/G4AtlasApps/doc/index.html mkdir -p SimExample/10.0.1 . cmt.sh copy requirements cd SimExample/10.0.1; cmt config; . setup.sh -tag=opt source xxx/AtlasRelease-10-00-01/cmt/setup.sh mkdir run cd run; get_files PDGTABLE.MeV; get_files G4AtlasApps/jobOptions.G4Atlas_Sim.py athena.py jobOptions.G4Atlas_Sim.py >& JO1.log & tail -f JO1.log このあと、muonにして100イベント作った。これはヒット。Digitizeの時は、DC2とするかRome-Initialとするか選ばないと当然失敗する。 InDetRecExampleの使いかた †Wikiをたどると、これをやれとなっている。以下の操作でrootファイルができる。 login on lxplus mkdir -p InDetRecExample/10.0.1 source /afs/cern.ch/sw/contrib/CMT/v1r16p20040901/mgr/setup.sh cd InDetRecExample/10.0.1 copy requirement file and set version 10.0.1 cmt config . setup.sh -tag=opt cmt co -r InDetRecExample-00-27-01 InnerDetector/InDetExample/InDetRecExample cd InnerDetector/InDetExample/InDetRecExample/*/cmt cmt config gmake . setup.sh . ../share/POOL_Setup.sh cd ../run get_files -symlink -data PDGTABLE.MeV athena.py jopOptions.py rootファイルはできたけど、dictionaryがないというエラーがでて読めない。結局ダメでないですか。 misalignment simulation †mkdir InDetAlignAlgs cd InDetAlignAlgs source /afs/cern.ch/sw/contrib/CMT/v1r16p20040901/mgr/setup.sh mkdir 9.3.0 cd 9.3.0 cp typical requirement to create work area cmt config . setup.sh cmt co -r iPatRecExample-00-19-04 Reconstruction/iPat/iPatRecExample cmt co -r InDetAlignAlgs-00-00-23 InnerDetector/InDetAlignment/InDetAlignAlgs cd Reconstruction/iPat/iPatRecExample/*/cmt cmt config gmake . setup.sh cd ../run cp ../share/* ./ . ../share/iPatSetup.sh 以下は試しに対話的にするとき athena.py -i jobOptions.py athena> theApp.initialize() athena> theApp.nextEvent() ... athena> theApp.exit() イベントを走らせてヒストグラムを作るときは cp jobOptions.py myJobOptions.py Histogram のところを探してコメントを外した後 theApp.initialize() for ievent in range(100): theApp.nextEvent() theApp.exit() をたす。 athena.py myJobOptions.py >& myJobOptions.log & tail -f myJobOptions.log ls *.root root アラインメントの ntupleをつくるには myJobOptions.pyのtheApp.initialize()のまえに include( "InDetAlignAlgs/WriteSiNtuple.py" ) をいれる。 このままだとHbookのものができるので、あとでIDから バレルのレイヤーをとってきたりする細かいことがやりにくいので InDetAlignAlgs/shareのWriteSiNtuple.pyのところをRootに変えておく。 今度は500イベントとした。 athena.py myJobOptions.py できたidalign.rootを手近なところにコピー。 root TFile *file = TFile::Open("idalign.root") file.ls() file.cd("IDAL") file.ls() 100->MakeClass("IDAL") 別のやりかた TFile *file = TFile::Open("idalign.root") TTree *ttree=(TTree*)file->Get("IDAL/100") ttree->Print() ttree->MakeClass("IDAL") とすると、IDAL.h と IDAL.C ができるので詳細な解析が可能となる。 以下のファイルを使ってとりあえずデータを見る。 #ref(): File not found: "idalign.root" at page "GeometryAlignment" root .L IDAL.C IDAL t t.GetEntry(12) //12 イベント目を見る。 t.Show() TFile *file = TFile::Open("idalign.root") TTree *ttreeID=(TTree*)file->Get("IDAL/110") //indexよりmoduleの情報を得る。 ttreeID->GetEntry(1) //index 1のモジュールをさす。 ttreeID->Show() //表示する。 というわけで、どういう風にプログラムを書くかわかったのであとは書くだけ このntupleの残差はスペースポイントのものでないようだ。これだと意味が良く分らないので、やっぱりwikiを辿っていくと書いてあるInDetRecExampleをためしてみようと思う。 いちおう軸方向から見たイベントを表示するプログラムをMakeClassから作ったものを少し変えて、作った。.q idalint.Cとして、やめるときはCtl-C。intはinteractiveのつもり。TChainというのは、rootファイルが何個もある時に、連続解析するもの、ここではいらないがひとのを真似たので残っている。 #ref(): File not found: "IDAL.h" at page "GeometryAlignment" #ref(): File not found: "IDALint.C" at page "GeometryAlignment" #ref(): File not found: "idalint.C" at page "GeometryAlignment" Oracle data base †http://atlas-php.web.cern.ch/atlas-php/DDDB/node_tag_browser.php CLHEP 1.8.0.0 のdoxygen file †http://natsci.kyokyo-u.ac.jp/~takasima/doxy/CLHEP1800/html/index.html RobustAlign のdoxygen file †Robust Alignmentは注目するモジュールの位置のみをパラメータとしてカイ2乗の最小化を行うもの。これをすべてのモジュールについて個別に行い、その繰り返しを行ってアライメントする。このプログラムはアテナを使うものではない。このほかに全モジュールの位置と飛跡のパラメータをすべてパラメータとし、一度にカイ2乗の最小化を行ってアラインメントを行う方法も検討されている。 http://natsci.kyokyo-u.ac.jp/~takasima/doxy/SiRobustAlign/html/index.html ダニエル ヒンソンのページ |