...
It is based on a analysis package developed by J. Sjolin (Stockholm University) and P. Hansson.
Checkout and run
...
A slightly more detailed description is given below.
Short technical description
The core of the framework is in the /core
directory.
The main idea is to have a common description of an event even though different ntuples may be used. This class is called AtlEvent and can be found in the core/
directory and contains electrons, jets, muons, etc.
The AtlEvent
is built using the BuildEvent()
function which uses the interface function copy_to_interface()
to get information from the ntuple. The copy_to_interface()
is a derived function implemented in each new ntuple description class called FileEvent
in order to handle the difference between ntuple variable names. Since all FileEvent
derives from a base class (EventSrc
) all subsequent steps are the same independent of the ntuple used. This is how the ntuple content is decoupled from your analysis and when you want to run your analysis on a new ntuple you only need to make sure that the copy_to_interface()
is working properly to build your event.
The analysis is done using "Topology" classes which all derive from a base class Topology_base
which contain many useful functions to grab content of your AtlEvent.
The loop over your events is done using Topology_event
which derives from Topology_base
but in addition contain the functions to looper over your events loop_src()
and to add the input root files add_mc_sample()
and add_src_list
.
Since this is supposed to be a lightweight framework with focus on quick compilation and running the compilation is done automatically when you run your topology. This is handled by the "steering" macro ana.C
which is in your topology directory (see example in topologies/example
. The various classes are compiled, loaded, analysis classes are added and finally the event loop is executed.
Checkout
The code is in SVN and can be found by doing:
Code Block |
---|
phansson@pcphuat27]/u1/phansson/jetmetbtag% svn co svn+ssh://phansson@svn.cern.ch/reps/atlasgrp/Institutes/SLAC/FlatAna
|
In order to run it you need a few packages that is used:
ROOT
Root is needed.
GRL
Code Block |
---|
phansson@pcphuat27]/u1/phansson/jetmetbtag% svn co svn+ssh://phansson@svn.cern.ch/reps/atlasoff/DataQuality/GoodRunsLists/tags/GoodRunsLists-00-00-84 GoodRunsLists
|
Compile this package:
Code Block |
---|
phansson@pcphuat27]/u1/phansson/jetmetbtag% cd DataQuality/GoodRunList/cmt
phansson@pcphuat27]/u1/phansson/jetmetbtag/DataQuality/GoodRunList/cmt% gmake -f Makefile.Standalone
|
Copy the shared library to the topology directory where you will run your jobs (thi can be improve at some point):
Code Block |
---|
phansson@pcphuat27]/u1/phansson/jetmetbtag/DataQuality/GoodRunList% cp ../Standalone/libGoodRunsList.so ../../FlatAna/trunk/topologies/jetmetbtag/
|
JES uncertainty provider package:
Code Block |
---|
phansson@pcphuat27]/u1/phansson/jetmetbtag% svn co svn+ssh://phansson@svn.cern.ch/reps/atlasoff/Reconstruction/Jet/JetUncertainties/tags/JetUncertainties-00-01-02 JetUncertainties |
This package will be compiled on the fly by FlatAna but you need to copy the root file to the topology directory:
Code Block |
---|
phansson@pcphuat27]/u1/phansson/jetmetbtag% cp JetUncertainty/JESUncertaintyProvider/share/JESUncertainty.root FlatAna/trunk/topologies/jetmetbtag/
|
Trigger Navigation Tools:
Code Block |
---|
phansson@pcphuat27]/u1/phansson/jetmetbtag% svn co svn+ssh://phansson@svn.cern.ch/reps/ |
...
atlasoff/Trigger/TrigAnalysis/TriggerMenuNtuple/tags/TriggerMenuNtuple-00-01-32 TriggerMenuNtuple
|
This package MUST be compiled first!
Code Block |
---|
phansson@pcphuat27]/u1/phansson/jetmetbtag% cd TriggerMenuNtuple/cmd
|
Edit the Makefile in this directory. You must remove the two instances of "-m32" lines 15,20.
Code Block |
---|
phansson@pcphuat27]/u1/phansson/jetmetbtag/TriggerMenuNtuple/cmd% make
|
you might need to check that the path to this package are correct in ana.C (your run directory e.g. topology/jetmetbtag/), in particular check a few hard-coded paths (not very nice):
Code Block |
---|
gSystem->AddIncludePath(" -I../../../../DataQuality/GoodRunsLists/");
gSystem->AddIncludePath(" -I../../../../JetUncertainties/");
gSystem->CompileMacro("../../../../JetUncertainties/src/JESUncertaintyProvider.cxx","k");
gSystem->AddIncludePath(" -I../../../../TriggerMenuNtuple");
gSystem->Load("../../../../TriggerMenuNtuple/lib/libTriggerMenuNtuple.so","k");
|
Run an example
In order to run on the example you need a ntuple. This example runs on an ntuple:
user.bcbutler.susySlim11.v1.simple_Bb_B200_L100_herwigpp_susy.merge.NTUP_SUSY.e636_s933_s946_r1831_r1700_p364/
Make sure you manipulate the filelist:
- Open
flatana/filelist/filelist.txt
and change the path (top line) and directory/path name to match your own paths. - e.g.: change top line-> "/u1/data/"
- find the line: "BbB200L100.susy011 1.0 13.0 usr/p/phansson/data/user.bcbutler.susySlim11.v1.simple_Bb_B200_L100_herwigpp_susy.merge.NTUP_SUSY.e636_s933_s946_r1831_r1700_p364/"
- And change it to: "BbB200L100.susy011 1.0 13.0 user.bcbutler.susySlim11.v1.simple_Bb_B200_L100_herwigpp_susy.merge.NTUP_SUSY.e636_s933_s946_r1831_r17\
BbB200L100.susy011 1.0 13.0 user.bcbutler.susySlim11.v1.simple_Bb_B200_L100_herwigpp_susy.merge.NTUP_SUSY.e636_s933_s946_r1831_r1700_p364/"
All the needed compilations are done automatically in the main root macro ana.C
. The analysis class Topology_cutflow
can be run with:
Code Block |
---|
[phansson@pcphuat27] |
...
/u1/phansson/jetmetbtag% cd FlatAna/trunk/topologies/jetmetbtag [phansson@pcphuat27]/u1/phansson/temp/flatana_test/FlatAna/trunk/topologies/jetmetbtag% root -l root [0] .L ana.C root [1] ana("cutflow","BbB200L100.susy011",100) |
This should produce root files containing some basic histograms and a log file with event statistics. Have a look at the next section to get more info on what was going on and how to use a generic ntuple.
Run example over your own NTuple
In order to run over your own ntuple you need only to create a new FileEvent
:
[]
/u1/phansson/jetmetbtag/flatana/trunk/topologies/example% cp FileEvent_template.h FileEvent_trg.h
[]
/u1/phansson/jetmetbtag/flatana/trunk/topologies/example% cp FileEvent_template.cxx FileEvent_trg.cxx
Then open your root file (e.g. ntuple.root) and do a makeclass:
[]
phansson@pcphuat27/u1/phansson/jetmetbtag/flatana/trunk/topologies/example% root -l /u1/data/user09.DavidWilkinsMiller.trigger.v02.SethCaughron.misal1_mc12.EnhancedBias_1031.digit.RDO.v13004004_AANT_PHCOPY_SLIM/user09.DavidWilkinsMiller.trigger.v02.SethCaughron.misal1_mc12.EnhancedBias_1031.digit.RDO.v13004004.AANT._00001_slim.root
root
1
CollectionTree->MakeClass("slimclass")
Open slimclass.h
and
- Copy the declarations of variables and branches to
FileEvent_trg.h
(as private members). - Copy only the initialization of the variables and SetBranchAddress from the
Init(TTree *tree)
function to the functionSetBranches()
inFileEvent_trg.cxx
(Note again that only the initialization of variables and SetBranchAddress() should be copied) - Open
FileEvent_trg.cxx
andFileEvent_trg.h
and search and replace template with trg
The main macro to run is the ana.C
which takes care of compiling the needed dependencies, loading the chosen configurations, adding the analyses/topologies and finally executing the event loop. To make sure that your new ntuple will be used you need to open ana.C
and edit it:
- Find the line
/***** ADD YOUR OWN NTUPLE TYPE BELOW
and make sure that your new FileEvent class is compiled. - Find the line
/
*
*
* ADD YOUR OWN FILEEVENT NTUPLE FORMAT BELOW **
*
**
/
and make sure that your FileEvent class is loaded (the string in the file list name given as argument is used to determine what file type should be used)
Now you are ready to run. Use the simple helper script ana.sh l2rate 10
which is good to schedule several jobs at the same time as in the example above or run directly in ROOT:
[]
/u1/phansson/jetmetbtag/flatana/trunk/topologies/example% root -l
root
0
.L ana.C
root
1
ana(14,"tt.trg",10)
This should produce some histograms and log files.
Adding you own analysis class
In the topologies/example
folder there is an example class to start from Topology_l2rate
. It is recommended to make a new directory e.g. topologies/yourdirectory
in order to submit everything seamless to svn if needed. You can copy the example
directory.
Edit the new topology .eg. Topology_test
by adding new histograms, cuts, etc, see below for more details. The only change you need to do in order to run this class is to add this topology to the main macro ana.C
:
- Find the line
/***** ADD YOUR OWN TOPOLOGY TYPE BELOW
and make sure thatTopology_test
class is compiled and added.
The first argument in the add_topology()
function has to be unique and will be added to all output files.
Configuration
Many things are configurable. The configuration files are rather self-explanatoty and an example can be found in topologies/example/l2bjetrate.config
. Most of the selections are turned off if set to 0. Some example configurations are:
- Choose luminosity
- Object Dr cut definition for matching using automated functions
- Overlap removal of electron/jet/muons (See
do_overlap()
in AtlEvent.cxx)) - Electron,muon,jet,tau definitions
File list
The file list is where the samples you are using are defined. An example file list is in flatana/filelists/filelist.txt.
. The nice thing is that scale factors and cross-sections is directly given in a straightforward way. The first line contains the base path to your data directory. The follow lines then defines a set of sub-directories for each sample:
name, K-factor, cross-section
in pb
, subpath/to/filedirectory
Note that all root files in that directory will be assumed to contain the TTree and will be used.The ana.sh
script is just a helper script to run the major