53 {
54
55
58
59 if( argc < 2 ) {
60 fileName = std::getenv(
"ROOTCORE_TEST_FILE");
62 } else {
64 }
65
66 StatusCode::enableFailure();
68 StatusCode::enableFailure();
69
70
72
73
75 std::unique_ptr< TFile >
ifile( TFile::Open(
fileName.data(),
"READ" ) );
77
78
79
83 static_cast< int >(
event.getEntries() ) );
84
85
87
88
89 Long64_t
entries =
event.getEntries();
90 if( argc > 2 ) {
91 const Long64_t
e = atoll( argv[ 2 ] );
94 }
95 } else {
96
98 }
99
100
102
105
106
107
108
110 auto originTool = std::make_unique<InDet::InDetTrackTruthOriginTool> ( "InDetTrackTruthOriginTool" );
111 CHECK( originTool->initialize() );
112 ToolHandle< InDet::IInDetTrackTruthOriginTool > trackTruthOriginToolHandle( originTool.get() );
113 CHECK( filterTool.setProperty(
"trackOriginTool", trackTruthOriginToolHandle) );
114
116 CHECK( jetFilterTool.setProperty(
"trackOriginTool", trackTruthOriginToolHandle) );
117
118
126
131
132
133
134
137 };
138 std::vector< InDet::InDetTrackSystematicsTool* >
tools = {&smearingTool, &biasingTool, &filterTool, &jetFilterTool};
139
142 tool->msg().setLevel( MSG::DEBUG );
144 auto systCode =
tool->applySystematicVariation(systSet);
145 if (systCode != StatusCode::SUCCESS) {
146 Error(
APP_NAME,
"Failed to apply systematic variation on tool %s",
tool->name().data() );
147 return 2;
148 }
149 }
150
151 bool doTIDE = true;
152 std::string jetCollectionName = "AntiKt4EMTopoJets";
154
155 auto outfile = std::make_unique<TFile>(
"InDetTrackSystsToolTester.out.root",
"RECREATE");
156
157 TH1* d0_before =
new TH1F(
"d0_before",
"original d_{0}",100,-5,5);
158 TH1* z0_before =
new TH1F(
"z0_before",
"original z_{0}",100,-200,200);
159 TH1* qOverP_before =
new TH1F(
"qOverP_before",
"original q/p", 200, -0.05, 0.05);
160 TH1* d0_after =
new TH1F(
"d0_after",
"d_{0} after",100,-5,5);
161 TH1* z0_after =
new TH1F(
"z0_after",
"z_{0} after",100,-200,200);
162 TH1* qOverP_after =
new TH1F(
"qOverP_after",
"q/p after", 200, -0.05, 0.05);
163 TH1* d0_diff =
new TH1F(
"d0_diff",
"#delta d_{0}",100,-1.0,1.0);
164 TH1* z0_diff =
new TH1F(
"z0_diff",
"#delta z_{0}",100,-10.0,10.0);
165 TH1* qOverP_diff =
new TH1F(
"qOverP_diff",
"#delta q/p", 200, -1.e-5, 1.e-5);
166
167 bool isSim = true;
169 auto sc =
event.retrieve( ei,
"EventInfo" );
170 if ( !
sc.isSuccess() ) {
171 Error( __func__,
"Could not retreive event ahead of time to detect data/MC" );
172 } else {
174 }
175
176
177 int debugN = 8;
178
180
181
182 event.getEntry( entry );
183
184
186 CHECK(
event.retrieve( ParticlesID ,
"InDetTrackParticles" ) );
187
189 if (doTIDE) {
190 CHECK(
event.retrieve( jets, jetCollectionName ) );
191 }
192
196
197 if ( isSim ) {
198 if ( !filterTool.accept(trkCpy) ) continue;
199 }
200 if ( doTIDE && !jetFilterTool.accept( trkCpy, jets ) ) continue;
201
202 auto d0b = trkCpy->
d0();
203 auto z0b = trkCpy->
z0();
204 auto qOverPb = trkCpy->
qOverP();
205
207 Error(__func__,
"Could not apply bias correction!" );
208 }
210 Error(__func__,
"Could not apply smearing correction!" );
211 }
212
213 auto d0a = trkCpy->
d0();
214 auto z0a = trkCpy->
z0();
215 auto qOverPa = trkCpy->
qOverP();
216 auto d0d = d0a - d0b;
217 auto z0d = z0a - z0b;
218 auto qOverPd = qOverPa - qOverPb;
219
220 if (debugN > 0) {
221 std::cout << "d0, before/after/diff:\t" << d0b
222 << "/" << d0a << "/" << d0d << std::endl;
223 std::cout << "z0, before/after/diff:\t" << z0b
224 << "/" << z0a << "/" << z0d << std::endl;
225 std::cout << "q/p, before/after/diff:\t" << qOverPb
226 << "/" << qOverPa << "/" << qOverPd << std::endl;
227 --debugN;
228 }
229 if (debugN == 0) {
230 std::cout << "supressing debug output..." << std::endl;
231 --debugN;
232 }
233
234 d0_before->Fill( d0b );
235 z0_before->Fill( z0b );
236 qOverP_before->Fill( qOverPb );
237 d0_after->Fill( d0a );
238 z0_after->Fill( z0a );
239 qOverP_after->Fill( qOverPa );
240 d0_diff->Fill( d0d );
241 z0_diff->Fill( z0d );
242 qOverP_diff->Fill( qOverPd );
243 }
244 }
245
247
248
250
251
252 return 0;
253}
@ 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.
float z0() const
Returns the parameter.
float d0() const
Returns the parameter.
float qOverP() const
Returns the parameter.
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.
typename ShallowCopyResult< T >::type ShallowCopyResult_t
Return type of xAOD::shallowCopy.
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".