|
|
(119 intermediate revisions by one other user not shown) |
Line 1: |
Line 1: |
| + | ==Pre-Tutorial== |
| | | |
− | ==Set up CMT==
| + | *This pre-Tutorial is copy of the one given by Ketevi A. Assamagan, adapted to work in 12.0.2 |
| | | |
− | * Login to lxplus at CERN and create a working directory called "Tutorial". We will use the release 12.0.2 this tutorial: | + | *here is a link to other Tutorials by Ketevi, and other usful PAT links: |
| + | [https://twiki.cern.ch/twiki/bin/view/Atlas/PhysicsAnalysisTools, PAT] |
| + | |
| + | *Please follow the following pre-Tutorial before the date of the Workshop. It is a very straight forward, tutorial and will help to set up the athena enviroment for the workshop, so we can focus our time in more interested things |
| + | |
| + | [http://www.nikhef.nl/pub/experiments/atlaswiki/index.php/NIKHEF_PAT_workshop_Oct2006_pre-Tutorial Pre-Tutorial link] |
| + | |
| + | During the workshop we'll browse over the code that we've used in the pre-Tutorial to try and uderstand it. Later we'll focused on the TAG and AAN selection. |
| + | |
| + | ==Event Selection== |
| + | First we're going to generate a new AAN that we'll use later for selection. |
| <pre> | | <pre> |
− | ssh lxplus.cern.ch
| + | cd ~scratch0/Workshop/ |
− | cd scratch0 | + | source setup.sh -tag=12.0.2,opt |
− | mkdir Tutorial | + | cd 12.0.2/PhysicsAnalysis/AnalysisCommon/UserAnalysis |
− | cd Tutorial | + | cp ~ordonez/public/Workshop_files/src/AnalysisSkeleton.cxx src/. |
− | mkdir 12.0.2
| + | cp ~ordonez/public/Workshop_files/UserAnalysis/AnalysisSkeleton.h UserAnalysis/. |
| + | cd cmt |
| + | gmake |
| + | cd .. |
| + | mkdir run2 |
| + | cd run2 |
| + | cp ~ordonez/public/Workshop_files/run2/AnalysisSkeleton_jobOptions.py . |
| + | cp ~ordonez/public/Workshop_files/data2/PoolFileCatalog.xml . |
| + | cp ~ordonez/public/Workshop_files/data2/mc11.004202.ZmumuJimmy.recon.AOD.v11000401.py . |
| + | athena AnalysisSkeleton_jobOptions.py | tee athenaOut_AnalysisSkeleton.log |
| </pre> | | </pre> |
| | | |
− | * Create a file called "requirements" and setup CMT. My requirements file looks like this where my working area for 12.0.2 is ${HOME}/scratch0/Workshop/12.0.2:
| + | This will generate the file AnalysisSkeleton.aan.root. |
| + | |
| + | ==Event Selection using TAG== |
| + | *First we generate our own TAG. |
| + | |
| + | *Still in the new run2 directory: |
| + | |
| <pre> | | <pre> |
− | set CMTSITE CERN
| + | cp ~ordonez/public/Workshop_files/run2/Main_topOptions.py . |
− | set SITEROOT /afs/cern.ch
| |
− | macro ATLAS_DIST_AREA ${SITEROOT}/atlas/software/dist
| |
− |
| |
− | macro ATLAS_GROUP_AREA "/afs/cern.ch/atlas/groups/PAT/Tutorial"
| |
− |
| |
− | macro ATLAS_TEST_AREA "" \
| |
− | 12.0.2 "${HOME}/scratch0/Workshop/12.0.2"
| |
− |
| |
− |
| |
− | apply_tag oneTest
| |
− |
| |
− | use AtlasLogin AtlasLogin-* $(ATLAS_DIST_AREA)
| |
| </pre> | | </pre> |
| | | |
− | *Then do the following: | + | *Edit Main_topOptions.py and uncomment the line |
| <pre> | | <pre> |
− | source /afs/cern.ch/sw/contrib/CMT/v1r18p20060301/mgr/setup.sh
| + | ### Create TAG file |
− | cmt config
| + | doWriteTAG=True |
| + | </pre> |
| + | |
| + | <pre> |
| + | athena Main_topOptions.py | tee athenaOut.log |
| </pre> | | </pre> |
| | | |
− | ==Setup for the release 12.0.2==
| + | *This will generate the file called ZmumuOnAOD_TAG.root |
− | *Do the following: | + | |
| + | *Now we are ready to run our algorithms with a TAG selection on the fly. Edit Main_topOptions.py again comment out: |
| <pre> | | <pre> |
− | source setup.sh -tag=12.0.2
| + | #doWriteTAG=True |
| </pre> | | </pre> |
| | | |
− | *Check that the CMT path is correct by doing this | + | *and uncomment |
| <pre> | | <pre> |
− | echo $CMTPATH
| + | doRunAODwithSelection=True |
| + | |
| + | and |
| + | |
| + | useTag=True |
| </pre> | | </pre> |
| | | |
− | *Stuff like this should be printed to your screen: | + | *Copy: |
| <pre> | | <pre> |
− | /afs/cern.ch/user/o/ordonez/scratch0/Workshop/12.0.2:
| + | cp ~ordonez/public/Workshop_files/run2/ZmumuOnAOD_new_jobOptions.py . |
− | /afs/cern.ch/atlas/software/builds/AtlasOffline/12.0.2
| |
| </pre> | | </pre> |
| + | *And run again. Note that only will run the events that satisfy the query: |
| + | EventSelector.Query = "NLooseMuon>0 && NLooseMuon<3 && abs(LooseMuonEta1)<2.5 && abs(LooseMuonEta2)<2.5 && LooseMuonPt1>10000 && LooseMuonPt2>10000" |
| + | |
| | | |
− | *You see that the path to your working directory, the path to the release directory and the external are set correctly - do not proceed unless this is done correctly.
| |
− | ==Run Time Setup==
| |
− | *Go to your working area and check out the follow package:
| |
| <pre> | | <pre> |
− | cd 12.0.2
| + | athena Main_topOptions.py | tee athenaOut.log |
− | cmt co -r UserAnalysis-00-08-05 PhysicsAnalysis/AnalysisCommon/UserAnalysis
| |
| </pre> | | </pre> |
| | | |
− | *Now compile everything as follows: | + | *As an output you have ZmumuOnAOD_withTAGSelection.aan.root. You can have a look at it in root to make sure that the query has been satisfied |
| + | |
| + | *Now we'll rewrite our own AOD containeing only the events selected. We'll do it for only 50 events to gain some time |
| + | |
| + | *Edit again Main_topOptions.py and change: |
| + | |
| <pre> | | <pre> |
− | cd PhysicsAnalysis/AnalysisCommon/UserAnalysis/cmt
| + | TheApp.EvtMax = 500 |
− | cmt config
| + | |
− | source setup.sh
| + | to |
− | cmt broadcast gmake
| + | |
− | cd ../run
| + | TheApp.EvtMax = 50 |
| </pre> | | </pre> |
| | | |
− | *To test that everything has been done correctly, do: | + | *Comment out |
| <pre> | | <pre> |
− | get_files HelloWorldOptions.py
| + | #doRunAODwithSelection=True |
− | athena.py -b HelloWorldOptions.py
| |
| </pre> | | </pre> |
| | | |
− | *Stuff like this should be printed to the screen: | + | *uncomment: |
| <pre> | | <pre> |
− | HelloWorld INFO execute()
| + | doRewriteAOD=True |
− | HelloWorld INFO An INFO message
| |
− | HelloWorld WARNING A WARNING message
| |
− | HelloWorld ERROR An ERROR message
| |
− | HelloWorld FATAL A FATAL error message
| |
− | AthenaEventLoopMgr INFO ===>>> end of event 9 <<<===
| |
− | HistorySvc INFO Service finalised successfully
| |
− | ChronoStatSvc.f... INFO Service finalized succesfully
| |
− | ToolSvc INFO Removing all tools created by ToolSvc
| |
− | ApplicationMgr INFO Application Manager Finalized successfully
| |
− | ApplicationMgr INFO Application Manager Terminated successfully
| |
| </pre> | | </pre> |
| | | |
− | ==The Next Time You Login==
| + | and run once more |
− | *The next time you login, just do the following:
| + | |
| <pre> | | <pre> |
− | cd ${HOME}/scratch0/Workshop
| + | athena Main_topOptions.py | tee athenaOut.log |
− | source setup.sh -tag=12.0.2
| |
− | cd 12.0.2/PhysicsAnalysis/AnalysisCommon/UserAnalysis/cmt
| |
− | source setup.sh
| |
− | cd ../run
| |
| </pre> | | </pre> |
| | | |
− | ==Get The Necessary Files== | + | You'll see a new Zmumu_new_AOD_withTAGSelection.root file has been created |
− | *We will use inclusive Z to mumu events (sample 4202), digitized in 11.0.41 but the ESD and AOD produced in the release 12.0.1. Copy the PoolFileCatalog.xml for the AOD, ESD and Raw Data (RDO) into your UserAnalysis "run" directory: | + | |
| + | ==Event Selection using AAN== |
| + | *Follow as in the previous section but useANN=True instead of useTAG=True. In the end you should have the following two files: |
| + | ZmumuOnAOD_withAANSelection.aan.root |
| + | Zmumu_new_AOD_withAANSelection.root |
| + | |
| + | ==Interactive Analysis in ATHENA== |
| + | *In this exercise, we will see how to do interactive analysis in ATHENA, how to browse the Raw Data in the AOD. Proceed as follows: |
| <pre> | | <pre> |
− | cp ~ordonez/scratch0/Workshop/12.0.2/data/PoolFileCatalog.xml .
| + | get_files Interactive_topO.py |
− | cp ~ordonez/scratch0/Workshop/12.0.2/data/*.py .
| |
| </pre> | | </pre> |
| | | |
− | ==Run the AnalysisSkeleton for 500 Events==
| + | *Edit Interactive_topO.py and replace this line |
− | *get the necessary job options file from the release: | |
| <pre> | | <pre> |
− | get_files AnalysisSkeleton_jobOptions.py
| + | EventSelector.InputCollections = [ "AOD.pool.root" ] |
| </pre> | | </pre> |
− | | + | *with this line: |
− | *Edit AnalysisSkeleton_jobOptions.py and specify the input data to be the AOD files that you just copied in the previous step: to do this, replace these lines | |
| <pre> | | <pre> |
− | EventSelector.InputCollections = [
| + | include ( "mc11.004202.ZmumuJimmy.recon.AOD.v11000401.py" ) |
− | "AOD.pool.root"
| + | </pre> |
− | ]
| |
| | | |
− | </pre>
| + | *run |
− | *with this line | |
| <pre> | | <pre> |
− | include( "mc11.004201.ZeeJimmy.recon.AOD.v11000401.py" )
| + | athena -i Interactive_topO.py |
| </pre> | | </pre> |
− | *Check that in AnalysisSkeleton_jobOptions.py, the number of events to run is set to 500: | + | *Initialize application manager |
| <pre> | | <pre> |
− | # Number of Events to process
| + | athena>theApp.initialize() |
− | theApp.EvtMax = 500 | |
| </pre> | | </pre> |
− | *Now run the AnalysisSkeleton_jobOptions.py. It should produce a file called AnalysisSkeleton.aan.root which contains some ROOT histograms and an AthenaAwareNTuple: | + | *Run 1 event |
| <pre> | | <pre> |
− | athena.py AnalysisSkeleton_jobOptions.py | tee athenaout.log | + | athena>theApp.nextEvent() |
| </pre> | | </pre> |
− | *You've just produced the AthenaAwareNTuple in a standalone way, directly on the AOD, or the ESD or even on the RDO. For Further details on how to produce the AthenaAwareNTuple in this way, follow this link: AthenaAwareNTuple.
| |
| | | |
− | *Now, you may look at the the AnalysisSkeleton.h, the AnalysisSkeleton.cxx and AnalysisSkeleton_jobOptions.py to see how the ROOT histograms and the AthenaAwareNTuple of the output file AnalysisSkeleton.aan.root are defined, filled and saved: Follow this link to the AnalysisSkeleton. For further details on how to produces ROOT histograms and Tuples in ATHENA, look at the THistSvc. | + | *Retrieve Muons from AOD |
− | | |
− | *You should open the output file AnalysisSkeleton.aan.root in ROOT and browse the histograms and the AthenaAwareNTuple:
| |
| <pre> | | <pre> |
− | root AnalysisSkeleton.aan.root
| + | athena>mcon = PyParticleTools.getMuons("MuidMuonCollection") |
− | new TBrowser
| |
| </pre> | | </pre> |
− | *You will notice that beside the user-defined NTuple, the AthenaAwareNTuple tools add references to the AOD, ESD and Raw Data, in addition the RunNumber and the EventNumber.
| |
| | | |
− | ==More Information==
| + | *Other methods are defined in [http://tmaeno.home.cern.ch/tmaeno/PyParticleTools/index.html PyParticleTools] |
− | *For further details on the analysis tools, look at the PhysicsAnalysisTools. Details on the content of the ESD, the AOD and the TAG are on StoregateKeysForESD, StoregateKeysForAOD and TagForEventSelection. | |
| | | |
− | ==Z to mumu on AOD==
| + | *Get the first muon |
− | *In this exercise, we will do Z to mumu reconstruction on AOD: we will use the association objects Analysis::Muon and its associated TrackParticle. Proceed as follows: copy the code from my area, compiling and running it, then we go through it: | |
| <pre> | | <pre> |
− | cd ../src
| + | athena>m = mcon[0] |
− | cp ~ordonez/scratch0/Workshop/12.0.2/PhysicsAnalysis/AnalysisCommon/UserAnalysis/src/ZmumuOnAOD.cxx .
| |
− | cd ../UserAnalysis
| |
− | cp ~ordonez/scratch0/Workshop/12.0.2/PhysicsAnalysis/AnalysisCommon/UserAnalysis/UserAnalysis/ZmumuOnAOD.h .
| |
− | cd ../run
| |
− | cp ~ordonez/scratch0/Workshop/12.0.2/PhysicsAnalysis/AnalysisCommon/UserAnalysis/run/ZmumuOnAOD_jobOptions.py .
| |
| </pre> | | </pre> |
| | | |
− | *Now, you want to go the src/components directory and declare this new algorithm ZmumuOnAOD. | + | *Get a list of methods |
| <pre> | | <pre> |
− | cd ../src/components
| + | athena>dir(m) |
| </pre> | | </pre> |
| | | |
− | *Edit UserAnalysis_entries.cxx and add these lines - follow the example that is already in there for the AnalysisSkeleton: | + | *See pT |
| <pre> | | <pre> |
− | #include "UserAnalysis/ZmumuOnAOD.h"
| + | athena>m.pt() |
− | | |
− | DECLARE_ALGORITHM_FACTORY( ZmumuOnAOD )
| |
− | | |
− | DECLARE_ALGORITHM( ZmumuOnAOD )
| |
| </pre> | | </pre> |
| | | |
− | *Save UserAnalysis_entries.cxx and go back the cmt directory and compile: | + | *Get TrackParticle via ElementLink |
| <pre> | | <pre> |
− | cd ../../cmt
| + | athena>tp = m.track() |
− | cp ~ordonez/scratch0/Workshop/12.0.2/PhysicsAnalysis/AnalysisCommon/UserAnalysis/cmt/requirements .
| + | athena>dir(tp) |
− | cmt config
| + | athena>tp.pt() |
− | cmt broadcast gmake
| |
− | cd ../run
| |
| </pre> | | </pre> |
− | *Now you may run the ZmumuOnAOD algorithm as follows: | + | |
| + | *Retrieve the MC Truth |
| <pre> | | <pre> |
− | athena.py ZmumuOnAOD_jobOptions.py | + | athena>mcc = PyTruthTools.getMcEvents("TruthEvent") |
| + | athena>mc = mcc[0] |
| + | athena>mc.alphaQCD() |
| </pre> | | </pre> |
| | | |
− | *This should produce an AthenaAwareNTuple file, ZmumuOnAOD.aan.root. While Athena is running, let's go through the code by following this link: ZmumuOnAOD for the details of the algorithm and the selection cuts. | + | *Dump Data Store |
− | | |
− | *Now, open this file in ROOT and browse the AthenaAwareNTuple:
| |
| <pre> | | <pre> |
− | root -l
| + | athena>dumpSG() |
− | TFile *f = TFile::Open("ZmumuOnAOD.aan.root")
| |
− | new TBrowser
| |
− | TTree * zmumuOnAOD=(TTree*) gDirectory->Get("CollectionTree");
| |
− | zmumuOnAOD->SetMarkerStyle(20)
| |
− | zmumuOnAOD->SetMarkerSize(0.5)
| |
− | zmumuOnAOD->SetMarkerColor(2)
| |
− | zmumuOnAOD->SetLineColor(4)
| |
− | zmumuOnAOD->SetLineWidth(2)
| |
− | zmumuOnAOD->Draw("ZmmMass")
| |
| </pre> | | </pre> |
− | *By default, we used the Muonboy/STACO/MuTag association objects in the AOD and the associated TrackParticles. But you may change it in the job options ZmumuOnAOD_jobOptions.py: the StoreGate keys for the various objects in the AOD are listed here: StoregateKeysForAOD.
| |
| | | |
− | *Exercise: add a piece code to access the number of hits in the various stations of the Inner Detector and the Muon Spectrometer. Recompile, and run. Then in ROOT look at the NTuple in ROOT and check that the distributions look OK. | + | *Run next event |
− | | |
− | | |
− | ==Z to ee on AOD==
| |
− | *In this exercise, we will do Z to ee reconstruction on AOD: we will use the association objects Electron/Photon and its associated Electron TrackParticle. Proceed as follows: copy the code from my area, compiling and running it, then we go through it:
| |
| <pre> | | <pre> |
− | cd ../src
| + | athena>theApp.nextEvent() |
− | cp ~ordonez/scratch0/Workshop/12.0.2/PhysicsAnalysis/AnalysisCommon/UserAnalysis/src/ZeeOnAOD.cxx .
| |
− | cd ../UserAnalysis
| |
− | cp ~ordonez/scratch0/Workshop/12.0.2/PhysicsAnalysis/AnalysisCommon/UserAnalysis/UserAnalysis/ZeeOnAOD.h .
| |
− | cd ../run
| |
− | cp ~ordonez/scratch0/Workshop/12.0.2/PhysicsAnalysis/AnalysisCommon/UserAnalysis/run/ZeeOnAOD_jobOptions.py .
| |
| </pre> | | </pre> |
| | | |
− | *Now, you want to go the src/components directory and declare this new algorithm ZeeOnAOD.
| + | Rewind event counter |
| <pre> | | <pre> |
− | cd ../src/components
| + | athena>theApp.seek(0) |
| </pre> | | </pre> |
| | | |
− | *Edit UserAnalysis_entries.cxx and add these lines - follow the example that is already in there for the AnalysisSkeleton: | + | *See pT distribution of muons |
| <pre> | | <pre> |
− | #include "UserAnalysis/ZeeOnAOD.h" | + | athena> plot("MuonContainer#MuidMuonCollection","$x.pt()",nEvent=5) |
| + | </pre> |
| | | |
− | DECLARE_ALGORITHM_FACTORY( ZeeOnAOD )
| |
| | | |
− | DECLARE_ALGORITHM( ZeeOnAOD )
| |
− | </pre>
| |
| | | |
− | *Save UserAnalysis_entries.cxx and go back the cmt directory and compile: | + | ==Analysis with the EventView== |
− | <pre>
| + | *Due to the time I won't cover this section during the Workshop. But now you should have the basic knowledge requiered to understand it. You can learn about the [https://twiki.cern.ch/twiki/bin/view/Atlas/EventView Event View] here |
− | cd ../../cmt
| |
− | cmt config
| |
− | cmt broadcast gmake
| |
− | cd ../run
| |
− | </pre>
| |
| | | |
− | *Now you may run the ZeeOnAOD algorithm as follows: | + | == Analysis on the GRID == |
− | <pre>
| + | * In the following examples we'll run on Zmumu datasets. |
− | athena.py -b ZeeOnAOD_jobOptions.py
| + | *This will be a brief introduction to GRID tools for those of you who already went through the trouble of getting a GRID certificate. |
− | </pre>
| |
| | | |
− | *This should produce an AthenaAwareNTuple file, ZeeOnAOD.aan.root. While Athena is running, let's go through the code by following this link: ZeeOnAOD for the details of the algorithm and the selection cuts. | + | *First we should set up DQ2 tools: |
| | | |
− | *Now, open this file in ROOT and browse the AthenaAwareNTuple:
| |
| <pre> | | <pre> |
− | root
| + | source /afs/usatlas.bnl.gov/Grid/Don-Quijote/dq2_user_client/setup.csh.CERN |
− | TFile *_file0 = TFile::Open("ZeeOnAOD.aan.root")
| |
− | new TBrowser
| |
− | TTree * zmumuOnAOD=(TTree*) gDirectory->Get("CollectionTree");
| |
− | zeeOnAOD->SetMarkerStyle(20)
| |
− | zeeOnAOD->SetMarkerSize(0.5)
| |
− | zeeOnAOD->SetMarkerColor(2)
| |
− | zeeOnAOD->SetLineColor(4)
| |
− | zeeOnAOD->SetLineWidth(2)
| |
− | zeeOnAOD->Draw("ZeeMass")
| |
− | ZeeOnAOD->Draw("ElectronIsEM")
| |
| </pre> | | </pre> |
| | | |
− | *The StoreGate keys for the various objects in the AOD are listed here: StoregateKeysForAOD.
| + | ==PANDA/PATHENA== |
− | | + | *For further details visit [https://twiki.cern.ch/twiki/bin/view/Atlas/DAonPanda panda wiki] |
− | *Exercise: add 2 branches to you ZeeOnAOD NTuple to save the Electron cluster energy and TrackParticle momentum. Recompile and run. Then in ROOT check your NTuple that these variables are filled correctly.
| + | *Setup PATHENA : |
− | | |
− | ==The TrackParticle== | |
− | *In this exercise, we will access the a collection of TrackParticles directly from the AOD. Note that from the association objects, Analysis::Muon or Electron, you can access the access the various associated TrackParticles, e.g., look in AnalysisMuon.cxx. But in this exercise, we will use one collection of TrackParticles in the AOD. You may proceed as follows, then we go through the code: | |
| <pre> | | <pre> |
− | cd ../src | + | cd ~/scratch0/Workshop/12.0.2/PhysicsAnalysis/AnalysisCommon/UserAnalysis |
− | cp ~/PhysicsAnalysis/AnalysisCommon/UserAnalysis/src/TrackExample.cxx .
| + | cvs update -r UserAnalysis-00-08-13 -A python |
− | cd ../UserAnalysis
| + | cvs update -r UserAnalysis-00-08-13 -A share/pathena |
− | cp ~/PhysicsAnalysis/AnalysisCommon/UserAnalysis/UserAnalysis/TrackExample.h .
| + | cvs update -r UserAnalysis-00-08-13 -A share/pathena_util |
| + | cvs update -r UserAnalysis-00-08-13 -A share/ConfigExtractor.py |
| + | cd cmt |
| + | source setup.sh |
| + | gmake |
| cd ../run | | cd ../run |
− | cp ~/PhysicsAnalysis/AnalysisCommon/UserAnalysis/run/TrackExample_jobOptions.py .
| |
| </pre> | | </pre> |
| | | |
− | *Now, you want to go the src/components directory and declare this new algorithm TrackExample. | + | *run pathena |
| + | Note: '''change user.GustavoOrdonezSanz.00008.AAN.root with an appropiate name!!''' |
| <pre> | | <pre> |
− | cd ../src/components
| + | pathena ZmumuOnAOD_jobOptions.py --inDS 'csc11.005145.PythiaZmumu.recon.AOD.v11004103' --outDS \ |
| + | 'user.GustavoOrdonezSanz.00008.AAN.root' |
| </pre> | | </pre> |
− | *edit UserAnalysis_entries.cxx and add these lines
| |
− | (follow the example that is already in there for the AnalysisSkeleton and AnalysisMuon):
| |
− | <pre>
| |
− | #include "UserAnalysis/TrackExample.h"
| |
| | | |
− | DECLARE_ALGORITHM_FACTORY( TrackExample )
| + | *For job status monitoring visit: [http://gridui02.usatlas.bnl.gov:25880/server/pandamon/query Monitoring] |
| + | |
| + | |
| | | |
− | DECLARE_ALGORITHM( TrackExample )
| + | ==DQ2 Tools== |
− | </pre>
| + | *For furhter details visit [https://twiki.cern.ch/twiki/bin/view/Atlas/UsingDQ2 DQ2 wiki] |
− | *Save UserAnalysis_entries.cxx and go back the cmt directory and compile: | + | *This tools make your life easier when working on the GRID |
| <pre> | | <pre> |
− | cd ../../cmt
| + | dq2_ls *Zmumu*AOD* |
− | cmt config
| |
− | cmt broadcast gmake
| |
− | cd ../run
| |
| </pre> | | </pre> |
− | *Now you may run the TrackExample algorithm as follows: | + | |
| + | *Have a look at the files contained in one of the sets |
| <pre> | | <pre> |
− | athena.py TrackExample_jobOptions.py
| + | dq2_ls -f <datasetname> |
| </pre> | | </pre> |
− | *You should have an AthenaAwareNTuple file, TrackExample.aan.root. While Athena is running, let's go through the code by following this link: KeteviAnalysis. Note the log output to the screen: you will see that the perigee information and the track summary information are being printed to the screen. Look at TrackExample.cxx in details to see how to access this information and more from the TrackParticle.
| |
| | | |
− | *Now, open this file in ROOT and browse the AthenaAwareNTuple: | + | *change user.GustavoOrdonezSanz.00008.AAN.root for your own |
| <pre> | | <pre> |
− | root -l
| + | dq2_get -rv -d . user.GustavoOrdonezSanz.00008.AAN.root |
− | TFile *_file0 = TFile::Open("TrackExample.aan.root")
| |
− | new TBrowser
| |
− | TTree * trackExample=(TTree*) gDirectory->Get("CollectionTree");
| |
− | trackExample->SetMarkerStyle(20)
| |
− | trackExample->SetMarkerSize(0.5)
| |
− | trackExample->SetMarkerColor(2)
| |
− | trackExample->SetLineColor(4)
| |
− | trackExample->SetLineWidth(2)
| |
− | trackExample->Draw("TrackPEta")
| |
− | trackExample->Draw("TrackPD0")
| |
− | trackExample->Draw("TrackPZ0:TrackPD0")
| |
| </pre> | | </pre> |
− | *In this example, we used the Inner Detector collection of TrackParticle in AOD, with StoreGate key "TrackParticleCandidate": follow this link for the AOD content and the keys for various objects/containers int the AOD - StoregateKeysForAOD.
| |
− |
| |
− | ==++Event Selection with TAG or AAN==
| |
− | *In this exercises, we will use the TAG and the AthenaAwareNTuple to select the final states of interest. For details on the TAG based event selection, follow this link: TagForEventSelection.
| |
− |
| |
− | ==Event Selection with the TAG==
| |
− | *In this exercise, we will use the TAG to select the final states of interest. The data that we are contains Z to mumu so there is not must selection final state we can do with the TAG on this data but this exercise will give a flavor of what you can to with the TAG and how to it. Consider the following job options.
| |
− |
| |
− | ####################################################
| |
− | #Author - Ketevi A. Assamagan
| |
− | AllAlgs = False
| |
− | doHist = False
| |
− | doCBNT = False
| |
− | doWriteTAG = False
| |
− | doWriteESD = False
| |
− | readAOD = True
| |
− | doAOD = False
| |
− | doWriteAOD = True
| |
− | # read the TAG as input to the job
| |
− | readColl = True
| |
− |
| |
− | # Number of Events
| |
− | EvtMax = 20
| |
− |
| |
− | # Use the TAG that you just produce to select the events
| |
− | # define also the selection criteria
| |
− | include ( "mc11.004202.ZmumuJimmy.recon.TAG.v11000401.py" )
| |
− | CollInputQuery="NLooseMuon>0 && NLooseMuon<3 && abs(LooseMuonEta1)<2.5 && abs(LooseMuonEta2)<2.5 && LooseMuonPt2>10000 && LooseMuonPt2>10000"
| |
− |
| |
− | #Create a new RDO, ESD and AOD that contain only selected events
| |
− | PoolAODOutput = "mc11.004202.ZmumuJimmy.recon.AOD.TagSel.v11000401.root"
| |
− |
| |
− | # main reconstruction job jobOptions
| |
− | include ("RecExCommon/RecExCommon_topOptions.py")
| |
− | #######################################################
| |
− |
| |
− | Create a file called TagBasedEventSelection_topOptions.py and copy the above options into it and save it. We are using the TAG file as input and selecting the events at the AOD level. Our selection criteria are defined in the CollInputQuery. We are querying for the events having:
| |
− |
| |
− | Two one or 2 loose muons
| |
− | Eta of each loose muons within 2.5
| |
− | Pt of 2 loose muons above 10 GeV - unit in MeV
| |
− |
| |
− | For the all the events that pass the selection, we create an AOD file that contains ONLY the selected events: for details on how to use the TAG and which TAG content or attributes you can make selection on, follow this link: TagForEventSelection. The new AOD file name should be mc11.004202.ZmumuJimmy.recon.AOD.TagSel.v11000401.root as specified in the above job options. To select events at the ESD level, one would simply add this lines:
| |
− |
| |
− | readESD = True
| |
− | readAOD = False
| |
− |
| |
− | Now run this job options and see that you have a new AOD file that contains only the selected events. An easy and a quick way to see the TAG attributes is to just open the TAG file in ROOT and browse. Copy a sample TAG file from my area and open it in ROOT:
| |
− |
| |
− | cp ~ketevi/scratch0/Tutorial/12.0.1/PhysicsAnalysis/AnalysisCommon/UserAnalysis/run/TAG.fromAOD.pool.root .
| |
− | root TAG.fromAOD.pool.root
| |
− | b=TBrowser()
| |
− |
| |
− | NOw you can do analysis on the new AOD that contains ONLY the selected events.
| |
− |
| |
− | Event Selection with the AthenaAwareNTuple
| |
− | In this exercise, we will use the AthenaAwareNTuple that you produced in the introdcution: you should have an NTuple called AnalysisSkeleton.aan.root. Proceed as follows:
| |
− |
| |
− | cp AnalysisSkeleton_jobOptions.py AanSelectionAnalysis_topOptions.py
| |
− |
| |
− | Edit AanSelectionAnalysis_topOptions.py and replace this line
| |
− |
| |
− | include( "mc11.004201.ZeeJimmy.recon.AOD.v11000401.py" )
| |
− |
| |
− | with these lines
| |
− |
| |
− | EventSelector.InputCollections = [ "AnalysisSkeleton.aan" ]
| |
− | EventSelector.Query="NElectrons>0 && NElectrons<3 && abs(ElectronEta[0])<2.5 && abs(ElectronEta[1])<2.5 && ElectronPt[0]>10000 && ElectronPt[1]>10000"
| |
− | EventSelector.CollectionType = "ExplicitROOT"
| |
− |
| |
− | Here, we are using the AthenaAwareNTuple called AnalysisSkeleton.aan.root to selected the event at the AOD. Then, we are run the Analysis code, AnalysisSkeleton.cxx on the selected events. Note that when you use the TAG or the AthenaAwareNTuple to event selection, the file extension .root must not be specified: it is assumed and will be appended. In these exercises, we are using the ROOT version of the TAG --- also, our AthenaAwareNTuple is a ROOT file. This is why we specify the CollectionType to be ExplicitROOT. There is also a database version of the TAG: for details see TagForEventSelection. In AanSelectionAnalysis_topOptions.py, replace these lines
| |
− |
| |
− | THistSvc.Output = ["AANT DATAFILE='AnalysisSkeleton.aan.root' OPT='RECREATE'"]
| |
− | AANTupleStream.OutputName = 'AnalysisSkeleton.aan.root'
| |
− |
| |
− | with these lines:
| |
− |
| |
− | THistSvc.Output = ["AANT DATAFILE='AnalysisSkeleton.sel.aan.root' OPT='RECREATE'"]
| |
− | AANTupleStream.OutputName = 'AnalysisSkeleton.sel.aan.root'
| |
| | | |
− | Now run:
| + | ==Ganga== |
| + | We're not going to cover Ganga in this tutorial. But for reference look at:[https://twiki.cern.ch/twiki/bin/view/Atlas/DistributedAnalysisUsingGanga Ganga link] |
| | | |
− | athena.py -b AanSelectionAnalysis_topOptions.py
| + | ==Final Exercice== |
| + | To conclude the workshop we're going to try to make our own Higgs to four muon analysis. Taking as an example the ZmumuOnAOD algorithm, make a H4mu one. The purpose of this, is to dig into the Phisics Analysis Tools used in ZmumuOnAOD, and try to have a realistic approach of how is like to make Analyis in Athena. |
| | | |
− | You should have a new AthenaAwareNTuple file called AnalysisSkeleton.sel.aan.root. That we've just done is the following: we use a previously available AthenaAwareNTuple or TAG to select events and we did analysis on the selected events creating a new AthenaAwareNTuple. We also saw that it is possible to create a new AOD that contains ONLY the selected events. Now check that the selection criteria that we specified above were indeed apply: open AnalysisSkeleton.sel.aan.root and plot the EventNumber and the NElectrons (this should be one or two) according to our selection criteria.
| + | Good luck! |
Pre-Tutorial
- This pre-Tutorial is copy of the one given by Ketevi A. Assamagan, adapted to work in 12.0.2
- here is a link to other Tutorials by Ketevi, and other usful PAT links:
PAT
- Please follow the following pre-Tutorial before the date of the Workshop. It is a very straight forward, tutorial and will help to set up the athena enviroment for the workshop, so we can focus our time in more interested things
Pre-Tutorial link
During the workshop we'll browse over the code that we've used in the pre-Tutorial to try and uderstand it. Later we'll focused on the TAG and AAN selection.
Event Selection
First we're going to generate a new AAN that we'll use later for selection.
cd ~scratch0/Workshop/
source setup.sh -tag=12.0.2,opt
cd 12.0.2/PhysicsAnalysis/AnalysisCommon/UserAnalysis
cp ~ordonez/public/Workshop_files/src/AnalysisSkeleton.cxx src/.
cp ~ordonez/public/Workshop_files/UserAnalysis/AnalysisSkeleton.h UserAnalysis/.
cd cmt
gmake
cd ..
mkdir run2
cd run2
cp ~ordonez/public/Workshop_files/run2/AnalysisSkeleton_jobOptions.py .
cp ~ordonez/public/Workshop_files/data2/PoolFileCatalog.xml .
cp ~ordonez/public/Workshop_files/data2/mc11.004202.ZmumuJimmy.recon.AOD.v11000401.py .
athena AnalysisSkeleton_jobOptions.py | tee athenaOut_AnalysisSkeleton.log
This will generate the file AnalysisSkeleton.aan.root.
Event Selection using TAG
- First we generate our own TAG.
- Still in the new run2 directory:
cp ~ordonez/public/Workshop_files/run2/Main_topOptions.py .
- Edit Main_topOptions.py and uncomment the line
### Create TAG file
doWriteTAG=True
athena Main_topOptions.py | tee athenaOut.log
- This will generate the file called ZmumuOnAOD_TAG.root
- Now we are ready to run our algorithms with a TAG selection on the fly. Edit Main_topOptions.py again comment out:
#doWriteTAG=True
doRunAODwithSelection=True
and
useTag=True
cp ~ordonez/public/Workshop_files/run2/ZmumuOnAOD_new_jobOptions.py .
- And run again. Note that only will run the events that satisfy the query:
EventSelector.Query = "NLooseMuon>0 && NLooseMuon<3 && abs(LooseMuonEta1)<2.5 && abs(LooseMuonEta2)<2.5 && LooseMuonPt1>10000 && LooseMuonPt2>10000"
athena Main_topOptions.py | tee athenaOut.log
- As an output you have ZmumuOnAOD_withTAGSelection.aan.root. You can have a look at it in root to make sure that the query has been satisfied
- Now we'll rewrite our own AOD containeing only the events selected. We'll do it for only 50 events to gain some time
- Edit again Main_topOptions.py and change:
TheApp.EvtMax = 500
to
TheApp.EvtMax = 50
#doRunAODwithSelection=True
doRewriteAOD=True
and run once more
athena Main_topOptions.py | tee athenaOut.log
You'll see a new Zmumu_new_AOD_withTAGSelection.root file has been created
Event Selection using AAN
- Follow as in the previous section but useANN=True instead of useTAG=True. In the end you should have the following two files:
ZmumuOnAOD_withAANSelection.aan.root
Zmumu_new_AOD_withAANSelection.root
Interactive Analysis in ATHENA
- In this exercise, we will see how to do interactive analysis in ATHENA, how to browse the Raw Data in the AOD. Proceed as follows:
get_files Interactive_topO.py
- Edit Interactive_topO.py and replace this line
EventSelector.InputCollections = [ "AOD.pool.root" ]
include ( "mc11.004202.ZmumuJimmy.recon.AOD.v11000401.py" )
athena -i Interactive_topO.py
- Initialize application manager
athena>theApp.initialize()
athena>theApp.nextEvent()
athena>mcon = PyParticleTools.getMuons("MuidMuonCollection")
athena>m = mcon[0]
athena>dir(m)
athena>m.pt()
- Get TrackParticle via ElementLink
athena>tp = m.track()
athena>dir(tp)
athena>tp.pt()
athena>mcc = PyTruthTools.getMcEvents("TruthEvent")
athena>mc = mcc[0]
athena>mc.alphaQCD()
athena>dumpSG()
athena>theApp.nextEvent()
Rewind event counter
athena>theApp.seek(0)
- See pT distribution of muons
athena> plot("MuonContainer#MuidMuonCollection","$x.pt()",nEvent=5)
Analysis with the EventView
- Due to the time I won't cover this section during the Workshop. But now you should have the basic knowledge requiered to understand it. You can learn about the Event View here
Analysis on the GRID
- In the following examples we'll run on Zmumu datasets.
- This will be a brief introduction to GRID tools for those of you who already went through the trouble of getting a GRID certificate.
- First we should set up DQ2 tools:
source /afs/usatlas.bnl.gov/Grid/Don-Quijote/dq2_user_client/setup.csh.CERN
PANDA/PATHENA
- For further details visit panda wiki
- Setup PATHENA :
cd ~/scratch0/Workshop/12.0.2/PhysicsAnalysis/AnalysisCommon/UserAnalysis
cvs update -r UserAnalysis-00-08-13 -A python
cvs update -r UserAnalysis-00-08-13 -A share/pathena
cvs update -r UserAnalysis-00-08-13 -A share/pathena_util
cvs update -r UserAnalysis-00-08-13 -A share/ConfigExtractor.py
cd cmt
source setup.sh
gmake
cd ../run
Note: change user.GustavoOrdonezSanz.00008.AAN.root with an appropiate name!!
pathena ZmumuOnAOD_jobOptions.py --inDS 'csc11.005145.PythiaZmumu.recon.AOD.v11004103' --outDS \
'user.GustavoOrdonezSanz.00008.AAN.root'
DQ2 Tools
- For furhter details visit DQ2 wiki
- This tools make your life easier when working on the GRID
dq2_ls *Zmumu*AOD*
- Have a look at the files contained in one of the sets
dq2_ls -f <datasetname>
- change user.GustavoOrdonezSanz.00008.AAN.root for your own
dq2_get -rv -d . user.GustavoOrdonezSanz.00008.AAN.root
Ganga
We're not going to cover Ganga in this tutorial. But for reference look at:Ganga link
Final Exercice
To conclude the workshop we're going to try to make our own Higgs to four muon analysis. Taking as an example the ZmumuOnAOD algorithm, make a H4mu one. The purpose of this, is to dig into the Phisics Analysis Tools used in ZmumuOnAOD, and try to have a realistic approach of how is like to make Analyis in Athena.
Good luck!