The purpose of the ATLAS log page is to log all the tools and procedures that I use everyday in ATLAS. These are not analysis specific but rather general like how to run a derivation, how to setup a release, how to download datasets from the grid, etc.
Table of Contents generated with DocToc
- Every login
- Setup athena in rel21
- compile after modifying files (no new files)
- if you add files
- Update analysis release
- Compile with individual packages
- Create my package
- xAOD tips
- Running truth derivation
- Running truth derivation on the grid
- Rucio usefull commands
- How to access eos from lxplus
- How to access eos from NAF:
- Check xAOD
- [Interactive ROOT](#interactive-root) - [checkxAOD.py](#checkxaodpy) - [Metadata](#metadata) - Grid stuff
- Setup Athena release
- CP Tools
- Git with ATLAS
- Derivation framework
- running the lowest unprescaled trigger tool
Tips and Tricks
- Useful way to search for things in ATLAS is to use https://search.cern.ch
- Print line of code
#define DEBUG std::cerr << __FILE__ << "::" << __FUNCTION__ << "::" << __LINE__ << std::endl;
ATLAS Help mailing lists
- For Physics Analysis help: hn-atlas-PATHelp@cern.ch
- For Offline software: hn-atlas-offlineSWHelp@cern.ch
- For Grid help: hn-atlas-dist-analysis-help@cern.ch
Every login
setupATLAS
cd build
asetup --restore
source */setup.sh
Setup athena in rel21
setupATLAS
mkdir source build run
cd build/
asetup 21.2.3,AnalysisBase
emacs ../source/CMakeLists.txt # fill this file!
cmake ../source/
make
source */setup.sh
compile after modifying files (no new files)
cd ../build/
make
if you add files
cd ../build/
cmake ../source/
make
Update analysis release
rm -rf build
mkdir build
cd build
asetup AnalysisBase,9.9.99
cmake ../source/
make
Compile with individual packages
cd ../source
git checkout [...] athena # copy from gitlab the repository address
emacs source/package_filters.txt # list packages you want to keep
cd ../build
cmake ../source
Create my package
cd ../source/
MyPackage="myVBF"
mkdir ${MyPackage}
mkdir ${MyPackage}/${MyPackage}
mkdir ${MyPackage}/Root
mkdir ${MyPackage}/src
mkdir ${MyPackage}/src/components
mkdir ${MyPackage}/share
# add "atlas_subdir (${MyPackage})" to ${MyPackage}/CMakeLists.txt
cd ../build/
cmake ../source/
make
source `eval echo \\${${AtlasProject}_PLATFORM}`/setup.sh
xAOD tips
Interactively check xAOD file
root -l
gROOT->Macro( "$ROOTCOREDIR/scripts/load_packages.C" );
xAOD::Init();
f = TFile::Open("/path/to/DAOD_EXOT4.root", "READ");
t = xAOD::MakeTransientTree( f );
t->Draw( "ElectronCollection.pt()");
Check number of events in xAOD
Open file in root and do
CollectionTree->GetEntries()
Merge xAOD
xAODMerge <output_xAOD.root> <input_xAOD_1.root input_xAOD_2.root ...>
Running truth derivation
setupATLAS
asetup 20.1.8.3,AtlasDerivation,gcc48,here
Reco_tf.py --inputEVNTFile powheg.root --outputDAODFile tutorial.pool.root --reductionConf TRUTH1
Running truth derivation on the grid
setupATLAS
asetup 20.1.8.3,AtlasDerivation,gcc48,here
lsetup rucio panda ganga
voms-proxy-init -voms atlas
Rucio usefull commands
# List dids
datastring="Sherpa_221*Zmumu*.merge.DAOD_TRUTH1"
rucio list-dids mc15_13TeV:mc15_13TeV*${datastring}*/ --filter type=container | grep mc15 | sort | awk -F"|" '{print $2}'
# Download from list
mylist="Zmm.list"
for i in $(cat ${mylist}); do echo $i; rucio download $i; done
How to access eos from lxplus
https://cern.service-now.com/service-portal/article.do?n=KB0001998
setupATLAS
voms-proxy-init -voms atlas
lsetup xrootd
it depends if you want to access ATLAS or your cernbox you can set the environment variable:
for ATLAS:
eos root://eosatlas.cern.ch ls /eos/atlas/user/o/othrif
# or
export EOS_MGM_URL=root://eosatlas.cern.ch
eos ls /eos/atlas/user/o/othrif/
for cernbox:
eos root://eosuser.cern.ch ls /eos/user/o/othrif
# or:
export EOS_MGM_URL=root://eosuser.cern.ch
eos ls /eos/user/o/othrif
in root
TFile * test = TFile::Open("root://eosatlas.cern.ch//eos/atlas/user/o/othrif/hist-input.root")
How to access eos from NAF:
setupATLAS
voms-proxy-init -voms atlas
lsetup xrootd
kinit othrif@CERN.CH
xrdfs eosatlas.cern.ch ls -l /eos/atlas/user/o/othrif/
xrdfs eosuser.cern.ch ls -l /eos/user/o/othrif/
xrdcp <file.txt> root://eosatlas.cern.ch//eos/atlas/user/o/othrif/.
xrdcp root://eosatlas.cern.ch//eos/atlas/user/o/othrif/<file.txt> .
xrdcp root://eosuser.cern.ch//eos/user/o/othrif/<file.txt> .
# in root:
TFile * test = TFile::Open("root://eosatlas.cern.ch//eos/atlas/user/o/othrif/hist-input.root")
Check xAOD
TO DO: need instructions for rel21.
Setup RootCore:
mkdir checkdir && cd $_
setupATLAS
lsetup 'rcsetup Base,2.4.28'
rc find_packages
rc compile
Interactive ROOT
root -l
gROOT->Macro( "$ROOTCOREDIR/scripts/load_packages.C" );
xAOD::Init();
f = TFile::Open( "xAOD.pool.root" )
t = xAOD::MakeTransientTree( f )
t->Draw( "Electrons.pt() - Electrons.trackParticle().pt()" );
You can use TBrowser after creating the transient tree in "root/Root Memory/CollectionTree"
checkxAOD.py
To retrieve the container type "xAOD::CaloCluster" and key name "egammaClusters":
setupATLAS
asetup 21.2.13,AnalysisBase
checkxAOD.py xAOD.pool.root
To know the variables associated to this container do:
root -l xAOD.pool.root
root [1] CollectionTree->Print("egammaClusters*")
the varialbe will come after the dot, like "rawEta" in "egammaClusters.rawEta". You can for instance output this variable.
Metadata
Explore metadata with
asetup AthAnalysis,21.2,latest
lsetup PyAMI
getMetadata.py --inDS=mc15_13TeV.3610*EVNT*
getMetadata.py --inDS=mc15_13TeV.361063.*EVNT* --explainFields kFactor
Also, you can put the sample dataset names in a text file and get an output file with:
getMetadata.py --inDsTxt=my.datasets.txt --outFile=my.metdata.txt
The outptu file can directly be parsed in your analysis code.
You can also see what metadata is available:
checkMetaSG.py xAOD.pool.root
Grid stuff
Check status more than 7 days: https://bigpanda.cern.ch/tasks/?username=Othmane%20Rifki&days=50
Also when tasks disappear due to limit of time passed try adding &days=500
Grid setup
setupATLAS
lsetup rucio panda ganga
voms-proxy-init -voms atlas
Rucio
DID = scope:name (data15_13TeV:DAOD_SUSY2.06797864._000001.pool.root.1)
rucio list-dids "user.${USER}:*"
rucio list-scopes | grep $USER
rucio list-dids <DID>
rucio list-files <DID>
rucio list-content <DID>
rucio download <DID>
rucio download --nrandom 1 <DID> // 1 randomly
rucio get-metadata <DID> // can be used for --filter options
rucio list-dataset-replicas <DID>
rucio list-file-replicas <DID>
rucio list-account-usage $USER // shows you quotas
Examples: rucio list-dids "data15_13TeV:*276329*" --filter type=dataset,datatype=DAOD_SUSY2
Duplicate to another site
for i in $(cat list); do rucio add-rule $i 1 DESY-HH_LOCALGROUPDISK;done
Kill pid's in pbook:
content=[]
with open("/tmp/sub") as f:
content = f.readlines()
content = [x.strip() for x in content]
for x in content:
print "kill(",x,")"
pbook retry help
Open pbook:
help(retry)
When you get brokerage failed, do
setupATLAS
lsetup rucio panda ganga
pbook
retry(PID)
To upload files to the grid
rucio upload --rse DESY-HH_SCRATCHDISK file1 file2 file3 --scope user.<YOUR_USERNAME>
To check the available RSE
rucio list-rses
rucio list-account-limits othrif
rucio list-account-usage othrif
DESY: DESY-HH_LOCALGROUPDISK, DESY-HH_SCRATCHDISK
Working with rules
rucio list-rules --account othrif
Delete rule with
rucio delete-rule <datasetname>
Or redirect the output of list-rules to rules.txt and run in python:
#!/usr/bin/python
with open('rules.txt', "rb") as rules:
for rule in rules:
args = rule.split()
print 'rucio delete-rule', args[2], '--rse_expression', args[4]
Then check the rules before copy pasting them to the terminal
Problems with the grid
- Check grid output If you have problems with the output directory beeing too large by looking at
pilotlog.txtin the logs
Pandamonium
- Check out: https://github.com/dguest/pandamonium
- To get a list of jobs:
pandamon user.othrif - To retry
finished:pandamon | awk '$1 ~ /finished/ {print $2}' | panda-resub-taskid - To retry
failed:pandamon | awk '$1 ~ /failed/ {print $2}' | panda-resub-taskid
Tricks from Kirill
- In pbook
killAndRetry(14359589, newSite=True, newOpts={'--forceStaged':''},)
Setup Athena release
mkdir MyAnalysisProject; cd MyAnalysisProject
mkdir source build
cd build
acmSetup --sourcedir=../source AthAnalysis,21.2.6
CP Tools
Calibration Jets
https://twiki.cern.ch/twiki/bin/view/AtlasProtected/ApplyJetCalibrationR21 The configuration files are stored in the calibration area: http://atlas.web.cern.ch/Atlas/GROUPS/DATABASE/GroupData/JetCalibTools/ You can find them as well in CVMFS: /cvmfs/atlas.cern.ch/repo/sw/database/GroupData/JetCalibTools/
Git with ATLAS
Every time you want to update a package (i.e. SUSYTools)
git fetch upstream
git checkout -b my21.2-2018-03-21 upstream/21.2
Clone Athena with full checkout
git clone https://:@gitlab.cern.ch:8443/othrif/athena.git
cd athena/
git remote add upstream https://:@gitlab.cern.ch:8443/atlas/athena.git
git remote -v show
git fetch upstream
git checkout -b <THE BRANCH I WANT> upstream/master --no-track
git push --set-upstream origin <THE BRANCH I WANT>
Derivation framework
Existing derivation
setupATLAS
asetup 21.2,AthDerivation,latest
Reco_tf.py --inputAODFile $disk/samples/AOD/input.AOD.root --outputDAODFile output.pool.root --reductionConf EXOT5 --maxEvents 10
Passthrough on:
Reco_tf.py --passThrough True --inputAODFile $disk/samples/AOD/input.AOD.root --outputDAODFile output.DAOD.root --reductionConf EXOT5
Modify derivation
#kinit othrif@CERN.CH
setupATLAS
lsetup asetup
lsetup git
mkdir sandbox && cd $_
export here=$PWD
mkdir build run
git atlas init-workdir https://:@gitlab.cern.ch:8443/atlas/athena.git
cd athena
git atlas addpkg DerivationFrameworkExotics
git branch -a
#git checkout -b 21.2-updateRel21EXOT5-2018-01-18 upstream/21.2 --no-track
git branch -a
# MODIFY athena/PhysicsAnalysis/DerivationFramework/DerivationFrameworkExotics/.
git diff PhysicsAnalysis/DerivationFramework/DerivationFrameworkExotics/
# git push -u origin 21.2-updateRel21EXOT5-2018-01-26 upstream/21.2
cd $here/build/
asetup 21.2,AthDerivation,latest
cmake ../athena/Projects/WorkDir
make
source */setup.sh
cd ../run/
Reco_tf.py --inputAODFile $disk/samples/AOD/input.AOD.root --outputDAODFile output.DAOD.root --reductionConf EXOT5 --maxEvents 10
Run derivation on grid
setupATLAS
lsetup rucio panda ganga
voms-proxy-init -voms atlas
pathena --trf "Reco_tf.py --passThrough False --inputAODFile %IN --outputDAODFile %OUT.EXOT5.pool.root --reductionConf EXOT5" --nFiles=1 --inDS <INPUT_DATASET> --outDS user.othrif.<OUTPUT_DATASET>
pathena --trf "Reco_tf.py --passThrough False --inputAODFile %IN --outputDAODFile %OUT.EXOT5.pool.root --reductionConf EXOT5" --nFilesPerJob=5 --inDS <INPUT_DATASET> --outDS user.othrif.<OUTPUT_DATASET>
Generate PRW config file
setupATLAS
acmSetup AthAnalysis,21.2,latest
lsetup pyAMI panda
voms-proxy-init -voms atlas
generatePRW.py --inDsTxt=mySamples.txt --outDS=user.othrif.myPRW --skipNTUP_PILEUP
checkPRW.py --inDsTxt=mySamples.txt path/to/prwfiles/*.root
running the lowest unprescaled trigger tool
setupATLAS
asetup AthenaP1,21.1.20
python -c "
from TriggerMenu.api.TriggerAPI import TriggerAPI
from TriggerMenu.api.TriggerEnums import TriggerPeriod, TriggerType
print TriggerAPI.getLowestUnprescaled(337833, TriggerType.mu_single)"
ATLAS framework tips
Debug line number
#define DEBUG std::cerr << __FILE__ << "::" << __FUNCTION__ << "::" << __LINE__ << std::endl
cout in Athena
ANA_MSG_INFO( "done with histInitialize Nominal" );
Check xAOD
xAODChecker /path/to/DAOD.file
checkFile /path/to/DAOD.file
Code base path for derivation
/cvmfs/atlas.cern.ch/repo/sw/software/21.2/AthDerivation
Latest release
- AnalysisBase Numbered release: https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/AnalysisBaseReleaseNotes21_2
- AnalysisBase Nighly release: https://twiki.cern.ch/twiki/bin/view/AtlasComputing/AnalysisBaseNightlyInfo21_2
- AthDerivation releases: https://twiki.cern.ch/twiki/bin/view/AtlasProtected/DerivationProductionTeam#Info_on_AtlasDerivation_caches_a
- To know which branch is associated with which projects look at the README's:
- master gives you a summary: https://gitlab.cern.ch/atlas/athena/blob/master/README.md
- for example 21.2 tells you it is for "derivation and analysis software for 2017"
Nighlies
- Nighlies have a tag in the form: nightly/BRANCH/YYYY-MM-DDTHHMM. e.g., nightly/21.0/2017-04-26T0710
- To setup a nighly release:
asetup 21.2,Athena,r2018-02-23T1059 - To see which nighlies are available:
ls /cvmfs/atlas-nightlies.cern.ch/repo/sw/21.2/ - The candidate for the next release from a nighly can be found in: https://gitlab.cern.ch/atlas/athena/blob/21.2/Projects/AthDerivation/version.txt
For example, I want to know what is the next numbered build for AthDerivation in 21.2, then I check: https://gitlab.cern.ch/atlas/athena/blob/21.2/Projects/AthDerivation/version.txt which shows 21.2.17.0 I can confirm it by looking at https://twiki.cern.ch/twiki/bin/view/AtlasProtected/DerivationProductionTeam#Info_on_AtlasDerivation_caches_a which at the time of the writing shows 21.2.16.0 as the last entry in the table. So the next release candidate number is 21.2.17.0.
You could also go to https://gitlab.cern.ch/atlas/athena/blob/release/21.2.18.0/PhysicsAnalysis/DerivationFramework/, to get to release 21.2.18.0.
Compile ATLAS notes with Latex
export PATH=/afs/cern.ch/sw/XML/texlive/previous/bin/x86_64-linux:$PATH
Histfitter
Setting up SS3L Histfitter
On LXPLUS:
kinit othrif@CERN.CH
mkdir -p /afs/cern.ch/work/o/othrif/SS_HistFitter && cd $_
git clone https://:@gitlab.cern.ch:8443/disimone/SSHistHitter.git
mkdir run2 && cd $_
mkdir -p HistFitterUser
wget https://bootstrap.pypa.io/ez_setup.py -O - | python - --user
wget https://pypi.python.org/packages/ef/33/9b65092aaa03a43e90326dcf4d921516fe9e649a47eb928f3e19f961b050/odict-1.6.2.tar.gz
tar -xvzf odict-1.6.2.tar.gz
cd odict-1.6.2/
python setup.py install --user
git clone https://:@gitlab.cern.ch:8443/HistFitter/HistFitter.git
cd HistFitter
git checkout tags/v0.54.0
source setup_afs.sh
cd src/
make
cd ../..
ln -s ../SSHistHitter/macroSS macroSS
ln -s ../SSHistHitter/python python
ln -s ../SSHistHitter/prepare prepare
ln -s ../SSHistHitter/susyGridFiles susyGridFiles
ln -s /afs/cern.ch/work/o/othrif/InputTrees InputTrees
export PYTHONPATH=/afs/cern.ch/work/o/othrif/SS_HistFitter/run2/python:$PYTHONPATH
export HFRUNDIR=/afs/cern.ch/work/o/othrif/SS_HistFitter/run2/InputTrees
# emacs python/pathUtilities.py # Modify the paths
cd /afs/cern.ch/work/o/othrif/SS_HistFitter/SSHistHitter/HFpatch
source cpFiles.sh
cd ${HISTFITTER}/src
make
cd /afs/cern.ch/work/o/othrif/SS_HistFitter/run2/prepare/xsections/mc15_13TeV
ln -s ../xsections_Ximo.txt Backgrounds.txt
On ouhep01:
kinit othrif@CERN.CH
setupATLAS
lsetup "root 6.04.02-x86_64-slc6-gcc48-opt"
git clone https://:@gitlab.cern.ch:8443/disimone/SSHistHitter.git
mkdir run2 && cd $_
git clone https://:@gitlab.cern.ch:8443/HistFitter/HistFitter.git
cd HistFitter
git checkout tags/v0.54.0
source setup.sh
cd src
make
cd ../..
mkdir
ln -s ../SSHistHitter/macroSS macroSS
ln -s ../SSHistHitter/python python
ln -s ../SSHistHitter/prepare prepare
ln -s ../SSHistHitter/susyGridFiles susyGridFiles
export PYTHONPATH=/UserDisk2/othrif/ss3l_HistFitter/run2/python:$PYTHONPATH
export HFRUNDIR=/UserDisk2/othrif/ss3l_HistFitter/fromPeter
# emacs python/pathUtilities.py # Modify the paths
Everytime you want to launch the fit:
cd HistFitter
source setup_afs.sh
export PYTHONPATH=/afs/cern.ch/work/o/othrif/SS_HistFitter/run2/python:$PYTHONPATH
export HFRUNDIR=/afs/cern.ch/work/o/othrif/SS_HistFitter/run2/InputTrees
AMI
To look at information about dataset:
ami show dataset info
mc15_13TeV.308276.PowhegPy8EG_NNPDF30_AZNLOCTEQ6L1_VBFH125_ZZ4nu_MET125.evgen.EVNT.e6126
Or:
ami list datasets mc15_13TeV.308276.PowhegPy8EG_NNPDF30_AZNLOCTEQ6L1_VBFH125_ZZ4nu_MET125.evgen.EVNT.e6126 --fields events,cross_section,generator_filter_efficienty
or with a list of files if you want to avoid # and blank lines:
while read -r line; do [[ "$line" =~ ^#.*$ ]] && continue; if [ ! -z "${line}" ]; then echo "ami list datasets ${line} --fields events,cross_section,generator_filter_efficienty | grep mc15" ; fi; done < evnt_samples.list
Quick tests in Rel21
Setup rel21
mkdir MyProject
cd MyProject
mkdir source build
cd build
acmSetup AthAnalysis,21.2.18
- Whenever you return, you just need to do:
cd MyProject/build acmSetupROOT Interactive
https://twiki.cern.ch/twiki/bin/viewauth/AtlasComputing/SoftwareTutorialxAODAnalysisInCMake#Work_on_the_interactive_ROOT_pro
GIT merge requests
Go to this url: https://gitlab.cern.ch/othrif/athena/merge_requests/new