ATLASソフトウエア講習会2016



0 はじめに

高エネルギーの分野ではROOT(ルート)というソフトウェアが広く用いられています。
ATLASのソフトウェアはAthena(アセナ)と呼ばれ、主にC++とPythonで書かれていて、ROOTに大きく依存しています。
ROOTで生成されるファイルは拡張子が.rootです。
Athenaで生成されるファイルはROOTのファイルですが、独自のPOOL(プール)というもので、*.pool.rootというファイル名にすることになっています。
Athenaを使って実データやモンテカルロシミュレーションを処理して、物理結果をROOTを使って得ます。

CERNで2016年10月に行われたATLAS Offline software tutorialのスライドはここに見つかります。
今回の講習でカバーしていないところが多くあるので、参考にして下さい。

1 ATLASのソフトウェア環境の設定

1.1 setupATLASコマンドの用意

setupATLASコマンドは、Athenaに限らず、ATLASで必要なソフトウェアの設定の準備を行うコマンドです。
https://twiki.atlas-canada.ca/bin/view/AtlasCanada/ATLASLocalRootBase2
このsetupATLASコマンドを使えるようにしましょう。
login.icepp.jpにログインします。 bashを使っている場合、ホームディレクトリの.bashrcというファイルにこのコマンドが使えるように、次の2行を加えます。

export ATLAS_LOCAL_ROOT_BASE=/cvmfs/atlas.cern.ch/repo/ATLASLocalRootBase
alias setupATLAS='source ${ATLAS_LOCAL_ROOT_BASE}/user/atlasLocalSetup.sh'

1.2 setupATLASコマンドの使い方

では一度ログアウトして再度ログインしてください。
これでsetupATLASコマンドが使えるようになりました。

$ which setupATLAS
alias setupATLAS='source ${ATLAS_LOCAL_ROOT_BASE}/user/atlasLocalSetup.sh'

setupATLASコマンドを実行してみましょう。

$ setupATLAS
lsetup               lsetup <tool1> [ <tool2> ...] (see lsetup -h):
 lsetup agis          (or localSetupAGIS) to use AGIS
 lsetup asetup        (or asetup) to use an Athena release
 lsetup atlantis      (or localSetupAtlantis) to use Atlantis
 lsetup dq2           (or localSetupDQ2Client) to use DQ2Client
 lsetup eiclient      (or localSetupEIClient) to use EIClient
 lsetup emi           (or localSetupEmi) to use  emi
 lsetup fax           (or localSetupFAX) to use FAX
 lsetup ganga         (or localSetupGanga) to use Ganga
 lsetup lcgenv        to use lcgenv
 lsetup panda         (or localSetupPandaClient) to use Panda Client
 lsetup pod           (or localSetupPoD) to use Proof-on-Demand
 lsetup pyami         (or localSetupPyAMI) to use pyAMI
 lsetup rcsetup       (or rcSetup) to setup an ASG release
 lsetup root          (or localSetupROOT) to use ROOT
 lsetup rucio         (or localSetupRucioClients) to use rucio-clients
 lsetup sft           (or localSetupSFT) to use SFT packages
 lsetup xrootd        (or localSetupXRootD) to use XRootD
advancedTools        for advanced tools
diagnostics          for diagnostic tools
helpMe               more help
printMenu            show this menu
showVersions         show versions of installed software

14 Jul 2016
  DQ2 clients are deprecated and no longer supported.
   They will be removed completely by December 2016.
   Please use Rucio instead:
       lsetup rucio
   For more info: https://twiki.cern.ch/twiki/bin/view/AtlasComputing/RucioClientsHowTo

と表示されるはずです。

2 AtlasReleaseのインストール場所

2.1 AtlasReleaseの構成

ATLASのソフトウエアはプロジェクトと呼ばれるグループに分けられ管理されるようになっています。それぞれのプロジェクトの間に依存性があります。次の図はAtlasReleaseを構成するプロジェクトとその依存関係を示しています。

583.png

