ATLAS Offline Software
AANT_Tools.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // Header include
10 
11 
12 #include <iostream>
13 #include <vector>
14 
15 
16 #include "TH1D.h"
17 #include "TNtuple.h"
18 #include "TTree.h"
19 #include "TROOT.h"
20 //-------------------------------------------------
21 
22 using namespace std;
23 
24 namespace VKalVrtAthena {
25 
26  //____________________________________________________________________________________________________
27  StatusCode VrtSecInclusive::setupNtupleVariables() {
28 
29  m_ntupleVars->addNewVar<unsigned int> ( "RunNumber" );
30  m_ntupleVars->addNewVar<unsigned int> ( "Event" );
31  m_ntupleVars->addNewVar<unsigned int> ( "Time" );
32  m_ntupleVars->addNewVar<unsigned int> ( "LumiBlock" );
33  m_ntupleVars->addNewVar<unsigned int> ( "BCID" );
34  m_ntupleVars->addNewVar<unsigned int> ( "LVL1ID" );
35 
36  m_ntupleVars->addNewVar<unsigned int> ( "NumAllTrks" );
37  m_ntupleVars->addNewVar<unsigned int> ( "NumSelTrks" );
38  m_ntupleVars->addNewVar<unsigned int> ( "SizeIncomp" );
39 
40  m_ntupleVars->addNewVar<unsigned int> ( "NumPV" );
41  m_ntupleVars->addNewVar<unsigned int> ( "NTrksPV" );
42  m_ntupleVars->addNewVar<unsigned int> ( "PVType" );
43  m_ntupleVars->addNewVar<double> ( "PVX" );
44  m_ntupleVars->addNewVar<double> ( "PVY" );
45  m_ntupleVars->addNewVar<double> ( "PVZ" );
46 
47  m_ntupleVars->addNewVar< vector<int> > ( "NdofTrksPV" );
48  m_ntupleVars->addNewVar< vector<double> > ( "PVZpile" );
49 
50  m_ntupleVars->addNewVar< vector<int> > ( "RecoTrk_id" );
51  m_ntupleVars->addNewVar< vector<double> > ( "RecoTrk_pT" );
52  m_ntupleVars->addNewVar< vector<double> > ( "RecoTrk_2dIPPV" );
53  m_ntupleVars->addNewVar< vector<double> > ( "RecoTrk_ZIPPV" );
54  m_ntupleVars->addNewVar< vector<double> > ( "RecoTrk_2dIP" );
55  m_ntupleVars->addNewVar< vector<double> > ( "RecoTrk_ZIP" );
56  m_ntupleVars->addNewVar< vector<double> > ( "RecoTrk_phi" );
57  m_ntupleVars->addNewVar< vector<double> > ( "RecoTrk_eta" );
58  m_ntupleVars->addNewVar< vector<double> > ( "RecoTrk_chi2" );
59  m_ntupleVars->addNewVar< vector<double> > ( "RecoTrk_eta" );
60  m_ntupleVars->addNewVar< vector<int> > ( "RecoTrk_BLayHits" );
61  m_ntupleVars->addNewVar< vector<int> > ( "RecoTrk_PixHits" );
62  m_ntupleVars->addNewVar< vector<int> > ( "RecoTrk_SCTHits" );
63  m_ntupleVars->addNewVar< vector<int> > ( "RecoTrk_TRTHits" );
64  m_ntupleVars->addNewVar< vector<int> > ( "RecoTrk_PixBar1" );
65  m_ntupleVars->addNewVar< vector<int> > ( "RecoTrk_PixBar2" );
66  m_ntupleVars->addNewVar< vector<int> > ( "RecoTrk_barcode" ); // FIXME barcode-based
67  m_ntupleVars->addNewVar< vector<double> > ( "RecoTrk_matchPr" );
68  m_ntupleVars->addNewVar< vector<double> > ( "RecoTrk_2dIPErr" );
69  m_ntupleVars->addNewVar< vector<double> > ( "RecoTrk_ZIPErr" );
70  m_ntupleVars->addNewVar< vector<int> > ( "RecoTrk_PixShare" );
71  m_ntupleVars->addNewVar< vector<int> > ( "RecoTrk_SCTShare" );
72  m_ntupleVars->addNewVar< vector<int> > ( "RecoTrk_TrkAuth" );
73  m_ntupleVars->addNewVar< vector<int> > ( "RecoTrk_TrkLowPt" );
74 
75  m_ntupleVars->addNewVar< vector<int> > ( "SelTrk_barcode" ); // FIXME barcode-based
76 
77  m_ntupleVars->addNewVar< vector<int> > ( "SVTrk_id" );
78  m_ntupleVars->addNewVar< vector<double> > ( "SVTrk_pT" );
79  m_ntupleVars->addNewVar< vector<double> > ( "SVTrk_p" );
80  m_ntupleVars->addNewVar< vector<double> > ( "SVTrk_phi" );
81  m_ntupleVars->addNewVar< vector<double> > ( "SVTrk_eta" );
82  m_ntupleVars->addNewVar< vector<double> > ( "SVTrk_2dIP" );
83  m_ntupleVars->addNewVar< vector<double> > ( "SVTrk_ZIP" );
84  m_ntupleVars->addNewVar< vector<double> > ( "SVTrk_delp" );
85  m_ntupleVars->addNewVar< vector<double> > ( "SVTrk_del2dIP" );
86  m_ntupleVars->addNewVar< vector<double> > ( "SVTrk_delzIP" );
87  m_ntupleVars->addNewVar< vector<double> > ( "SVTrk_eta" );
88  m_ntupleVars->addNewVar< vector<int> > ( "SVTrk_BLayHits" );
89  m_ntupleVars->addNewVar< vector<int> > ( "SVTrk_PixHits" );
90  m_ntupleVars->addNewVar< vector<int> > ( "SVTrk_SCTHits" );
91  m_ntupleVars->addNewVar< vector<int> > ( "SVTrk_TRTHits" );
92  m_ntupleVars->addNewVar< vector<int> > ( "SVTrk_barcode" ); // FIXME barcode-based
93  m_ntupleVars->addNewVar< vector<double> > ( "SVTrk_matchPr" );
94  m_ntupleVars->addNewVar< vector<int> > ( "SVTrk_TrkAuth" );
95  m_ntupleVars->addNewVar< vector<int> > ( "SVTrk_TrkLowPt" );
96 
97  m_ntupleVars->addNewVar< unsigned int > ( "All2TrkVrtNum" );
98  m_ntupleVars->addNewVar< vector<double> > ( "All2TrkVrtMass" );
99  m_ntupleVars->addNewVar< vector<double> > ( "All2TrkVrtPt" );
100  m_ntupleVars->addNewVar< vector<int> > ( "All2TrkVrtCharge" );
101  m_ntupleVars->addNewVar< vector<int> > ( "All2TrkSumBLHits" );
102  m_ntupleVars->addNewVar< vector<double> > ( "All2TrkVrtX" );
103  m_ntupleVars->addNewVar< vector<double> > ( "All2TrkVrtY" );
104  m_ntupleVars->addNewVar< vector<double> > ( "All2TrkVrtZ" );
105  m_ntupleVars->addNewVar< vector<double> > ( "All2TrkVrtChiSq" );
106 
107  m_ntupleVars->addNewVar< unsigned int > ( "AfFakVrtNum" );
108  m_ntupleVars->addNewVar< vector<double> > ( "AfFakVrtMass" );
109  m_ntupleVars->addNewVar< vector<double> > ( "AfFakVrtPt" );
110  m_ntupleVars->addNewVar< vector<int> > ( "AfFakVrtCharge" );
111  m_ntupleVars->addNewVar< vector<double> > ( "AfFakVrtX" );
112  m_ntupleVars->addNewVar< vector<double> > ( "AfFakVrtY" );
113  m_ntupleVars->addNewVar< vector<double> > ( "AfFakVrtZ" );
114  m_ntupleVars->addNewVar< vector<double> > ( "AfFakVrtChiSq" );
115 
116  m_ntupleVars->addNewVar< unsigned int > ( "NumInitSecVrt" );
117  m_ntupleVars->addNewVar< unsigned int > ( "NumRearrSecVrt" );
118  m_ntupleVars->addNewVar< unsigned int > ( "NumSecVrt" );
119  m_ntupleVars->addNewVar< vector<double> > ( "SecVtxX" );
120  m_ntupleVars->addNewVar< vector<double> > ( "SecVtxY" );
121  m_ntupleVars->addNewVar< vector<double> > ( "SecVtxZ" );
122  m_ntupleVars->addNewVar< vector<int> > ( "SecVtx_NumTrks" );
123  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_Mass" );
124  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_Mass_electron" );
125  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_Chi2" );
126  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_pT" );
127  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_pZ" );
128  m_ntupleVars->addNewVar< vector<int> > ( "SecVtx_Charge" );
129  m_ntupleVars->addNewVar< vector<int> > ( "SecVtx_SumBLayHits" );
130  m_ntupleVars->addNewVar< vector<int> > ( "SecVtx_AllTrksBLayHits" );
131  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_MinOpAng" );
132 
133  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_TrkPt" );
134  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_TrkPhi" );
135  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_TrkEta" );
136  m_ntupleVars->addNewVar< vector<int> > ( "SecVtx_TrkBLay" );
137  m_ntupleVars->addNewVar< vector<int> > ( "SecVtx_TrkPixExclBLay" );
138  m_ntupleVars->addNewVar< vector<int> > ( "SecVtx_TrkSCT" );
139  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_Trk2dIP" );
140  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_TrkZIP" );
141  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_TrkdelP" );
142  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_Trkdel2dIP" );
143  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_TrkdelZIP" );
144  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_TrkPtWrtSV" );
145  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_TrkPhiWrtSV" );
146  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_TrkEtaWrtSV" );
147  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_Trk2dIPWrtSV" );
148  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_TrkZIPWrtSV" );
149  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_TrkdelPWrtSV" );
150  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_Trkdel2dIPWrtSV" );
151  m_ntupleVars->addNewVar< vector<double> > ( "SecVtx_TrkdelZIPWrtSV" );
152 
153  m_ntupleVars->addNewVar<double> ( "Truth_SV1X" );
154  m_ntupleVars->addNewVar<double> ( "Truth_SV1Y" );
155  m_ntupleVars->addNewVar<double> ( "Truth_SV1Z" );
156  m_ntupleVars->addNewVar<double> ( "Truth_PiEta" );
157  m_ntupleVars->addNewVar<double> ( "Truth_PiPhi" );
158  m_ntupleVars->addNewVar<double> ( "Truth_PiPt" );
159  m_ntupleVars->addNewVar<int> ( "Truth_PiInt" );
160  m_ntupleVars->addNewVar<int> ( "Truth_nSVHiPt" );
161  m_ntupleVars->addNewVar<int> ( "Truth_nSVLoPt" );
162  m_ntupleVars->addNewVar<int> ( "Truth_nSVGe1HiPt" );
163 
164  m_ntupleVars->addNewVar< vector<int> > ( "Truth_AllVtxType" );
165  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllSVX" );
166  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllSVY" );
167  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllSVZ" );
168  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllSVTrk1Pt" );
169  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllSVTrk2Pt" );
170  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllSVTrk3Pt" );
171  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllSVTrk4Pt" );
172  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllSVTrk5Pt" );
173  m_ntupleVars->addNewVar< vector<int> > ( "Truth_AllSVNumTrks" );
174  m_ntupleVars->addNewVar< vector<int> > ( "Truth_AllSVNumReTrks" );
175  m_ntupleVars->addNewVar< vector<int> > ( "Truth_AllSVCharge" );
176  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllSVSumTrksPt" );
177  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllSVSumTrksPz" );
178  m_ntupleVars->addNewVar< vector<int> > ( "Truth_AllSVHasLifetime" );
179  m_ntupleVars->addNewVar< vector<int> > ( "Truth_AllSVStrangeBaryon" );
180  m_ntupleVars->addNewVar< vector<int> > ( "Truth_AllSVIncomingPid" );
181  m_ntupleVars->addNewVar< vector<int> > ( "Truth_AllSVNumIncident" );
182  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllSVPtIncident" );
183  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllSVPzIncident" );
184  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllSVMinOpAng" );
185 
186  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllTrk2dIP" );
187  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllTrkZIP" );
188  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllTrkPt" );
189  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllTrkEta" );
190  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllTrkPhi" );
191  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllTrkR" );
192  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllTrkZ" );
193  m_ntupleVars->addNewVar< vector<int> > ( "Truth_AllTrkBC" );
194 
195  m_ntupleVars->addNewVar< vector<int> > ( "Truth_AllRefitSt" );
196  m_ntupleVars->addNewVar< vector<int> > ( "Truth_AllRefitNTrk" );
197  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllRefitChi2" );
198  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllRefitSVX" );
199  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllRefitSVY" );
200  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllRefitSVZ" );
201  m_ntupleVars->addNewVar< vector<double> > ( "Truth_AllRefitMass" );
202 
203  return StatusCode::SUCCESS;
204  }
205 
206 
207  //____________________________________________________________________________________________________
208  StatusCode VrtSecInclusive::deleteNtupleVariables() {
209 
210  m_ntupleVars->deleteNtupleVariables();
211 
212  return StatusCode::SUCCESS;
213  }
214 
215 
216  //____________________________________________________________________________________________________
217  StatusCode VrtSecInclusive::setupNtuple() {
218 
219  m_ntupleVars->branchNtuple( m_tree_Vert );
220 
221  return StatusCode::SUCCESS;
222  }
223 
224 
225  //____________________________________________________________________________________________________
226  StatusCode VrtSecInclusive::clearNtupleVariables() {
227 
228  m_ntupleVars->clear();
229 
230  return StatusCode::SUCCESS;
231  }
232 
233 
234  //____________________________________________________________________________________________________
235  StatusCode VrtSecInclusive::addEventInfo() {
236  // add event level variables
237  //
238  ATH_MSG_DEBUG( " > addEventInfo: in addEventInfo");
239 
240  // this code has been taken from AnalysisExamples/VFitZmmOnAOD
241  //
242  //get EventInfo for run and event number
243 
244  const xAOD::EventInfo* eventInfo;
245  ATH_CHECK( evtStore()->retrieve(eventInfo) );
246 
247  //
248  //m_ntupleVars->m_runNumber = eventInfo->runNumber();
249  m_ntupleVars->get<unsigned int>( "RunNumber" ) = eventInfo->runNumber();
250  m_ntupleVars->get<unsigned int>( "Event") = eventInfo->eventNumber();
251  m_ntupleVars->get<unsigned int>( "Time" ) = eventInfo->timeStamp() ;
252  m_ntupleVars->get<unsigned int>( "LumiBlock" ) = eventInfo->lumiBlock() ;
253  m_ntupleVars->get<unsigned int>( "BCID" ) = eventInfo->bcid();
254 
255  ATH_MSG_DEBUG( " > addEventInfo: event "<< m_ntupleVars->get<unsigned int>( "Event" ) );
256 
257  return StatusCode::SUCCESS;
258  }
259 
260 
261  //____________________________________________________________________________________________________
262  StatusCode VrtSecInclusive::fillAANT_SelectedBaseTracks() {
263 
264  for ( const xAOD::TrackParticle* trk : *m_selectedTracks ) {
265 
266  if( m_jp.FillNtuple ) {
267  uint8_t tmpT;
268  if( !(trk->summaryValue(tmpT,xAOD::numberOfPixelHits)) ) tmpT=0;
269  m_ntupleVars->get< vector<int> >( "SVTrk_PixHits" ).emplace_back( (int) tmpT);
270 
271  if( !(trk->summaryValue(tmpT,xAOD::numberOfSCTHits)) ) tmpT=0;
272  m_ntupleVars->get< vector<int> >( "SVTrk_SCTHits" ).emplace_back( (int) tmpT);
273 
274  if( !(trk->summaryValue(tmpT,xAOD::numberOfTRTHits)) ) tmpT=0;
275  m_ntupleVars->get< vector<int> >( "SVTrk_TRTHits" ).emplace_back( (int) tmpT);
276 
277  if( !(trk->summaryValue(tmpT,xAOD::numberOfInnermostPixelLayerHits)) ) tmpT=0;
278  m_ntupleVars->get< vector<int> >( "SVTrk_BLayHits" ).emplace_back( (int) tmpT);
279  }
280 
281 
282  //
283  // get perigee params
284  //
285  const auto& perigee = trk->perigeeParameters();
286 
287  if( m_jp.FillNtuple ) {
288 
289  double phi = perigee.parameters()[Trk::phi];
290  double theta = perigee.parameters()[Trk::theta];
291  double d0 = perigee.parameters()[Trk::d0];
292  double qOverP = perigee.parameters()[Trk::qOverP];
293  double errqOverP = (*(perigee.covariance()))(Trk::qOverP,Trk::qOverP);
294  double errd0 = (*(perigee.covariance()))(Trk::d0,Trk::d0);
295  double ptrk = (1./qOverP);
296  double pT = ptrk*sin(theta);
297  double trketa = -1.*log( tan(theta/2) );
298 
299  // here we have to look at the original recotrack id to establish cross-link
300  // between "SVTrk" vars and "RecoTrk" vars:
301  static const SG::ConstAccessor<unsigned long> trk_idAcc("trk_id");
302  m_ntupleVars->get< vector<int> >( "SVTrk_id" ) .emplace_back( trk_idAcc(*trk) );
303 
304  m_ntupleVars->get< vector<double> >( "SVTrk_pT" ) .emplace_back(pT);
305  m_ntupleVars->get< vector<double> >( "SVTrk_p" ) .emplace_back(ptrk);
306  m_ntupleVars->get< vector<double> >( "SVTrk_phi" ) .emplace_back(phi);
307  m_ntupleVars->get< vector<double> >( "SVTrk_eta" ) .emplace_back(trketa);
308  m_ntupleVars->get< vector<double> >( "SVTrk_2dIP" ) .emplace_back(d0);
309  m_ntupleVars->get< vector<double> >( "SVTrk_ZIP" ) .emplace_back(perigee.parameters()[Trk::z0]);
310 
311  double matchProb = -1;
312  int barcode = 0; // FIXME barcode-based
313  if(m_jp.doTruth)
314  {
315  const xAOD::TruthParticle* aTemp_truth = getTrkGenParticle( trk );
316  if( aTemp_truth )
317  {
318  barcode = HepMC::barcode(aTemp_truth); // FIXME barcode-based
319  static const SG::ConstAccessor<float> truthMatchProbabilityAcc( "truthMatchProbability" );
320  matchProb= truthMatchProbabilityAcc( *trk );
321  }
322  }
323 
324  m_ntupleVars->get< vector<int> >( "SVTrk_barcode" ) .emplace_back( barcode ); // FIXME barcode-based
325  m_ntupleVars->get< vector<double> >( "SVTrk_matchPr" ) .emplace_back( matchProb );
326 
327  ATH_MSG_DEBUG(" > fillAANT_SelectedBaseTracks: Sel Trk d0/pT/eta/match bc/pr "
328  << d0 << ","
329  << pT << ","
330  << trketa << ","
331  << barcode << "," // FIXME barcode-based
332  << matchProb );
333 
334  double errp = ptrk*ptrk*errqOverP;
335 
336  m_ntupleVars->get< vector<double> >( "SVTrk_delp" ) .emplace_back( errp );
337  m_ntupleVars->get< vector<double> >( "SVTrk_del2dIP" ) .emplace_back( errd0 );
338  m_ntupleVars->get< vector<double> >( "SVTrk_delzIP" ) .emplace_back( (*(perigee.covariance()))(Trk::z0,Trk::z0) );
339 
340  }
341 
342 
343  } // end of selected tracks
344 
345  return StatusCode::SUCCESS;
346  }
347 
348 
349  //____________________________________________________________________________________________________
350  StatusCode VrtSecInclusive::fillAANT_SecondaryVertices( xAOD::VertexContainer *vertices ) {
351 
352  // Loop over vertices
353  for( xAOD::Vertex *vertex : *vertices ) {
354 
355  // Track Loop
356  for(size_t itrk=0; itrk<vertex->nTrackParticles(); itrk++) {
357 
358  // Here trk is not const - will augment SV perigee variables in the loop.
359  const xAOD::TrackParticle* trk = vertex->trackParticle( itrk );
360 
361  //
362  // add variables for each track into ntuple
363  // Add all vertices to same ntuple, and extract later in root macro
364  //
365  m_ntupleVars->get< vector<double> >( "SecVtx_TrkPt" ) .emplace_back( trk->pt() );
366  m_ntupleVars->get< vector<double> >( "SecVtx_TrkPhi" ) .emplace_back( trk->phi() );
367  m_ntupleVars->get< vector<double> >( "SecVtx_TrkEta" ) .emplace_back( trk->eta() );
368  m_ntupleVars->get< vector<double> >( "SecVtx_Trk2dIP" ) .emplace_back( trk->d0() );
369  m_ntupleVars->get< vector<double> >( "SecVtx_TrkZIP" ) .emplace_back( trk->z0() );
370  m_ntupleVars->get< vector<double> >( "SecVtx_Trkdel2dIP" ) .emplace_back( trk->definingParametersCovMatrix()(Trk::d0, Trk::d0) );
371  m_ntupleVars->get< vector<double> >( "SecVtx_TrkdelZIP" ) .emplace_back( trk->definingParametersCovMatrix()(Trk::z0, Trk::z0) );
372 
373  track_summary trk_summary;
374  fillTrackSummary( trk_summary, trk );
375 
376  m_ntupleVars->get< vector<int> >( "SecVtx_TrkBLay" ) .emplace_back( trk_summary.numIBLHits );
377  m_ntupleVars->get< vector<int> >( "SecVtx_TrkPixExclBLay" ) .emplace_back( trk_summary.numPixelHits - trk_summary.numIBLHits );
378  m_ntupleVars->get< vector<int> >( "SecVtx_TrkSCT" ) .emplace_back( trk_summary.numSctHits );
379 
380  static const SG::ConstAccessor<float> pt_wrtSVAcc("pt_wrtSV");
381  static const SG::ConstAccessor<float> eta_wrtSVAcc("eta_wrtSV");
382  static const SG::ConstAccessor<float> phi_wrtSVAcc("phi_wrtSV");
383  static const SG::ConstAccessor<float> d0_wrtSVAcc("d0_wrtSV");
384  static const SG::ConstAccessor<float> z0_wrtSVAcc("z0_wrtSV");
385  static const SG::ConstAccessor<float> errP_wrtSVAcc("errP_wrtSV");
386  static const SG::ConstAccessor<float> errd0_wrtSVAcc("errd0_wrtSV");
387  static const SG::ConstAccessor<float> errz0_wrtSVAcc("errz0_wrtSV");
388  ATH_MSG_VERBOSE(" >> fillAANT_SecondaryVertices : filling track vars wrt. SV");
389  if( pt_wrtSVAcc.isAvailable(*trk) &&
390  eta_wrtSVAcc.isAvailable(*trk) &&
391  phi_wrtSVAcc.isAvailable(*trk) &&
392  d0_wrtSVAcc.isAvailable(*trk) &&
393  z0_wrtSVAcc.isAvailable(*trk) &&
394  errP_wrtSVAcc.isAvailable(*trk) &&
395  errd0_wrtSVAcc.isAvailable(*trk) &&
396  errz0_wrtSVAcc.isAvailable(*trk) ) {
397 
398  m_ntupleVars->get< vector<double> >( "SecVtx_TrkPtWrtSV" ) .emplace_back( pt_wrtSVAcc(*trk) );
399  m_ntupleVars->get< vector<double> >( "SecVtx_TrkEtaWrtSV" ) .emplace_back( eta_wrtSVAcc(*trk) );
400  m_ntupleVars->get< vector<double> >( "SecVtx_TrkPhiWrtSV" ) .emplace_back( phi_wrtSVAcc(*trk) );
401  m_ntupleVars->get< vector<double> >( "SecVtx_Trk2dIPWrtSV" ) .emplace_back( d0_wrtSVAcc(*trk) );
402  m_ntupleVars->get< vector<double> >( "SecVtx_TrkZIPWrtSV" ) .emplace_back( z0_wrtSVAcc(*trk) );
403  m_ntupleVars->get< vector<double> >( "SecVtx_TrkdelPWrtSV" ) .emplace_back( errP_wrtSVAcc(*trk) );
404  m_ntupleVars->get< vector<double> >( "SecVtx_Trkdel2dIPWrtSV" ) .emplace_back( errd0_wrtSVAcc(*trk) );
405  m_ntupleVars->get< vector<double> >( "SecVtx_TrkdelZIPWrtSV" ) .emplace_back( errz0_wrtSVAcc(*trk) );
406 
407  } else {
408 
409  ATH_MSG_VERBOSE(" >> fillAANT_SecondaryVertices : filling track vars wrt. SV (invalid values)");
410 
411  m_ntupleVars->get< vector<double> >( "SecVtx_TrkPtWrtSV" ) .emplace_back( AlgConsts::invalidFloat );
412  m_ntupleVars->get< vector<double> >( "SecVtx_TrkEtaWrtSV" ) .emplace_back( AlgConsts::invalidFloat );
413  m_ntupleVars->get< vector<double> >( "SecVtx_TrkPhiWrtSV" ) .emplace_back( AlgConsts::invalidFloat );
414  m_ntupleVars->get< vector<double> >( "SecVtx_Trk2dIPWrtSV" ) .emplace_back( AlgConsts::invalidFloat );
415  m_ntupleVars->get< vector<double> >( "SecVtx_TrkZIPWrtSV" ) .emplace_back( AlgConsts::invalidFloat );
416  m_ntupleVars->get< vector<double> >( "SecVtx_TrkdelPWrtSV" ) .emplace_back( AlgConsts::invalidFloat );
417  m_ntupleVars->get< vector<double> >( "SecVtx_Trkdel2dIPWrtSV" ) .emplace_back( AlgConsts::invalidFloat );
418  m_ntupleVars->get< vector<double> >( "SecVtx_TrkdelZIPWrtSV" ) .emplace_back( AlgConsts::invalidFloat );
419 
420  }
421 
422  } // loop over tracks in vertex
423 
424  ATH_MSG_DEBUG(" >> fillAANT_SecondaryVertices : Track loop end. ");
425 
426  ATH_MSG_VERBOSE(" >> fillAANT_SecondaryVertices : filling vertex vars");
427 
428  static const SG::ConstAccessor<float> massAcc("mass");
429  static const SG::ConstAccessor<float> mass_eAcc("mass_e");
430  static const SG::ConstAccessor<float> pTAcc("pT");
431  static const SG::ConstAccessor<float> pzAcc("pz");
432  static const SG::ConstAccessor<float> vtx_chargeAcc("vtx_charge");
433  static const SG::ConstAccessor<float> sumBLayHitsAcc("sumBLayHits");
434  static const SG::ConstAccessor<float> allTrksBLayHitsAcc("allTrksBLayHits");
435  static const SG::ConstAccessor<float> minOpAngAcc("minOpAng");
436 
437  m_ntupleVars->get< vector<int> >( "SecVtx_NumTrks" ) .emplace_back( vertex->nTrackParticles() );
438  m_ntupleVars->get< vector<double> >( "SecVtx_Chi2" ) .emplace_back( vertex->chiSquared() );
439  m_ntupleVars->get< vector<double> >( "SecVtxX" ) .emplace_back( vertex->x() );
440  m_ntupleVars->get< vector<double> >( "SecVtxY" ) .emplace_back( vertex->y() );
441  m_ntupleVars->get< vector<double> >( "SecVtxZ" ) .emplace_back( vertex->z() );
442  m_ntupleVars->get< vector<double> >( "SecVtx_Mass" ) .emplace_back( massAcc.withDefault(*vertex, AlgConsts::invalidFloat) );
443  m_ntupleVars->get< vector<double> >( "SecVtx_Mass_electron" ) .emplace_back( mass_eAcc.withDefault(*vertex, AlgConsts::invalidFloat) );
444  m_ntupleVars->get< vector<double> >( "SecVtx_pT" ) .emplace_back( pTAcc.withDefault(*vertex, AlgConsts::invalidFloat) );
445  m_ntupleVars->get< vector<double> >( "SecVtx_pZ" ) .emplace_back( pzAcc.withDefault(*vertex, AlgConsts::invalidFloat) );
446  m_ntupleVars->get< vector<int> >( "SecVtx_Charge" ) .emplace_back( vtx_chargeAcc.withDefault(*vertex, AlgConsts::invalidFloat) );
447  m_ntupleVars->get< vector<int> >( "SecVtx_SumBLayHits" ) .emplace_back( sumBLayHitsAcc.withDefault(*vertex, AlgConsts::invalidFloat) );
448  m_ntupleVars->get< vector<int> >( "SecVtx_AllTrksBLayHits" ) .emplace_back( allTrksBLayHitsAcc.withDefault(*vertex, AlgConsts::invalidFloat) );
449  m_ntupleVars->get< vector<double> >( "SecVtx_MinOpAng" ) .emplace_back( minOpAngAcc.withDefault(*vertex, AlgConsts::invalidFloat) );
450 
451 
452  } // loop over vertices
453 
454  return StatusCode::SUCCESS;
455  }
456 
457 } // end of namespace VKalVrtAthena
458 
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::TrackParticle_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: TrackParticle_v1.cxx:73
CalculateHighPtTerm.pT
pT
Definition: ICHEP2016/CalculateHighPtTerm.py:57
VKalVrtAthena::VrtSecInclusive::track_summary_properties::numIBLHits
uint8_t numIBLHits
Definition: VrtSecInclusive.h:493
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:575
xAOD::EventInfo_v1::eventNumber
uint64_t eventNumber() const
The current event's event number.
xAOD::TrackParticle_v1::eta
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Definition: TrackParticle_v1.cxx:77
theta
Scalar theta() const
theta method
Definition: AmgMatrixBasePlugin.h:71
xAOD::TrackParticle_v1::z0
float z0() const
Returns the parameter.
Trk::z0
@ z0
Definition: ParamDefs.h:70
VKalVrtAthena::VrtSecInclusive::track_summary_properties
Definition: VrtSecInclusive.h:492
xAOD::numberOfPixelHits
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:259
xAOD::numberOfTRTHits
@ numberOfTRTHits
number of TRT hits [unit8_t].
Definition: TrackingPrimitives.h:275
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:54
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
InDetAccessor::qOverP
@ qOverP
perigee
Definition: InDetAccessor.h:35
NtupleVars.h
xAOD::TrackParticle_v1::d0
float d0() const
Returns the parameter.
xAOD::EventInfo_v1::runNumber
uint32_t runNumber() const
The current event's run number.
VrtSecInclusive.h
VKalVrtAthena
Definition: AANT_Tools.cxx:24
Trk::theta
@ theta
Definition: ParamDefs.h:72
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
HepMC::barcode
int barcode(const T *p)
Definition: Barcode.h:16
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:41
TRT::Track::d0
@ d0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:62
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
xAOD::EventInfo_v1::lumiBlock
uint32_t lumiBlock() const
The current event's luminosity block number.
xAOD::TrackParticle_v1::definingParametersCovMatrix
const ParametersCovMatrix_t definingParametersCovMatrix() const
Returns the 5x5 symmetric matrix containing the defining parameters covariance matrix.
Definition: TrackParticle_v1.cxx:246
VKalVrtAthena::VrtSecInclusive::track_summary_properties::numSctHits
uint8_t numSctHits
Definition: VrtSecInclusive.h:510
Trk::d0
@ d0
Definition: ParamDefs.h:69
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
VKalVrtAthena::AlgConsts::invalidFloat
constexpr double invalidFloat
Definition: Reconstruction/VKalVrt/VrtSecInclusive/VrtSecInclusive/Constants.h:23
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
Trk::qOverP
@ qOverP
perigee
Definition: ParamDefs.h:73
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
xAOD::EventInfo_v1::timeStamp
uint32_t timeStamp() const
POSIX time in seconds from 1970. January 1st.
xAOD::numberOfSCTHits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
Definition: TrackingPrimitives.h:268
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
Trk::phi
@ phi
Definition: ParamDefs.h:81
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
xAOD::EventInfo_v1::bcid
uint32_t bcid() const
The bunch crossing ID of the event.
IntersectionPos.h
xAOD::TrackParticle_v1::phi
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)
xAOD::numberOfInnermostPixelLayerHits
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
Definition: TrackingPrimitives.h:237
VKalVrtAthena::VrtSecInclusive::track_summary_properties::numPixelHits
uint8_t numPixelHits
Definition: VrtSecInclusive.h:500
SG::ConstAccessor::withDefault
const_reference_type withDefault(const ELT &e, const T &deflt) const
Fetch the variable for one element, as a const reference, with a default.