52 {
53
54
57
58 if( argc < 2 ) {
59 fileName = std::getenv(
"ROOTCORE_TEST_FILE");
61 } else {
63 }
64
65 StatusCode::enableFailure();
67 StatusCode::enableFailure();
68
69
71
72
74 std::unique_ptr< TFile >
ifile( TFile::Open(
fileName.data(),
"READ" ) );
76
77
78
82 static_cast< int >(
event.getEntries() ) );
83
84
86
87
88 Long64_t
entries =
event.getEntries();
89 if( argc > 2 ) {
90 const Long64_t
e = atoll( argv[ 2 ] );
93 }
94 } else {
95
97 }
98
99
101
104
105
106
107
109 auto originTool = std::make_unique<InDet::InDetTrackTruthOriginTool> ( "InDetTrackTruthOriginTool" );
110 CHECK( originTool->initialize() );
111 ToolHandle< InDet::IInDetTrackTruthOriginTool > trackTruthOriginToolHandle( originTool.get() );
112 CHECK( filterTool.setProperty(
"trackOriginTool", trackTruthOriginToolHandle) );
113
115 CHECK( jetFilterTool.setProperty(
"trackOriginTool", trackTruthOriginToolHandle) );
116
117
125
130
131
132
133
136 };
137 std::vector< InDet::InDetTrackSystematicsTool* >
tools = {&smearingTool, &biasingTool, &filterTool, &jetFilterTool};
138
141 tool->msg().setLevel( MSG::DEBUG );
143 auto systCode =
tool->applySystematicVariation(systSet);
144 if (systCode != StatusCode::SUCCESS) {
145 Error(
APP_NAME,
"Failed to apply systematic variation on tool %s",
tool->name().data() );
146 return 2;
147 }
148 }
149
150 bool doTIDE = true;
151 std::string jetCollectionName = "AntiKt4EMTopoJets";
153
154 auto outfile = std::make_unique<TFile>(
"InDetTrackSystsToolTester.out.root",
"RECREATE");
155
156 TH1* d0_before =
new TH1F(
"d0_before",
"original d_{0}",100,-5,5);
157 TH1* z0_before =
new TH1F(
"z0_before",
"original z_{0}",100,-200,200);
158 TH1* qOverP_before =
new TH1F(
"qOverP_before",
"original q/p", 200, -0.05, 0.05);
159 TH1* d0_after =
new TH1F(
"d0_after",
"d_{0} after",100,-5,5);
160 TH1* z0_after =
new TH1F(
"z0_after",
"z_{0} after",100,-200,200);
161 TH1* qOverP_after =
new TH1F(
"qOverP_after",
"q/p after", 200, -0.05, 0.05);
162 TH1* d0_diff =
new TH1F(
"d0_diff",
"#delta d_{0}",100,-1.0,1.0);
163 TH1* z0_diff =
new TH1F(
"z0_diff",
"#delta z_{0}",100,-10.0,10.0);
164 TH1* qOverP_diff =
new TH1F(
"qOverP_diff",
"#delta q/p", 200, -1.e-5, 1.e-5);
165
166 bool isSim = true;
168 auto sc =
event.retrieve( ei,
"EventInfo" );
169 if ( !
sc.isSuccess() ) {
170 Error( __func__,
"Could not retreive event ahead of time to detect data/MC" );
171 } else {
173 }
174
175
176 int debugN = 8;
177
179
180
181 event.getEntry( entry );
182
183
185 CHECK(
event.retrieve( ParticlesID ,
"InDetTrackParticles" ) );
186
188 if (doTIDE) {
189 CHECK(
event.retrieve( jets, jetCollectionName ) );
190 }
191
192 std::pair< xAOD::TrackParticleContainer*, xAOD::ShallowAuxContainer* > ParticlesID_shallowCopy =
xAOD::shallowCopyContainer( *ParticlesID );
194
195 if ( isSim ) {
196 if ( !filterTool.accept(trkCpy) ) continue;
197 }
198 if ( doTIDE && !jetFilterTool.accept( trkCpy, jets ) ) continue;
199
200 auto d0b = trkCpy->d0();
201 auto z0b = trkCpy->z0();
202 auto qOverPb = trkCpy->qOverP();
203
205 Error(__func__,
"Could not apply bias correction!" );
206 }
208 Error(__func__,
"Could not apply smearing correction!" );
209 }
210
211 auto d0a = trkCpy->d0();
212 auto z0a = trkCpy->z0();
213 auto qOverPa = trkCpy->qOverP();
214 auto d0d = d0a - d0b;
215 auto z0d = z0a - z0b;
216 auto qOverPd = qOverPa - qOverPb;
217
218 if (debugN > 0) {
219 std::cout << "d0, before/after/diff:\t" << d0b
220 << "/" << d0a << "/" << d0d << std::endl;
221 std::cout << "z0, before/after/diff:\t" << z0b
222 << "/" << z0a << "/" << z0d << std::endl;
223 std::cout << "q/p, before/after/diff:\t" << qOverPb
224 << "/" << qOverPa << "/" << qOverPd << std::endl;
225 --debugN;
226 }
227 if (debugN == 0) {
228 std::cout << "supressing debug output..." << std::endl;
229 --debugN;
230 }
231
232 d0_before->Fill( d0b );
233 z0_before->Fill( z0b );
234 qOverP_before->Fill( qOverPb );
235 d0_after->Fill( d0a );
236 z0_after->Fill( z0a );
237 qOverP_after->Fill( qOverPa );
238 d0_diff->Fill( d0d );
239 z0_diff->Fill( z0d );
240 qOverP_diff->Fill( qOverPd );
241 }
242
243 delete ParticlesID_shallowCopy.first;
244 delete ParticlesID_shallowCopy.second;
245
246 }
247
249
250
252
253
254 return 0;
255}
@ Error
Some error happened during the object correction.
static void enableFailure() noexcept
Class to wrap a set of SystematicVariations.
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.
static IOStats & instance()
Singleton object accessor.
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.
Error
The different types of error that can be flagged in the L1TopoRDO.
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.
EventInfo_v1 EventInfo
Definition of the latest event info version.
std::pair< std::unique_ptr< T >, std::unique_ptr< ShallowAuxContainer > > shallowCopyContainer(const T &cont, const EventContext &ctx)
Function making a shallow copy of a constant container.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
JetContainer_v1 JetContainer
Definition of the current "jet container version".