それぞれのプロジェクトは独自にバージョン管理されます。例えばAtlasOfflineの 20.7.8はAtlasSimulationの20.7.8やAtlasAnalysisの20.7.8に依存しています。
AtlasRelease全体を使いたいときは最上部にあるAtlasOfflineプロジェクトを対象とすれば、依存関係によりすべてが含まれることになります。
ユーザはどのプロジェクトを使用するかを意識する必要があります。

AtlasProductionはAtlasOfflineの上にあり、リリース後に施された修正などを反映するために用意されています。プロダクション・キャッシュと呼ばれています。4つめのリリース番号を使い、20.7.8.9という風に名付けられます。

2.2 主なディレクトリ

AtlasReleaseはCVMFS(CernVM File System)というファイルシステム、もしくはpacmanというサービスを使って配布されます。
あるディレクトリの下にすべてのパッケージが配置されます。
その配布の根幹となるディレクトリを$SITEROOTという環境変数で示します。

$SITEROOTの下にどんなディレクトリやファイルがあるか見てみましょう。

$ export SITEROOT=/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8
$ ls $SITEROOT
AtlasAnalysis    AtlasProduction      CMT        cmtsite       prophecy4f
AtlasConditions  AtlasReconstruction  DetCommon  dqm-common    setup.csh
AtlasCore        AtlasSettings        GAUDI      external      setup.sh
AtlasDerivation  AtlasSetup           LCGCMT     geant4        sw
AtlasEvent       AtlasSimulation      MCProd     madgraph      tdaq-common
AtlasLogin       AtlasSite            alpgen     o..pacman..o  trusted.caches
AtlasOffline     AtlasTrigger         atlas      powhegbox     vbfnlo

上に示したプロジェクトの他、外部パッケージ、geant4などが置かれていることがわかります。

Atlasで始まるディレクトリの多くはプロジェクトと呼ばれるリリースの構成要素を表しています。それぞれのプロジェクトでバージョン管理がされています。 AtlasProductionの下に20.7.8.9等というディレクトリがあります。それがバージョンです。

2.3 CMT

AtlasReleaseはリリース20までCMTというツールを使って構築されて来ました。
リリース21からはCMakeというツールが使われています。

CMTはrequirementsというファイルさえ書けば、それがパッケージの依存関係を調べ、必要なMakefileを用意し、実行に必要なライブラリをLD_LIBRARY_PATHにセットし、などなど、すべてに反映することになります。

3 Athenaの環境設定

3.1 asetupコマンドの使い方

setupATLASコマンドを実行すれば、asetupコマンド(もしくはlsetup asetupコマンド、どちらでも良い)が使えるようなります。 asetupコマンドがAtlasSetupパッケージを呼び出し、Athenaの設定を行います。
TestAreaとして、ある特定のディレクトリを指定すれば、自分のコードを使うことができます。
まず、ディレクトリを作り、そこに移動します。

mkdir ~/tutorial2016
cd ~/tutorial2016

そして、

asetup AtlasProduction 20.7.8.9 here

を実行すると、Athena環境が整います。
AtlasProduction 20.7.8.9を使い、カレントディレクトリの~/tutorial2016をTestAreaとするということです。

この代わりに、

lsetup 'asetup AtlasProduction 20.7.8.9 --testarea=~/tutorial2016'

としても良いです。lsetupコマンドを通して設定する場合にはこのようにカンマで括る必要があります。

試しに主要な環境変数を表示させてみましょう。

$ echo $SITEROOT
/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8
$ echo $TestArea
/gpfs/home/oda/tutorial2016
$ which athena
alias athena='athena.py'
        /cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/AtlasCore/20.7.8/InstallArea/share/bin/athena.py
