ATLAS Offline Software
SUSYTruthTester.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // System include(s):
6 #include <memory>
7 #include <cstdlib>
8 #include <string>
9 #include <iostream>
10 
11 // ROOT include(s):
12 #include <TFile.h>
13 #include <TError.h>
14 #include <TString.h>
15 #include <TStopwatch.h>
16 #include <TSystem.h>
17 #include "TObjArray.h"
18 #include "TObjString.h"
19 
20 #include "xAODRootAccess/Init.h"
21 #include "xAODRootAccess/TStore.h"
22 #ifdef ROOTCORE
23 #include "xAODRootAccess/TEvent.h"
24 #else
25 #include "POOLRootAccess/TEvent.h"
26 #endif // ROOTCORE
28 
29 // EDM include(s):
34 #include "xAODTruth/TruthEvent.h"
35 #include "xAODCore/ShallowCopy.h"
38 
39 // Local include(s):
41 
42 int main( int argc, char* argv[] ) {
43 
44  using namespace asg::msgUserCode;
45  ANA_CHECK_SET_TYPE (int);
46 
48 
49  // The application's name:
50  const char* APP_NAME = argv[ 0 ];
51 
52  // Check if we received a file name:
53  if ( argc < 2 ) {
54  Error( APP_NAME, "No file name received!" );
55  Error( APP_NAME, " Usage: %s [xAOD file name] [maxEvents] [Debug] [ConfigFile=<cfile.conf>] ", APP_NAME );
56  return 1;
57  }
58 
60  int debug = 1;
61  Long64_t entries=-1;
62  std::string config_file = "SUSYTools/SUSYTools_Default.conf";
63 
64  for (int i = 1 ; i < argc ; i++) {
65  const char* key = strtok(argv[i], "=") ;
66  const char* val = strtok(0, " ") ;
67 
68  Info( APP_NAME, "processing key %s with value %s", key, val );
69 
70  if (strcmp(key, "Debug") == 0) debug = atoi(val);
71  if (strcmp(key, "ConfigFile") == 0) config_file = std::string(val);
72  if (strcmp(key, "maxEvents") == 0) entries = atoi(val);
73  }
74 
76  static SG::Accessor<int> acc_susyid("SUSY_procID");
77 
78  // Initialise the application:
79  //ANA_CHECK( xAOD::Init( APP_NAME ) ); //NOT WORKING? //MT,WB
80 
81  // Open the input file:
82  TString fileName;
83  fileName = argv[1];
84  Info( APP_NAME, "Opening file: %s", fileName.Data() );
85  std::unique_ptr< TFile > ifile( TFile::Open( fileName, "READ" ) );
86  ANA_CHECK( ifile.get() );
87 
88  // Create a TEvent object:
89 
90 
91 #ifdef ROOTCORE
93 #else
95 #endif
96 
97  //xAOD::TEvent event( xAOD::TEvent::kBranchAccess );
98  //xAOD::TEvent event( xAOD::TEvent::kClassAccess );
99  ANA_CHECK( event.readFrom( ifile.get() ) );
100  Info( APP_NAME, "Number of events in the file: %i",
101  static_cast< int >( event.getEntries() ) );
102 
103  TString xStream=""; //identify SUSY DxAOD flavour (inside entry loop now /MT)
104 
106 
107  // If we haven't set the number of events, then run over the whole tree
108  if (entries<0){
109  entries = event.getEntries();
110  }
111 
112  // Create the tool(s) to test:
113  ST::SUSYObjDef_xAOD objTool("SUSYObjDef_xAOD");
114 
115  int period = debug ? 1 : 100;
116 
117  // Loop over the events:
118  for ( Long64_t entry = 0; entry < entries; ++entry ) {
119 
120  // Tell the object which entry to look at:
121  event.getEntry( entry );
122 
123  // Print some event information for fun:
124  const xAOD::EventInfo* ei = 0;
125  ANA_CHECK( event.retrieve( ei, "EventInfo" ) );
126 
127  if (entry % period == 0) {
128  Info( APP_NAME,
129  "===>>> start processing event #%i, "
130  "run #%i %i events processed so far <<<===",
131  static_cast< int >( ei->eventNumber() ),
132  static_cast< int >( ei->runNumber() ),
133  static_cast< int >( entry ) );
134  }
135 
136  // Check SUSY Proc. ID for signal MC (only for first event for now!)
137  int pdgid1 = 0;
138  int pdgid2 = 0;
139 
140  if( objTool.FindSusyHP(pdgid1, pdgid2) != StatusCode::SUCCESS ){
141  Error(APP_NAME, "--- SOMETHING IS WRONG WITH THE SUSY PROC FINDING... ---");
142  return 1;
143  }
144 
145  if( pdgid1!=0 && pdgid2!=0){ //(just to avoid warnings)
146  Info(APP_NAME , "--- SIGNAL ID1 : %d", pdgid1);
147  Info(APP_NAME , " SIGNAL ID2 : %d", pdgid2);
148 
149  if ( acc_susyid.isAvailable(*ei) ){
150  Info(APP_NAME , " SIGNAL PROC ID (DECO) : %d", acc_susyid(*ei) );
151  }
152  }
153  }
154 
155  // CALLGRIND_TOGGLE_COLLECT;
156  // CALLGRIND_DUMP_STATS;
157  // ProfilerStop();
158 
159  // Return gracefully:
160  return 0;
161 }
ShallowCopy.h
SGTest::store
TestStore store
Definition: TestStore.cxx:23
python.AtlRunQueryAMI.period
period
Definition: AtlRunQueryAMI.py:225
xAOD::EventInfo_v1::eventNumber
uint64_t eventNumber() const
The current event's event number.
ST::SUSYObjDef_xAOD
Definition: SUSYObjDef_xAOD.h:141
SG::Accessor< int >
CP::CorrectionCode::enableFailure
static void enableFailure() noexcept
Definition: CorrectionCode.h:64
xAOD::TEvent::kAthenaAccess
@ kAthenaAccess
Access containers/objects like Athena does.
Definition: Control/xAODRootAccess/xAODRootAccess/TEvent.h:101
TruthParticleContainer.h
SUSYObjDef_xAOD.h
ANA_CHECK
#define ANA_CHECK(EXP)
check whether the given expression was successful
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:324
xAODTruthHelpers.h
xAOD::EventInfo_v1::runNumber
uint32_t runNumber() const
The current event's run number.
TruthParticleAuxContainer.h
POOL::TEvent::kAthenaAccess
@ kAthenaAccess
Definition: PhysicsAnalysis/POOLRootAccess/POOLRootAccess/TEvent.h:47
POOL::TEvent::readFrom
StatusCode readFrom(TFile *file)
Definition: PhysicsAnalysis/POOLRootAccess/src/TEvent.cxx:133
FortranAlgorithmOptions.fileName
fileName
Definition: FortranAlgorithmOptions.py:13
event
POOL::TEvent event(POOL::TEvent::kClassAccess)
lumiFormat.i
int i
Definition: lumiFormat.py:85
POOL::TEvent::getEntries
long getEntries()
Definition: PhysicsAnalysis/POOLRootAccess/src/TEvent.cxx:124
LArCellNtuple.argv
argv
Definition: LArCellNtuple.py:152
APP_NAME
#define APP_NAME
Definition: BoostedXbbTag.cxx:23
TEvent.h
Init.h
DQHistogramMergeRegExp.argc
argc
Definition: DQHistogramMergeRegExp.py:20
main
int main(int argc, char *argv[])
Definition: SUSYTruthTester.cxx:42
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
POOL::TEvent
Definition: PhysicsAnalysis/POOLRootAccess/POOLRootAccess/TEvent.h:40
TEvent.h
debug
const bool debug
Definition: MakeUncertaintyPlots.cxx:53
EventInfo.h
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
xAOD::TStore
A relatively simple transient store for objects created in analysis.
Definition: TStore.h:44
ST::SUSYObjDef_xAOD::FindSusyHP
StatusCode FindSusyHP(int &pdgid1, int &pdgid2) const
Definition: Truth.cxx:75
ANA_CHECK_SET_TYPE
#define ANA_CHECK_SET_TYPE(TYPE)
set the type for ANA_CHECK to report failures
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:314
POOL::TEvent::retrieve
StatusCode retrieve(const T *&obj)
Definition: PhysicsAnalysis/POOLRootAccess/POOLRootAccess/TEvent.h:74
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
entries
double entries
Definition: listroot.cxx:49
CxxUtils::atoi
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
Definition: Control/CxxUtils/Root/StringUtils.cxx:85
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
CorrectionCode.h
IParticleHelpers.h
LArCellNtuple.ifile
string ifile
Definition: LArCellNtuple.py:133
TruthEventContainer.h
TStore.h
xAOD::TEvent
Tool for accessing xAOD files outside of Athena.
Definition: Control/xAODRootAccess/xAODRootAccess/TEvent.h:84
TruthEvent.h
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37