ATLAS Offline Software
Loading...
Searching...
No Matches
InDetTrackSystsToolTester.cxx File Reference

Go to the source code of this file.

Macros

#define CHECK(ARG)

Functions

int main (int argc, char *argv[])

Macro Definition Documentation

◆ CHECK

#define CHECK ( ARG)
Value:
do { \
const bool result = ARG; \
if( ! result ) { \
::Error( APP_NAME, "Failed to execute: \"%s\"", \
#ARG ); \
return 1; \
} \
} while( false )
#define APP_NAME

Definition at line 43 of file InDetTrackSystsToolTester.cxx.

43#define CHECK( ARG ) \
44 do { \
45 const bool result = ARG; \
46 if( ! result ) { \
47 ::Error( APP_NAME, "Failed to execute: \"%s\"", \
48 #ARG ); \
49 return 1; \
50 } \
51 } while( false )

Function Documentation

◆ main()

int main ( int argc,
char * argv[] )

comment / uncomment these lines to test

Configure and initialise the tool(s):

Definition at line 54 of file InDetTrackSystsToolTester.cxx.

54 {
55
56 // The application's name:
57 const char* APP_NAME = argv[ 0 ];
58 std::string fileName;
59 // Check if we received a file name:
60 if( argc < 2 ) {
61 fileName = std::getenv("ROOTCORE_TEST_FILE");
62 if (fileName.empty()) Error( APP_NAME, "Could not open $ROOTCORE_TEST_FILE" );
63 } else {
64 fileName = argv[ 1 ];
65 }
66
67 StatusCode::enableFailure();
69 StatusCode::enableFailure();
70
71 // Initialise the application:
73
74 // Open the input file:
75 Info( APP_NAME, "Opening file: %s", fileName.data() );
76 std::unique_ptr< TFile > ifile( TFile::Open( fileName.data(), "READ" ) );
77 CHECK( ifile.get() );
78
79 // Create a TEvent object:
80 // xAOD::TEvent event( xAOD::TEvent::kClassAccess );
81 xAOD::TEvent event( xAOD::TEvent::kAthenaAccess ); // at time of writing this is required for the rootcore test file
82 CHECK( event.readFrom( ifile.get() ) );
83 Info( APP_NAME, "Number of events in the file: %i",
84 static_cast< int >( event.getEntries() ) );
85
86 // Create a transient object store. Needed for the tools.
88
89 // Decide how many events to run over:
90 Long64_t entries = event.getEntries();
91 if( argc > 2 ) {
92 const Long64_t e = atoll( argv[ 2 ] );
93 if( e < entries ) {
94 entries = e;
95 }
96 } else {
97 // set maximum to 500
98 if (entries > 500) entries = 500;
99 }
100
101 // Create the tool(s) to test:
102 InDet::InDetTrackSmearingTool smearingTool( "InDetTrackSmearingTool" );
103
104 InDet::InDetTrackBiasingTool biasingTool( "InDetTrackBiasingTool" );
106 // CHECK( biasingTool.setProperty( "isData", true ) ); // override to test, since ROOTCORE_TEST_FILE is simluation
107 // uint32_t testRunNumber = 287000;
108 // CHECK( biasingTool.setProperty( "runNumber", testRunNumber ) ); // this line is only for testing that other files are properly accessible
109
110 InDet::InDetTrackTruthFilterTool filterTool( "InDetTrackFilterTool" );
111 auto originTool = std::make_unique<InDet::InDetTrackTruthOriginTool> ( "InDetTrackTruthOriginTool" );
112 CHECK( originTool->initialize() );
113 ToolHandle< InDet::IInDetTrackTruthOriginTool > trackTruthOriginToolHandle( originTool.get() );
114 CHECK( filterTool.setProperty("trackOriginTool", trackTruthOriginToolHandle) );
115
116 InDet::JetTrackFilterTool jetFilterTool( "JetTrackFilterTool" );
117 CHECK( jetFilterTool.setProperty("trackOriginTool", trackTruthOriginToolHandle) );
118
119 // Not a realistic set of systematics - we just want to make sure they can all be applied without breaking the tools
120 CP::SystematicSet systSet = {
121 CP::SystematicVariation("TRK_RES_D0_MEAS", -1),
122 CP::SystematicVariation("TRK_RES_Z0_MEAS", -1),
123 CP::SystematicVariation("TRK_BIAS_D0_WM"),
124 CP::SystematicVariation("TRK_BIAS_Z0_WM"),
125 CP::SystematicVariation("TRK_BIAS_QOVERP_SAGITTA_WM"),
126 CP::SystematicVariation("TRK_FAKE_RATE_LOOSE"),
127 // CP::SystematicVariation("TRK_FAKE_RATE_TIGHT"), // have to pick one of these, and TIGHT isn't implemented yet
128 CP::SystematicVariation("TRK_EFF_LOOSE_GLOBAL"),
129 CP::SystematicVariation("TRK_EFF_LOOSE_IBL"),
130 CP::SystematicVariation("TRK_EFF_LOOSE_PP0"),
131 CP::SystematicVariation("TRK_EFF_LOOSE_PHYSMODEL"),
132 // CP::SystematicVariation("TRK_EFF_TIGHT_GLOBAL"),
133 // CP::SystematicVariation("TRK_EFF_TIGHT_IBL"),
134 // CP::SystematicVariation("TRK_EFF_TIGHT_PP0"),
135 // CP::SystematicVariation("TRK_EFF_TIGHT_PHYSMODEL"),
136 CP::SystematicVariation("TRK_EFF_LOOSE_TIDE"),
137 CP::SystematicVariation("TRK_FAKE_RATE_LOOSE_TIDE")
138 };
139 std::vector< InDet::InDetTrackSystematicsTool* > tools = {&smearingTool, &biasingTool, &filterTool, &jetFilterTool};
140
143 tool->msg().setLevel( MSG::DEBUG );
144 CHECK( tool->initialize() );
145 auto systCode = tool->applySystematicVariation(systSet);
146 if (systCode != StatusCode::SUCCESS) {
147 Error( APP_NAME, "Failed to apply systematic variation on tool %s", tool->name().data() );
148 return 2;
149 }
150 }
151
152 bool doTIDE = true;
153 std::string jetCollectionName = "AntiKt4EMTopoJets";
154 if ( !event.contains< xAOD::JetContainer >( jetCollectionName ) ) doTIDE = false;
155
156 auto outfile = std::make_unique<TFile>("InDetTrackSystsToolTester.out.root","RECREATE");
157
158 TH1* d0_before = new TH1F("d0_before","original d_{0}",100,-5,5);
159 TH1* z0_before = new TH1F("z0_before","original z_{0}",100,-200,200);
160 TH1* qOverP_before = new TH1F("qOverP_before", "original q/p", 200, -0.05, 0.05);
161 TH1* d0_after = new TH1F("d0_after","d_{0} after",100,-5,5);
162 TH1* z0_after = new TH1F("z0_after","z_{0} after",100,-200,200);
163 TH1* qOverP_after = new TH1F("qOverP_after", "q/p after", 200, -0.05, 0.05);
164 TH1* d0_diff = new TH1F("d0_diff","#delta d_{0}",100,-1.0,1.0);
165 TH1* z0_diff = new TH1F("z0_diff","#delta z_{0}",100,-10.0,10.0);
166 TH1* qOverP_diff = new TH1F("qOverP_diff", "#delta q/p", 200, -1.e-5, 1.e-5);
167
168 bool isSim = true;
169 const xAOD::EventInfo* ei = nullptr;
170 auto sc = event.retrieve( ei, "EventInfo" );
171 if ( ! sc.isSuccess() ) {
172 Error( __func__, "Could not retreive event ahead of time to detect data/MC" );
173 } else {
175 }
176
177
178 int debugN = 8; // number of tracks to print debug output for
179 // Loop over the events:
180 for( Long64_t entry = 0; entry < entries; ++entry ) {
181
182 // Tell the object which entry to look at:
183 event.getEntry( entry );
184
185 // Create a shallow copy of InDetTrackParticles:
186 const xAOD::TrackParticleContainer* ParticlesID = nullptr;
187 CHECK( event.retrieve( ParticlesID , "InDetTrackParticles" ) );
188
189 const xAOD::JetContainer* jets = nullptr;
190 if (doTIDE) {
191 CHECK( event.retrieve( jets, jetCollectionName ) );
192 }
193
195 xAOD::shallowCopy( *ParticlesID );
196 for ( xAOD::TrackParticle* trkCpy : *ParticlesID_shallowCopy.first ) {
197
198 if ( isSim ) {
199 if ( !filterTool.accept(trkCpy) ) continue;
200 }
201 if ( doTIDE && !jetFilterTool.accept( trkCpy, jets ) ) continue;
202
203 auto d0b = trkCpy->d0();
204 auto z0b = trkCpy->z0();
205 auto qOverPb = trkCpy->qOverP();
206
207 if (biasingTool.applyCorrection(*trkCpy) == CP::CorrectionCode::Error) {
208 Error(__func__, "Could not apply bias correction!" );
209 }
210 if (smearingTool.applyCorrection(*trkCpy) == CP::CorrectionCode::Error) {
211 Error(__func__, "Could not apply smearing correction!" );
212 }
213
214 auto d0a = trkCpy->d0();
215 auto z0a = trkCpy->z0();
216 auto qOverPa = trkCpy->qOverP();
217 auto d0d = d0a - d0b;
218 auto z0d = z0a - z0b;
219 auto qOverPd = qOverPa - qOverPb;
220
221 if (debugN > 0) {
222 std::cout << "d0, before/after/diff:\t" << d0b
223 << "/" << d0a << "/" << d0d << std::endl;
224 std::cout << "z0, before/after/diff:\t" << z0b
225 << "/" << z0a << "/" << z0d << std::endl;
226 std::cout << "q/p, before/after/diff:\t" << qOverPb
227 << "/" << qOverPa << "/" << qOverPd << std::endl;
228 --debugN;
229 }
230 if (debugN == 0) {
231 std::cout << "supressing debug output..." << std::endl;
232 --debugN;
233 }
234
235 d0_before->Fill( d0b );
236 z0_before->Fill( z0b );
237 qOverP_before->Fill( qOverPb );
238 d0_after->Fill( d0a );
239 z0_after->Fill( z0a );
240 qOverP_after->Fill( qOverPa );
241 d0_diff->Fill( d0d );
242 z0_diff->Fill( z0d );
243 qOverP_diff->Fill( qOverPd );
244 }
245 }
246
247 outfile->Write();
248
249 // testing smart slimming feature:
251
252 // Return gracefully:
253 return 0;
254}
#define CHECK(ARG)
static Double_t sc
@ Error
Some error happened during the object correction.
static void enableFailure() noexcept
Class to wrap a set of SystematicVariations.
This class biases tracks to emulate systematic distortions of the tracking geometry.
This class selects tracks based on their truth origin.
This class randomly rejects tracks in the core of a jet.
bool eventType(EventType type) const
Check for one particular bitmask value.
@ IS_SIMULATION
true: simulation, false: data
ReadStats & stats()
Access the object belonging to the current thread.
Definition IOStats.cxx:17
static IOStats & instance()
Singleton object accessor.
Definition IOStats.cxx:11
void printSmartSlimmingBranchList(bool autoIncludeLinks=false) const
Print the accessed variables, formatted for smart slimming.
Tool for accessing xAOD files outside of Athena.
@ kAthenaAccess
Access containers/objects like Athena does.
A relatively simple transient store for objects created in analysis.
Definition TStore.h:46
float z0() const
Returns the parameter.
float d0() const
Returns the parameter.
float qOverP() const
Returns the parameter.
double entries
Definition listroot.cxx:49
Error
The different types of error that can be flagged in the L1TopoRDO.
Definition Error.h:16
TestStore store
Definition TestStore.cxx:23
@ Info
Definition ZDCMsg.h:20
TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)
StatusCode Init(const char *appname)
Function initialising ROOT/PyROOT for using the ATLAS EDM.
Definition Init.cxx:31
typename ShallowCopyResult< T >::type ShallowCopyResult_t
Return type of xAOD::shallowCopy.
Definition ShallowCopy.h:68
EventInfo_v1 EventInfo
Definition of the latest event info version.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
ShallowCopyResult_t< T > shallowCopy(const T &cont, const EventContext &ctx)
Create a shallow copy of an existing container.
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
JetContainer_v1 JetContainer
Definition of the current "jet container version".