$ echo $CMTSITE
STANDALONE
$ echo $CMTCONFIG
x86_64-slc6-gcc49-opt
$ echo $CMTPATH
/gpfs/home/oda/tutorial2016:
/cvmfs/atlas.cern.ch/repo/tools/slc6/cmt:
/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/AtlasProduction/20.7.8.9:
/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/AtlasOffline/20.7.8:
/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/AtlasAnalysis/20.7.8:
/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/AtlasSimulation/20.7.8:
/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/AtlasTrigger/20.7.8:
/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/AtlasReconstruction/20.7.8:
/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/AtlasEvent/20.7.8:
/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/dqm-common/dqm-common-00-55-00:
/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/AtlasConditions/20.7.8:
/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/AtlasCore/20.7.8:
/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/DetCommon/20.7.8:
/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/tdaq-common/tdaq-common-01-46-00:
/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/GAUDI/v26r2p3-lcg81f:
/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/LCGCMT/LCGCMT_81f

CMTPATH環境変数はパッケージを探すディレクトリのリストですが、hereというオプションで指定したカレントディレクトリ(TestArea環境変数)が先頭にあります。
上記の依存関係の順番に現れています。

3.2 asetupコマンドのオプション

asetupコマンドでは様々なオプションを与えることが出来ます。 詳しくはAtlasSetupReferenceをご覧ください。

  • --help もしくは -h
    • ヘルプメッセージを表示します。セットアップはしません。
  • list
    • これはセットアップするのでなく、利用可能なリリースをリストします。
  • 64
    • 64ビットコンフィギュレーションを使用します。CMTCONFIG環境変数がx86_64-slc6-gcc49-optなどになります。
  • 32
    • 32ビットコンフィギュレーションを使用します。CMTCONFIG環境変数がi686-slc6-gcc48-optなどになります。
  • dbg
    • デバッグモードのコンフィギュレーションを使います。CMTCONFIG環境変数がx86_64-slc6-gcc49-dbgなどになります。
  • gcc49
    • GNU Compiler Collection 4.9のコンパイラーを使うという意味です。リリースによって使えるコンパイラーは異なります。
  • --testarea
    • $TestAreaの場所を指定します。このオプションを使わないと$TestAreaは設定されず、サイトにインストールされたリリースのみ見に行きます。($CMTPATHの最初のエントリーに注意)
      hereでカレントディレクトリを$TestAreaに指定できます。
  • single
    • 単一テスト。テストの場所をバージョンなどで区別しません。反対はmulti
  • multi
    • マルチテスト。テストエリアの下にいくつかのリリースについてのテスト場所を用意します。
      --testareaで指定したディレクトリの下の20.7.8.9などのバージョンのディレクトリが$TestAreaになります。(~/tutorial2016/20.7.8.9など)
      さらに--projtestをつければAtlasProduction-20.7.8.9などになります。

3.3 asetupコマンドのカスタマイズ

asetupコマンドに毎回同じオプションを与えるのは面倒だと思ったら、設定ファイルを使うことが出来ます。自分のホームディレクトリに.asetupというファイルを置き、その中に普段使いたい設定を書きます。

[defaults]
testarea = ~/tutorial2016
multi = False
projtest = False
64bit = True
compiler = gcc49

その上で、

asetup AtlasProduction 20.7.8.9

とすれば、$CMTCONFIGはx86_64-slc6-gcc49-opt、$TestAreaは~/tutorial2016になります。

4 FroNTierの設定

デフォルトの設定で、検出器の状態の情報を保持するConditions Databaseを読むときにFroNTierを使うようにはなっていますが、

$ echo $FRONTIER_SERVER 
(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://frontier-atlas.lcg.triumf.ca:3128/ATLAS_frontier)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)

というように海外のサイトを見に行くようになっていて、シミュレーションでも非常に時間が掛ります。 login.icepp.jpを使う時はicepp.jpのプロキシを追加します。

$ export FRONTIER_SERVER="(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://frontier-atlas.lcg.triumf.ca:3128/ATLAS_frontier)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://conddb-px02.icepp.jp:3128)"
$ echo $FRONTIER_SERVER
 (serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://frontier-atlas.lcg.triumf.ca:3128/ATLAS_frontier)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://conddb-px02.icepp.jp:3128)

Conditions Databaseを使うジョブでは、掛る時間を半分以下にすることができます。

5 Athenaの動作確認

5.1 Athenaの実行

実際に動くかどうか確認しましょう。

$ cd $TestArea
$ mkdir run 
$ cd run 
$ get_files -jo HelloWorldOptions.py
Willing to acquire file HelloWorldOptions.py from
/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/AtlasCore/20.7.8/InstallArea/jobOptions/AthExHelloWorld/HelloWorldOptions.py
copy HelloWorldOptions.py

HelloWorldを走らせてみましょう。

$ athena.py HelloWorldOptions.py
Tue Nov 22 05:29:39 JST 2016
Preloading tcmalloc_minimal.so
Py:Athena            INFO including file "AthenaCommon/Preparation.py"
Py:Athena            INFO using release [AtlasProduction-20.7.8.9] [x86_64-slc6-gcc49-opt] [20.7.8.Y-VAL-Prod/rel_6] -- built on [2016-11-11 21:33]
Py:Athena            INFO including file "AthenaCommon/Bootstrap.py"
Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
Warning in <TInterpreter::ReadRootmapFile>: class  CP::IPileupReweightingTool found in PileupReweightingDictDict.so  is already in PileupReweightingDict.so
Warning in <TInterpreter::ReadRootmapFile>: class  CP::PileupReweightingTool found in PileupReweightingDictDict.so  is already in PileupReweightingDict.so
Warning in <TInterpreter::ReadRootmapFile>: class  SG::GenericElementLinkBase<SG::IdentContIndexingPolicy<Muon::MuonPrepDataContainer<Muon::MuonPrepDataCollection<Muon::MdtPrepData> > > > found in MuonRIO_OnTrackDict.so  is already in iMuGirlStauDict.so
Warning in <TInterpreter::ReadRootmapFile>: class  pair<unsigned int,double> found in CaloEventDict.so  is already in libPileupReweightingLib.so
Warning in <TInterpreter::ReadRootmapFile>: class  pair<unsigned int,unsigned int> found in AtlasSTLAddReflexDict.so  is already in libPileupReweightingLib.so
Warning in <TInterpreter::ReadRootmapFile>: class  pair<int,float> found in libCore.so  is already in AtlasSTLAddReflexDict.so
Warning in <TInterpreter::ReadRootmapFile>: class  pair<string,double> found in libCore.so  is already in AtlasSTLAddReflexDict.so
Py:Athena            INFO executing ROOT6Setup
Py:Athena            INFO including file "AthenaCommon/Execution.py"
Py:Athena            INFO including file "HelloWorldOptions.py"
Py:Athena            INFO including file "AthenaCommon/runbatch.py"
Py:ConfigurableDb    INFO Read module info for 5112 configurables from 10 genConfDb files
Py:ConfigurableDb    INFO No duplicates have been found: that's good !
ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level=0
ApplicationMgr    SUCCESS
====================================================================================================================================
                                                   Welcome to ApplicationMgr (GaudiCoreSvc v3r4)
                                          running on login06.icepp.jp on Tue Nov 22 05:29:47 2016
====================================================================================================================================
... (途中省略) ...
HelloWorld           INFO initialize()
HelloWorld           INFO   MyInt =    42
HelloWorld           INFO   MyBool =   1
HelloWorld           INFO   MyDouble = 3.14159
HelloWorld           INFO   MyStringVec[0] = Welcome
HelloWorld           INFO   MyStringVec[1] = to
HelloWorld           INFO   MyStringVec[2] = Athena
HelloWorld           INFO   MyStringVec[3] = Framework
HelloWorld           INFO   MyStringVec[4] = Tutorial
HelloWorld           INFO   MyStringVec[5] = !
... (途中省略) ...
AthenaEventLoopMgr   INFO   ===>>>  start processing event #0, run #0 0 events processed so far  <<<===
HelloWorld           INFO execute()
HelloWorld           INFO An INFO message
HelloWorld        WARNING A WARNING message
HelloWorld          ERROR An ERROR message
HelloWorld          FATAL A FATAL error message
HelloWorld           INFO Let the tool MyPublicHelloTool say something:
ToolSvc.PublicH...   INFO my message to the world: A Public Message!
HelloWorld           INFO Let the tool MyPrivateHelloTool say something:
HelloWorld.Hell...   INFO my message to the world: A Private Message!
AthenaEventLoopMgr   INFO   ===>>>  done processing event #0, run #0 1 events processed so far  <<<===
... (途中省略) ...
EventSelector        INFO finalize
AthDictLoaderSvc     INFO in finalize...
ToolSvc              INFO Removing all tools created by ToolSvc
*****Chrono*****     INFO ****************************************************************************************************
*****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
*****Chrono*****     INFO ****************************************************************************************************
ChronoStatSvc        INFO Time User   : Tot=  138 [ms]                                             #=  1
*****Chrono*****     INFO ****************************************************************************************************
ChronoStatSvc.f...   INFO  Service finalized successfully
ApplicationMgr       INFO Application Manager Finalized successfully
ApplicationMgr       INFO Application Manager Terminated successfully
Py:Athena            INFO leaving with code 0: "successful run"

leaving with code 0: "successful run"で終わっていれば成功です。
画面に出すだけでなくファイルにも残したいときはパイプとteeコマンドを使いましょう。

$ athena.py HelloWorldOptions.py 2>&1 | tee hello.out

ここで、2>&1は標準エラー出力(2)を標準出力(1)にリダイレクトする、つまり標準エラー出力を標準出力にも出力することを意味しています。
標準出力は画面に表示されるだけではなく、hello.outファイルにも書き込まれます。

5.2 パッケージの取得

先ほどCMTPATH環境変数を見てみました。CMTPATH環境変数はCMTがパッケージを探すときのサーチパス(優先順)です。
この先頭に/gpfs/home/oda/tutorial2016(環境変数TestAreaに相当)というエントリーが含まれていることを確認してください。
つまり同じパッケージが/gpfs/home/oda/tutorial2016と/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/AtlasProduction/20.7.8.9にある場合、前者が使われることになります。

最初にユーザのディレクトリを探し、そこになかったら次以降のディレクトリからパッケージを探すということになります。
そのため、自分で変更したいパッケージはこの下に持ってきて変更すれば良いということになります。

この場所に移動します。

$ cd $TestArea

パッケージを持ってくるためにcmt checkout (cmt coと省略可能)というコマンドを使います。このコマンドはさらにSubversion (SVN)というツールを陰で使っています。
パッケージはCERNのSVNサーバから取ってくることになるため、CERNの計算機のアカウントが必要です。

また、login.icepp.jpのアカウント名とCERNのアカウント名が違う場合、環境変数を設定し直す必要があります。
もしCERNでのアカウント名がwxyzなら、

$ export SVNROOT="svn+ssh://wxyz@svn.cern.ch/reps/atlasoff"

で、設定し直す必要があります。

チェックアウト(cmt co)するには持ってきたいパッケージの現在使われているバージョンを知る必要があります。cmt show versionsで調べます。

$ cmt show versions Control/AthenaExamples/AthExHelloWorld
Control/AthenaExamples/AthExHelloWorld AthExHelloWorld-01-02-06 /cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.8/AtlasCore/20.7.8

この情報を使ってパッケージをチェックアウトしましょう。

5.2.1 CERNのアカウントを持っている人

まず、

$ kinit username@CERN.CH

で、Kerberos認証して下さい。usernameの部分はodaなど自分のCERNのアカウント名に変更して下さい。
そして、バージョンAthExHelloWorld-01-02-06をチェックアウトして下さい。

$ cd $TestArea
$ cmt co -r AthExHelloWorld-01-02-06 Control/AthenaExamples/AthExHelloWorld
#CMT---> Info: Working on Control/AthenaExamples/AthExHelloWorld (AthExHelloWorld-01-02-06)
A    Control/AthenaExamples/AthExHelloWorld/test
A    Control/AthenaExamples/AthExHelloWorld/test/AthExHelloWorld_TestConfiguration.xml
A    Control/AthenaExamples/AthExHelloWorld/python
A    Control/AthenaExamples/AthExHelloWorld/share
A    Control/AthenaExamples/AthExHelloWorld/share/HelloWorld_ATN.py
A    Control/AthenaExamples/AthExHelloWorld/share/HelloWorldOptions.py
A    Control/AthenaExamples/AthExHelloWorld/cmt
A    Control/AthenaExamples/AthExHelloWorld/cmt/requirements
A    Control/AthenaExamples/AthExHelloWorld/AthExHelloWorld
A    Control/AthenaExamples/AthExHelloWorld/AthExHelloWorld/IHelloTool.h
A    Control/AthenaExamples/AthExHelloWorld/ChangeLog
A    Control/AthenaExamples/AthExHelloWorld/src
A    Control/AthenaExamples/AthExHelloWorld/src/HelloTool.cxx
A    Control/AthenaExamples/AthExHelloWorld/src/components
A    Control/AthenaExamples/AthExHelloWorld/src/components/AthExHelloWorld_entries.cxx
A    Control/AthenaExamples/AthExHelloWorld/src/components/AthExHelloWorld_load.cxx
A    Control/AthenaExamples/AthExHelloWorld/src/HelloTool.h
A    Control/AthenaExamples/AthExHelloWorld/src/HelloAlg.cxx
A    Control/AthenaExamples/AthExHelloWorld/src/HelloAlg.h
A    Control/AthenaExamples/AthExHelloWorld/CMakeLists.txt
Checked out revision 791091.
#CMT---> Info: Control/AthenaExamples/AthExHelloWorld done.

これでAthExHelloWorldパッケージを持ってくることができました。

5.2.2 CERNのアカウントを持っていない人

$ cd $TestArea
$ tar zxvf /home/oda/tutorial2014files/AthExHelloWorld-01-02-06.tar.gz

をして下さい。

5.3.パッケージのビルド

持ってきたパッケージを見てみましょう。

$ cd Control/AthenaExamples/AthExHelloWorld/
$ ls
AthExHelloWorld  CMakeLists.txt  ChangeLog  cmt  python  share  src  test

CMTはパッケージごとにサブディレクトリの構成を仮定しています。

  • AthExHelloWorld: パッケージ名と同じ名前のサブディレクトリにはヘッダーファイルが入ります。
  • ChangeLog: 変更点が書いてあります。
  • CMakeLists.txt: CMake用の設定を書いたファイル。今回は関係ありません。
  • cmt: パッケージビルドの手順を指示するrequirementsファイルが置かれます。この場所でgmakeすることでパッケージがコンパイルされます。
  • share: ジョブオプションファイルなどアーキテクチャによらないファイルを置きます。
  • python: それ以外のpythonソースが置かれます。
  • src: C++のソースファイルが置かれます。

それではビルドしてみましょう。cmtディレクトリに移動します。

$ cd cmt

ここで3段階のコマンドを実行します。cmt config、source setup.shとgmakeです。requirementsファイルを書き換えたときはこの三つを繰り返します。ソースファイルやヘッダーファイルを修正したときは最後のgmakeだけ実行すれば十分です。

$ cmt config
Creating setup scripts.
Creating cleanup scripts.
$ source setup.sh
$ gmake
#CMT---> (Makefile.header) Rebuilding ../x86_64-slc6-gcc49-opt/x86_64-slc6-gcc49-opt.make
#CMT---> (constituents.make) Rebuilding library links
#CMT---> (constituents.make) Building checkreq.make
#CMT---> (constituents.make) Building AthExHelloWorld_validateXML.make
#CMT---> (constituents.make) Building AthExHelloWorld.make
#CMT---> (constituents.make) Building check_install_python_modules.make
#CMT---> (constituents.make) Building check_install_joboptions.make
#CMT---> (constituents.make) Building check_install_runtime.make
#CMT---> (constituents.make) Building install_root_include_path.make
#CMT---> (constituents.make) Building install_includes.make
#CMT---> Info: Document AthExHelloWorld_validateXML
#CMT---> Info: Document check_install_python_modules
#CMT---> Info: Document checkreq
#CMT---> Info: Document install_includes
#CMT---> Info: Document check_install_joboptions
#CMT---> Info: Document check_install_runtime
#CMT---> Info: Document install_root_include_path
#CMT---> Info: Library AthExHelloWorld
#CMT---> (constituents.make) Starting AthExHelloWorld_validateXML
... (途中省略) ... 
#CMT---> (constituents.make) AthExHelloWorldMergeComponentsList done
#CMT---> all ok.

最後が#CMT---> all ok.で終わっていれば、ビルドは成功です。

$ ls ..
AthExHelloWorld  CMakeLists.txt  ChangeLog  cmt  genConf  python  share  src  test  x86_64-slc6-gcc49-opt
$ ls $TestArea
Control  InstallArea  run

増えたサブディレクトリがビルドによって作られたものです。

  • x86_64-slc6-gcc49-opt: CMTCONFIGの値と同じ名前のディレクトリにはオブジェクトファイルなどアーキテクチャ依存ファイルが置かれます。
  • genConf: ジョブオプションファイル(Python)からこのパッケージを使用するためのPythonファイルが置かれます。

5.4 パッケージの変更

srcサブディレクトリに行って.hファイルや.cxxファイルを修正し、その都度cmtサブディレクトリに戻ってgmakeします。実行はrunサブディレクトリを作ってそこで行ってください。ジョブオプションファイルはshareサブディレクトリのものを使います。

$ cd ../src
$ emacs -nw HelloAlg.cxx

適当にソースファイルを修正します。わかりやすいようにメッセージ出力をいじります。
例えば、src/HelloAlg.cxxの122行目に

ATH_MSG_INFO ("HelloAlg was modified by me.");

を加えます。変更点はsvn diffコマンドで表示できます。

$ svn diff
Index: src/HelloAlg.cxx
===================================================================
--- src/HelloAlg.cxx    (revision 785601)
+++ src/HelloAlg.cxx    (working copy)
@@ -119,6 +119,7 @@
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

 StatusCode HelloAlg::execute() {
+  ATH_MSG_INFO ("HelloAlg was modified by me.");

   // Part 1: print where you are
   ATH_MSG_INFO ("execute()");

cmtディレクトリでgmakeした後、

$ cd ../cmt
$ gmake

runディレクトリを作り、そこで、

$ cd ..
$ mkdir run
$ cd run
$ ln -s ../share/HelloWorldOptions.py .
$ athena.py HelloWorldOptions.py 2>&1 | tee hello.out

を実行して、

AthenaEventLoopMgr   INFO   ===>>>  start processing event #0, run #0 0 events processed so far  <<<===
HelloWorld           INFO HelloAlg was modified by me.
HelloWorld           INFO execute()

と、加えたメッセージが出ていることを確認して下さい。
もし出力されていなければ、コンパイルと実行をし直してみて下さい。

$ cd ../cmt
$ cmt config
$ source setup.sh
$ gmake
$ cd ../run
$ athena.py HelloWorldOptions.py 2>&1 | tee hello.out

それでも上手く行かない場合でも、

$ cd ../cmt
$ rm -r ../genConf
$ rm -r ../x86_64-slc6-gcc49-opt
$ gmake clean
$ cmt config
$ source setup.sh
$ gmake
$ cd ../run
$ athena.py HelloWorldOptions.py 2>&1 | tee hello.out

で上手く行くこともあります。

5.5 複数のパッケージをコンパイルする必要がある時

複数のパッケージがある時、どういう順番でコンパイルすれば良いかすぐにはわからない時があります。そういう時には

$ cd $TestArea
$ cmt find_packages
$ cmt compile

とするとCMTが勝手に$TestArea以下にあるパッケージを正しい順番でコンパイルしてくれます。


添付ファイル: file583.png 91件 [詳細] file204.png 39件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-12-27 (火) 01:25:43 (1058d)