ATLAS Offline Software
T_AnalysisConfig_Tier0.h
Go to the documentation of this file.
1 /* emacs: this is -*- c++ -*- */
23 #ifndef TrigInDetAnalysisExample_T_AnalysisConfig_Tier0_H
24 #define TrigInDetAnalysisExample_T_AnalysisConfig_Tier0_H
25 
26 
30 
35 
36 #include "TTree.h"
37 #include "TFile.h"
38 
39 
40 // McParticleEvent includes
42 
44 #include "AtlasHepMC/GenEvent.h"
45 #include "AtlasHepMC/GenVertex.h"
46 #include "AtlasHepMC/GenParticle.h"
47 
48 #include "EventInfo/EventInfo.h"
49 #include "EventInfo/EventID.h"
51 
52 
53 
55 
57 
63 
64 
65 #include "VxVertex/VxContainer.h"
66 
68 
70 
72 
73 
76 
78 
81 
82 
83 
84 
85 
86 template<typename T>
88 
89 public:
90 
91  // Full constructor: test/reference/selection
92  // - analysisInstanceName: the name of the analysis chain being created
93  // - xxxChainName: the name of the chain to be used as test/reference/selection; must be "StoreGate" in case of direct access to SG containers
94  // - xxxType: the type of tracks to be retrieved from the test/reference/selection chain or container
95  // - xxxKey: the key for tracks to be retrieved from the test/reference/selection chain or container
96  // - all standard operations are performed in loops over 0=test 1=reference 2=selection
97  T_AnalysisConfig_Tier0(const std::string& analysisInstanceName,
98  const std::string& testChainName, const std::string& testType, const std::string& testKey,
99  const std::string& referenceChainName, const std::string& referenceType, const std::string& referenceKey,
100  TrackFilter* testFilter, TrackFilter* referenceFilter,
101  TrackAssociator* associator,
103  T_AnalysisConfig<T>( analysisInstanceName,
104  testChainName, testType, testKey,
105  referenceChainName, referenceType, referenceKey,
106  testFilter, referenceFilter,
107  associator,
108  analysis ),
109  m_useBeamCondSvc(false),
110  m_doOffline(true),
111  m_doMuons(false),
112  m_doElectrons(false),
113  m_doTaus(false),
114  m_doBjets(false),
115  m_hasTruthMap(false),
116  m_NRois(0),
117  m_NRefTracks(0),
118  m_NTestTracks(0),
119  m_runPurity(false),
120  m_shifter(false),
121  m_pTthreshold(0),
122  m_first(true),
123  m_containTracks(false)
124  {
125  m_event = new TIDA::Event();
126  m_chainNames.push_back(testChainName);
127 
128 #if 0
129  ChainString& chain = m_chainNames.back();
130 
131  std::cout << "\nT_AnalysisConfig_Tier0::name: " << name() << "\t" << this << std::endl;
132  std::cout << "T_AnalysisConfig_Tier0::chain specification: " << testChainName << " -> " << chain << "\t" << chain.raw() << std::endl;
133  std::cout << "\tchain: " << chain.head() << std::endl;
134  std::cout << "\tkey: " << chain.tail() << std::endl;
135  std::cout << "\troi: " << chain.roi() << std::endl;
136  std::cout << "\tvtx: " << chain.vtx() << std::endl;
137  std::cout << "\tte: " << chain.element() << std::endl;
138 
139  std::cout << "\tpost: " << chain.post() << std::endl;
140  std::cout << "\tpt: " << chain.postvalue("pt") << std::endl;
141 
142  std::cout << "\tcontainTracks: " << m_containTracks << std::endl;
143 #endif
144 
145  m_testType = testType;
146  }
147 
148  virtual ~T_AnalysisConfig_Tier0() { delete m_event; }
149 
150  void setRunPurity( bool b ) { m_runPurity=b; }
151 
152  void setShifter( bool b ) { m_shifter=b; }
153 
154  void useBeamCondSvc( bool b ) { m_useBeamCondSvc = b; }
155 
156  void containTracks( bool b ) { m_containTracks = b; }
157 
158 public:
159 
161 
163  // void verbose( std::ostream& s ) {
164  // if( m_provider->msg().level() <= MSG::VERBOSE ) m_provider->msg(MSG::VERBOSE) << s << endmsg;
165  // }
166 
167 protected:
168 
172 
175 
180 
181  // using T_AnalysisConfig<T>::selectTracks<TrigInDetTrackCollection>;
182 
183  // using T_AnalysisConfig<T>::selectTracks;
184 
185  virtual void loop() {
186 
187  if( m_provider->msg().level() <= MSG::VERBOSE) {
188  m_provider->msg(MSG::VERBOSE) << "AnalysisConfig_Tier0::loop() for " << T_AnalysisConfig<T>::m_analysisInstanceName << endmsg;
189  }
190 
191  // get (offline) beam position
192  double xbeam = 0;
193  double ybeam = 0;
194 
195  if ( m_first ) {
196 
197  m_first = false;
198 
199  m_provider->msg(MSG::VERBOSE) << " using beam position\tx=" << xbeam << "\ty=" << ybeam << endmsg;
200 
201  if (m_provider->msg().level() <= MSG::VERBOSE) {
202 
203  std::vector<std::string> configuredChains = (*(m_tdt))->getListOfTriggers("L2_.*, EF_.*, HLT_.*");
204 
205  for ( unsigned i=0 ; i<configuredChains.size() ; i++ ) {
206  m_provider->msg(MSG::VERBOSE) << "Chain " << configuredChains[i] << endmsg;
207  }
208 
209  }
210 
211 
213 
214  std::vector<ChainString> chains;
215 
219  while ( chainitr!=m_chainNames.end() ) {
220 
222  ChainString& chainName = (*chainitr);
223 
224  m_provider->msg(MSG::INFO) << "process chain " << chainName << endmsg;
225 
226  if ( chainName.head() == "" ) {
227 
228  std::string selectChain = chainName.raw();
229 
230  chains.push_back( ChainString(selectChain) );
231 
232  if ( m_provider->msg().level() <= MSG::VERBOSE ) {
233  m_provider->msg(MSG::VERBOSE) << "Matching chain " << selectChain << " (" << chainName.head() << ")" << endmsg;
234  }
235 
236  }
237  else {
238 
240  std::vector<std::string> selectChains = (*(m_tdt))->getListOfTriggers( chainName.head() );
241 
242 
243  for ( unsigned iselected=0 ; iselected<selectChains.size() ; iselected++ ) {
244 
245  selectChains[iselected] = chainName.subs( selectChains[iselected] );
246 
247 #if 0
248  std::cout << "sorting:: chain specification: " << chainName << "\traw:" << chainName.raw() << std::endl;
249  std::cout << "\tchain: " << chainName.head() << std::endl;
250  std::cout << "\tkey: " << chainName.tail() << std::endl;
251  std::cout << "\troi: " << chainName.roi() << std::endl;
252  std::cout << "\tvtx: " << chainName.vtx() << std::endl;
253  std::cout << "\tte: " << chainName.element() << std::endl;
254  std::cout << "\tind: " << chainName.extra() << std::endl;
255 #endif
256 
258  chains.push_back( ChainString(selectChains[iselected]) );
259 
260  if(m_provider->msg().level() <= MSG::VERBOSE) {
261  m_provider->msg(MSG::VERBOSE) << "Matching chain " << selectChains[iselected] << " (" << chainName.head() << ")" << endmsg;
262  }
263 
264  }
265  }
266 
267  chainitr++;
268  }
269 
270  // m_chainNames.insert( m_chainNames.end(), chains.begin(), chains.end() );
272 
273  for ( unsigned ic=0 ; ic<m_chainNames.size() ; ic++ ) m_provider->msg(MSG::VERBOSE) << "Analyse chain " << m_chainNames[ic] << endmsg;
274 
275  }
276 
277 
280 
281  Filter_etaPT filter_etaPT(5,200);
282  Filter_Combined filter_truth( &filter_etaPT, &filter_etaPT);
283 
285  // Filter_Combined filterRef (&filter_offline, &filter_vertex);
286 
287  int iRefFilter = 1;
288  int iTestFilter = 0;
289 
290  if ( m_runPurity ) {
291  iRefFilter = 0;
292  iTestFilter = 1;
293  }
294 
295  Filter_Combined filterRef( m_filters[iRefFilter][0], &filter );
296  Filter_Combined filterTest( m_filters[iTestFilter][0], &filter );
297 
298  TrigTrackSelector selectorTruth( &filter_truth );
299  TrigTrackSelector selectorRef( &filterRef );
300  m_selectorRef = &selectorRef;
301  TrigTrackSelector selectorTest( &filterTest );
302  m_selectorTest = &selectorTest;
303 
304  if ( xbeam!=0 || ybeam!=0 ) {
305  m_selectorRef->setBeamline( xbeam, ybeam );
306  }
307 
309 
310  // clear the ntuple TIDA::Event class
311  m_event->clear();
312 
314 #ifndef XAODTRACKING_TRACKPARTICLE_H
315  const EventInfo* pEventInfo;
316 #else
317  const xAOD::EventInfo* pEventInfo;
318 #endif
319  unsigned run_number = 0;
320  uint64_t event_number = 0;
321  unsigned lumi_block = 0;
322  unsigned bunch_crossing_id = 0;
323  unsigned time_stamp = 0;
324  double mu_val = 0;
325 
326  if ( this->template retrieve(pEventInfo, "EventInfo").isFailure() ) {
327  m_provider->msg(MSG::WARNING) << "Failed to get EventInfo " << endmsg;
328  } else {
329 
330 #ifndef XAODTRACKING_TRACKPARTICLE_H
331  run_number = pEventInfo->event_ID()->run_number();
332  event_number = pEventInfo->event_ID()->event_number();
333  lumi_block = pEventInfo->event_ID()->lumi_block();
334  time_stamp = pEventInfo->event_ID()->time_stamp();
335  bunch_crossing_id = pEventInfo->event_ID()->bunch_crossing_id();
336  mu_val = pEventInfo->averageInteractionsPerCrossing();
337 #else
338  run_number = pEventInfo->runNumber();
339  event_number = pEventInfo->eventNumber();
340  lumi_block = pEventInfo->lumiBlock();
341  time_stamp = pEventInfo->timeStamp();
342  bunch_crossing_id = pEventInfo->bcid();
343  mu_val = pEventInfo->averageInteractionsPerCrossing();
344 #endif
345  }
346 
347  if(m_provider->msg().level() <= MSG::VERBOSE){
348  m_provider->msg(MSG::VERBOSE) << "run " << run_number
349  << "\tevent " << event_number
350  << "\tlb " << lumi_block << endmsg;
351  }
352 
353  // m_provider->msg(MSG::INFO) << "run " << run_number
354  // << "\tevent " << event_number
355  // << "\tlb " << lumi_block << endmsg;
356 
357  // std::cout << "run " << run_number << "\tevent " << event_number << "\tlb " << lumi_block << std::endl;
358 
359 
360  // clear the ntuple TIDA::Event class
361  m_event->clear();
362 
364  m_event->event_number(event_number);
365  m_event->lumi_block(lumi_block);
366  m_event->time_stamp(time_stamp);
367  m_event->bunch_crossing_id(bunch_crossing_id);
368  m_event->mu(mu_val);
369 
372 
373  bool analyse = false;
374 
375  // Check HLTResult
376 
377  for ( unsigned ichain=0 ; ichain<m_chainNames.size() ; ichain++ ) {
378 
379  const std::string& chainname = m_chainNames[ichain].head();
380 
381  if ( chainname == "" ) analyse = true;
382  else {
383 
384  //Only for trigger chains
385  if ( chainname.find("L2") == std::string::npos &&
386  chainname.find("EF") == std::string::npos &&
387  chainname.find("HLT") == std::string::npos ) continue;
388 
389  if ( m_provider->msg().level() <= MSG::DEBUG ) {
390  m_provider->msg(MSG::DEBUG) << "Chain " << chainname
391  << "\tpass " << (*m_tdt)->isPassed(chainname)
392  << "\tpres " << (*m_tdt)->getPrescale(chainname) << endmsg;
393  }
394 
395  // std::cout << "Chain " << chainname << "\tpass " << (*m_tdt)->isPassed(chainname)
396  // << "\tpres " << (*m_tdt)->getPrescale(chainname) << std::endl;
397 
398  if ( (*(m_tdt))->isPassed(chainname) || (*(m_tdt))->getPrescale(chainname) ) analyse = true;
399 
400  }
401  }
402 
403  // Remove this code to skip on truncated HLT results
404  // Need to leave the code here for the time being however, since we will
405  // still need in the future a more robust test to achieve this same
406  // functionality
407  //
408  // if ( (*m_tdt)->ExperimentalAndExpertMethods().isHLTTruncated() ) {
409  // m_provider->msg(MSG::WARNING) << "HLTResult truncated, skipping event" << endmsg;
410  // return;
411  // }
412 
413  if ( !this->m_keepAllEvents && !analyse ) {
414  // m_provider->msg(MSG::VERBOSE) << "No chains passed unprescaled - not processing this event" << endmsg;
415  if(m_provider->msg().level() <= MSG::VERBOSE)
416  m_provider->msg(MSG::VERBOSE) << "No chains passed unprescaled - not processing this event" << endmsg;
417  return;
418  }
419 
421 
422  selectorTruth.clear();
423 
424  if(m_provider->msg().level() <= MSG::VERBOSE)
425  m_provider->msg(MSG::VERBOSE) << "MC Truth flag " << m_mcTruth << endmsg;
426 
427  const TrigInDetTrackTruthMap* truthMap = 0;
428 
429  if ( m_mcTruth ) {
430  if(m_provider->msg().level() <= MSG::VERBOSE ) m_provider->msg(MSG::VERBOSE) << "getting Truth" << endmsg;
431 
432  if ( this->template retrieve(truthMap, "TrigInDetTrackTruthMap").isFailure()) {
433  if(m_provider->msg().level() <= MSG::VERBOSE)
434  m_provider->msg(MSG::VERBOSE) << "TrigInDetTrackTruthMap not found" << endmsg;
435  m_hasTruthMap = false;
436  }
437  else {
438  if(m_provider->msg().level() <= MSG::VERBOSE)
439  m_provider->msg(MSG::VERBOSE) << "TrigInDetTrackTruthMap found" << endmsg;
440  m_hasTruthMap = true;
441  }
442  }
443 
444 
446 
447  std::vector<TIDA::Vertex> vertices;
448  std::vector<TIDA::Vertex> vertices_rec;
449 
450  std::vector<double> refbeamspot;
451  std::vector<double> testbeamspot;
452 
453 
454 
455 #ifndef XAODTRACKING_TRACKPARTICLE_H
456 
457  const VxContainer* primaryVtxCollection;
458 
459  if ( m_doOffline ) {
460  if ( m_provider->evtStore()->template contains<VxContainer>("VxPrimaryCandidate") ) {
461  if ( this->template retrieve(primaryVtxCollection, "VxPrimaryCandidate").isFailure()) {
462  if (m_provider->msg().level() <= MSG::WARNING) m_provider->msg(MSG::WARNING) << "Primary vertex container not found" << endmsg;
463  }
464  else {
465  VxContainer::const_iterator vtxitr = primaryVtxCollection->begin();
466  for ( ; vtxitr != primaryVtxCollection->end(); ++vtxitr) {
467  if ( (*vtxitr)->vxTrackAtVertex()->size()>0 ) {
468  vertices.push_back( TIDA::Vertex( (*vtxitr)->recVertex().position().x(),
469  (*vtxitr)->recVertex().position().y(),
470  (*vtxitr)->recVertex().position().z(),
471  0,0,0,
472  (*vtxitr)->vxTrackAtVertex()->size() ) );
473  }
474  }
475  }
476 
477  // filter_vertex.setVertex(vertices);
478  }
479  }
480 
481 #else
482 
483  //std::vector<TIDA::Vertex> vertices;
484 
485  m_provider->msg(MSG::VERBOSE) << "fetching AOD Primary vertex container" << endmsg;
486 
487  const xAOD::VertexContainer* xaodVtxCollection = 0;
488 
489  if ( this->template retrieve( xaodVtxCollection, "PrimaryVertices" ).isFailure()) {
490  if (m_provider->msg().level() <= MSG::WARNING) m_provider->msg(MSG::WARNING) << "xAOD Primary vertex container not found with key " << "PrimaryVertices" << endmsg;
491  }
492 
493  if ( xaodVtxCollection!=0 ) {
494 
495  m_provider->msg(MSG::VERBOSE) << "xAOD Primary vertex container " << xaodVtxCollection->size() << " entries" << endmsg;
496 
497  xAOD::VertexContainer::const_iterator vtxitr = xaodVtxCollection->begin();
498  for ( ; vtxitr != xaodVtxCollection->end(); vtxitr++ ) {
499  if ( (*vtxitr)->nTrackParticles()>0 && (*vtxitr)->vertexType()!=0 ) {
500  vertices.push_back( TIDA::Vertex( (*vtxitr)->x(),
501  (*vtxitr)->y(),
502  (*vtxitr)->z(),
504  (*vtxitr)->covariancePosition()(Trk::x,Trk::x),
505  (*vtxitr)->covariancePosition()(Trk::y,Trk::y),
506  (*vtxitr)->covariancePosition()(Trk::z,Trk::z),
507  (*vtxitr)->nTrackParticles(),
509  (*vtxitr)->chiSquared(),
510  (*vtxitr)->numberDoF() ) );
511  }
512  }
513  }
514 
515 
516 #endif
517 
518 
520 
521  if ( m_mcTruth ) {
522  m_event->addChain( "Truth" );
524  m_event->back().back().addTracks(selectorTruth.tracks());
525  }
526 
528 
529  if ( m_doOffline ) {
530  for ( unsigned i=0 ; i<vertices.size() ; i++ ) {
531  if(m_provider->msg().level() <= MSG::VERBOSE)
532  m_provider->msg(MSG::VERBOSE) << "vertex " << i << " " << vertices[i] << endmsg;
533  m_event->addVertex(vertices[i]);
534  }
535  }
536 
538 
539  // int Noff = 0;
540  std::vector<TIDA::Track*> offline_tracks;
541  std::vector<TIDA::Track*> electron_tracks;
542  std::vector<TIDA::Track*> muon_tracks;
543 
544  std::vector<TIDA::Track*> ref_tracks;
545  std::vector<TIDA::Track*> test_tracks;
546 
547  offline_tracks.clear();
548  electron_tracks.clear();
549  muon_tracks.clear();
550 
551  ref_tracks.clear();
552  test_tracks.clear();
553 
555  for ( unsigned ichain=0 ; ichain<m_chainNames.size() ; ichain++ ) {
556 
557  test_tracks.clear();
558 
560 
561  // std::string& chainname = chains[ichain];
562  const std::string& chainname = m_chainNames[ichain].head();
563  const std::string& key = m_chainNames[ichain].tail();
564  const std::string& vtx_name = m_chainNames[ichain].vtx();
565  //no currently used but retained in case
566  //const std::string& roi_name = m_chainNames[ichain].roi();
567  //const std::string& te_name = m_chainNames[ichain].element();
568 
569  m_pTthreshold = 0;
570 
571  if ( m_chainNames[ichain].postcount() ) {
572  std::string ptvalue = m_chainNames[ichain].postvalue("pt");
573  if ( ptvalue!="" ) m_pTthreshold = std::stod(ptvalue);
574  }
575 
576  // std::cout << "\tchain " << m_chainNames[ichain] << "\tchainname " << chainname << "\tvtx " << vtx_name << "\troi " << roi_name << std::endl;
577 
578  unsigned _decisiontype = TrigDefs::Physics;
579  unsigned decisiontype;
580 
581  if ( this->requireDecision() ) _decisiontype = TrigDefs::requireDecision;
582 
583 
584  if ( m_chainNames[ichain].passed() ) decisiontype = _decisiontype;
585  else decisiontype = TrigDefs::alsoDeactivateTEs;
586 
587  // if ( decisiontype==TrigDefs::requireDecision ) std::cout << "\tSUTT TrigDefs::requireDecision " << decisiontype << std::endl;
588  // if ( decisiontype==TrigDefs::Physics ) std::cout << "\tSUTT TrigDefs::Physics " << decisiontype << std::endl;
589 
590 
592  const std::string& key_index_string = m_chainNames[ichain].extra();
593  unsigned key_index = 0;
594  if ( key_index_string!="" ) key_index = std::atoi( key_index_string.c_str() );
595 
596  if ( chainname!="" && m_provider->msg().level() <= MSG::VERBOSE ) {
597 
598  m_provider->msg(MSG::VERBOSE) << "status for chain " << chainname
599  << "\tpass " << (*m_tdt)->isPassed(chainname)
600  << "\tprescale " << (*m_tdt)->getPrescale(chainname) << endmsg;
601 
602  m_provider->msg(MSG::VERBOSE) << "fetching features for chain " << chainname << endmsg;
603 
604  m_provider->msg(MSG::VERBOSE) << chainname << "\tpassed: " << (*m_tdt)->isPassed( chainname ) << endmsg;
605  }
606 
607  // std::cout << "\tstatus for chain " << chainname
608  // << "\tpass " << (*m_tdt)->isPassed( chainname )
609  // << "\tpassdt " << (*m_tdt)->isPassed( chainname, decisiontype )
610  // << "\tprescale " << (*m_tdt)->getPrescale( chainname ) << std::endl;
611 
612 
613  // m_provider->msg(MSG::INFO) << chainname << "\tpassed: " << (*m_tdt)->isPassed( chainname ) << "\t" << m_chainNames[ichain] << "\trun " << run_number << "\tevent " << event_number << endmsg;
614 
615 
616  if ( chainname!="" && !this->m_keepAllEvents && !(*m_tdt)->isPassed( chainname, decisiontype ) ) continue;
617 
620  // Trig::FeatureContainer f = (*m_tdt)->features( chainname, TrigDefs::alsoDeactivateTEs);
621 
624 
625  ChainString& chainConfig = m_chainNames[ichain];
626 
627  std::string chainName = chainConfig.head();
628 
629  m_event->addChain( chainConfig );
630 
632 
633  if ( chainName == "" ) {
634 
636 
638 
639  TIDARoiDescriptor* roiInfo = new TIDARoiDescriptor(true);
640 
641  chain.addRoi( *roiInfo );
642 
643 
644 # ifdef XAODTRACKING_TRACKPARTICLE_H
645  if ( m_provider->evtStore()->template contains<xAOD::TrackParticleContainer>(key) ) {
646  this->template selectTracks<xAOD::TrackParticleContainer>( m_selectorTest, key );
647  refbeamspot = this->template getBeamspot<xAOD::TrackParticleContainer>( key );
648  }
649 # endif
650 
651  const std::vector<TIDA::Track*>& testtracks = m_selectorTest->tracks();
652 
653  chain.back().addTracks(testtracks);
654 
655  if ( roiInfo ) delete roiInfo;
656 
657  }
658  else {
659 
660  Trig::FeatureContainer f = (*m_tdt)->features( chainname, decisiontype );
661  Trig::FeatureContainer::combination_const_iterator c(f.getCombinations().begin());
662  Trig::FeatureContainer::combination_const_iterator cEnd(f.getCombinations().end());
663 
664 
665  if ( c==cEnd ) {
666  if(m_provider->msg().level() <= MSG::VERBOSE){
667  m_provider->msg(MSG::VERBOSE) << "No combinations: skipping this chain " << chainname << endmsg;
668  }
669  continue;
670  }
671 
672  if(m_provider->msg().level() <= MSG::VERBOSE) {
673  m_provider->msg(MSG::VERBOSE) << "combinations for chain " << chainname << " " << (cEnd-c) << endmsg;
674  }
675 
676  unsigned icomb = 0;
677 
678  for( ; c!=cEnd ; ++c ) {
679 
680  icomb++;
681 
682  // now add rois to this ntuple chain
683 
684  // Get seeding RoI
685  // std::vector< Trig::Feature<TrigRoiDescriptor> > initRois = c->get<TrigRoiDescriptor>("initialRoI", TrigDefs::alsoDeactivateTEs);
686  // std::vector< Trig::Feature<TrigRoiDescriptor> > initRois = c->get<TrigRoiDescriptor>("forID", TrigDefs::alsoDeactivateTEs);
687 
688  std::vector< Trig::Feature<TrigRoiDescriptor> > initRois;
689 
690  std::string roi_key = m_chainNames[ichain].roi();
691 
692  if ( roi_key=="SuperRoi" && icomb>1 ) continue;
693 
694  if ( roi_key!="" ) {
695  initRois = c->get<TrigRoiDescriptor>(roi_key, decisiontype );
696  }
697  else {
698  initRois = c->get<TrigRoiDescriptor>("forID", decisiontype );
699  if ( initRois.empty() ) initRois = c->get<TrigRoiDescriptor>("", decisiontype );
700  if ( initRois.empty() ) initRois = c->get<TrigRoiDescriptor>("initialRoI", decisiontype );
701  }
702 
703  // std::cout << "initRois.size() " << initRois.size() << std::endl;
704 
705  if ( initRois.empty() ) continue;
706 
707 
708  // for ( unsigned ir=0 ; ir<initRois.size() ; ir++ ) {
709  // std::cout << "\t" << ir << "\t" << *initRois[ir].cptr() << std::endl;
710  // }
711 
712  // Skip chains seeded by multiple RoIs: not yet implemented
713  if(initRois.size()>1 && roi_key!="SuperRoi" ) {
714  if(m_provider->msg().level() <= MSG::VERBOSE)
715  m_provider->msg(MSG::VERBOSE) << " More than one initial RoI found for seeded chain " << chainname << ": not yet supported" << endmsg;
716  continue;
717  }
718 
719  TIDARoiDescriptor* roiInfo = 0;
720 
721  if( !initRois.empty() ) {
722  const TrigRoiDescriptor* roid = initRois[0].cptr();
723 
724  if(m_provider->msg().level() <= MSG::VERBOSE)
725  m_provider->msg(MSG::VERBOSE) << " RoI descriptor for seeded chain " << chainname << " " << *roid << endmsg;
726 
727  roiInfo = new TIDARoiDescriptor(TIDARoiDescriptorBuilder(*roid));
728  // roiInfo->etaHalfWidth(m_roiInfo->etaHalfWidth());
729  // roiInfo->phiHalfWidth(m_roiInfo->phiHalfWidth());
730  // roiInfo->etaHalfWidth(roid->etaHalfWidth());
731  // roiInfo->phiHalfWidth(roid->phiHalfWidth());
732  // roiInfo->zedHalfWidth(roid->zedHalfWidth());
733 
734  if(m_provider->msg().level() <= MSG::VERBOSE)
735  m_provider->msg(MSG::VERBOSE) << "using chain roi " << *roid << endmsg;
736 
737  }
738  else {
739  roiInfo = new TIDARoiDescriptor();
740  // roiInfo->etaHalfWidth(5);
741  // roiInfo->phiHalfWidth(M_PI);
742  // roiInfo->zedHalfWidth(m_roiInfo->zedHalfWidth());
743 
744  if(m_provider->msg().level() <= MSG::WARNING)
745  m_provider->msg(MSG::WARNING) << "roi not found" << endmsg;
746 
747  }
748 
749  if(m_provider->msg().level() <= MSG::VERBOSE) m_provider->msg(MSG::VERBOSE) << *roiInfo << endmsg;
750 
752 
753  m_provider->msg(MSG::VERBOSE) << "Searching for collection " << key << endmsg;
754  // std::cout << "Searching for collection " << key << std::endl;
755 
757  if ( key.find("InDetTrigParticleCreation")!=std::string::npos ||
758  key.find("_IDTrig")!=std::string::npos ||
759  key.find("_EFID")!=std::string::npos ||
760  chainName.find("EF_")!=std::string::npos ||
761  chainName.find("HLT_")!=std::string::npos ) {
762 # ifdef XAODTRACKING_TRACKPARTICLE_H
763  if ( this->template selectTracks<xAOD::TrackParticleContainer>( m_selectorTest, c, key ) ) testbeamspot = this->template getBeamspot<xAOD::TrackParticleContainer>( c, key );
764  else if ( this->template selectTracks<Rec::TrackParticleContainer>( m_selectorTest, c, key ) );
765 # else
766  if ( this->template selectTracks<Rec::TrackParticleContainer>( m_selectorTest, c, key ) );
767 # endif
768  else if ( this->template selectTracks<TrackCollection>( m_selectorTest, c, key ) );
769  else if ( this->template selectTracks<TrigInDetTrackCollection>( m_selectorTest, c, truthMap, key, key_index ) );
770  else {
771  //m_provider->msg(MSG::WARNING) << "No track collection " << key << " found" << endmsg;
772  }
773  }
774  else {
776  if ( chainName.find("L2_")!=std::string::npos ) {
777  if ( this->template selectTracks<TrigInDetTrackCollection>( m_selectorTest, c, truthMap, key, key_index ) );
778  else if ( this->template selectTracks<Rec::TrackParticleContainer>( m_selectorTest, c, key ) );
779  else if ( this->template selectTracks<TrackCollection>( m_selectorTest, c, key ) );
780 # ifdef XAODTRACKING_TRACKPARTICLE_H
781  else if ( this->template selectTracks<xAOD::TrackParticleContainer>( m_selectorTest, c, key ) ) testbeamspot = this->template getBeamspot<xAOD::TrackParticleContainer>( c, key );
782 # endif
783  else m_provider->msg(MSG::WARNING) << "No track collection " << key << " found" << endmsg;
784  }
785  }
786 
787 
788  const std::vector<TIDA::Track*>& testtracks = m_selectorTest->tracks();
789 
790  m_provider->msg(MSG::VERBOSE) << "test tracks.size() " << testtracks.size() << endmsg;
791  // std::cout << "test tracks.size() " << testtracks.size() << std::endl;
792 
793  // std::cout << "\ttest tracks.size() " << testtracks.size() << std::endl;
794 
795  if ( m_provider->msg().level() <= MSG::VERBOSE ) {
796  m_provider->msg(MSG::VERBOSE) << "test tracks.size() " << testtracks.size() << endmsg;
797  for ( int ii=testtracks.size() ; ii-- ; ) {
798  m_provider->msg(MSG::VERBOSE) << " test track " << ii << " " << *testtracks[ii] << endmsg;
799  //test_tracks.push_back(testtracks.at(ii));
800  }
801  }
802 
803  chain.addRoi( *roiInfo );
804 
805  chain.back().addTracks(testtracks);
806 
807  if ( roiInfo ) delete roiInfo;
808 
810 
812 
813  // std::cout << "vertex " << vtx_name << "\tchain " << chainName << "\tconfig " << chainConfig << std::endl;
814 
815  if ( vtx_name!="" ) {
816 
817  m_provider->msg(MSG::VERBOSE) << "\tFetch xAOD::VertexContainer for chain " << chainConfig << " with key " << vtx_name << endmsg;
818 
819  std::vector< Trig::Feature<xAOD::VertexContainer> > xaodtrigvertices = c->get<xAOD::VertexContainer>(vtx_name);
820 
821  if ( xaodtrigvertices.empty() ) {
822  if ( m_provider->msg().level() <= MSG::DEBUG ) {
823  m_provider->msg(MSG::WARNING) << "\tNo xAOD::VertexContainer for chain " << chainConfig << " for key " << vtx_name << endmsg;
824  }
825  }
826  else {
827 
828  m_provider->msg(MSG::VERBOSE) << "\txAOD::VertexContainer found with size " << xaodtrigvertices.size() << "\t" << vtx_name << endmsg;
829 
830  for ( unsigned iv=0 ; iv<xaodtrigvertices.size() ; iv++ ) {
831 
832  const xAOD::VertexContainer* vert = xaodtrigvertices[iv].cptr();
833 
834  m_provider->msg(MSG::VERBOSE) << "\t" << iv << " xAOD VxContainer for " << chainConfig << " " << vert << " key " << vtx_name << endmsg;
835 
837 
838  for ( ; vtxitr != vert->end(); ++vtxitr) {
841  // if ( ( (*vtxitr)->nTrackParticles()>0 && (*vtxitr)->vertexType()!=0 ) || vtx_name=="EFHistoPrmVtx" ) {
842  if ( (*vtxitr)->vertexType()!=0 || vtx_name=="EFHistoPrmVtx" ) {
843  chain.back().addVertex( TIDA::Vertex( (*vtxitr)->x(),
844  (*vtxitr)->y(),
845  (*vtxitr)->z(),
847  (*vtxitr)->covariancePosition()(Trk::x,Trk::x),
848  (*vtxitr)->covariancePosition()(Trk::y,Trk::y),
849  (*vtxitr)->covariancePosition()(Trk::z,Trk::z),
850  (*vtxitr)->nTrackParticles(),
852  (*vtxitr)->chiSquared(),
853  (*vtxitr)->numberDoF() ) );
854 
855  }
856  }
857  }
858 
859  }
860 
861  }
862 
863  }
864 
865  }
866 
867 
868  if ( m_provider->msg().level() <= MSG::VERBOSE ) {
869  m_provider->msg(MSG::VERBOSE) << "event: " << *m_event << endmsg;
870  }
871 
873 
874  for ( unsigned iroi=0 ; iroi<chain.size() ; iroi++ ) {
875 
876  m_selectorRef->clear();
877 
878  if ( this->filterOnRoi() ) {
879  filterRef.setRoi( &chain.rois().at(iroi).roi() );
880  filterRef.containtracks( m_containTracks );
881  }
882  else filterRef.setRoi( 0 );
883 
884  test_tracks.clear();
885 
886 
900 
901  if ( m_provider->msg().level() <= MSG::VERBOSE )
902  m_provider->msg(MSG::VERBOSE) << "MC Truth flag " << m_mcTruth << endmsg;
903 
904  bool foundTruth = false;
905 
906  if ( !m_doOffline && m_mcTruth ) {
907 
908  if ( this->filterOnRoi() ) filter_truth.setRoi( &chain.rois().at(iroi).roi() );
909  else filter_truth.setRoi( 0 ); // don't filter on RoI unless needed
910 
911  selectorTruth.clear();
912 
913  if ( m_provider->msg().level() <= MSG::VERBOSE )
914  m_provider->msg(MSG::VERBOSE) << "getting Truth" << endmsg;
915 
916  if ( m_provider->evtStore()->template contains<TruthParticleContainer>("INav4MomTruthEvent") ) {
917  //ESD
918  this->template selectTracks<TruthParticleContainer>( &selectorTruth, "INav4MomTruthEvent" );
919  foundTruth = true;
920  }
921  else if ( m_provider->evtStore()->template contains<TruthParticleContainer>("SpclMC") ) {
923  this->template selectTracks<TruthParticleContainer>( &selectorTruth, "SpclMC");
924  foundTruth = true;
925  }
926  else if ( m_provider->evtStore()->template contains<TruthParticleContainer>("") ) {
928  this->template selectTracks<TruthParticleContainer>( &selectorTruth, "");
929  foundTruth = true;
930  }
931  else
932  if ( m_provider->msg().level() <= MSG::VERBOSE ) {
933  m_provider->msg(MSG::VERBOSE) << "Truth not found - none whatsoever!" << endmsg;
934  }
935  }
936 
937 
938  if ( !m_doOffline && m_mcTruth && !foundTruth ) {
939 
940  if ( m_provider->msg().level() <= MSG::VERBOSE ) {
941  m_provider->msg(MSG::VERBOSE) << "getting Truth" << endmsg;
942  }
943 
945 
946  const DataHandle<McEventCollection> mcevent;
947 
949 
950  std::string keys[4] = { "GEN_AOD", "TruthEvent", "", "G4Truth" };
951 
952  std::string key = "";
953 
954  bool foundcollection = false;
955 
956  for ( int ik=0 ; ik<4 ; ik++ ) {
957 
958  if ( m_provider->msg().level() <= MSG::VERBOSE ) {
959  m_provider->msg(MSG::VERBOSE) << "Try McEventCollection: " << keys[ik] << endmsg;
960  }
961 
962  if ( !m_provider->evtStore()->template contains<McEventCollection>(keys[ik]) ) {
963  if( m_provider->msg().level() <= MSG::VERBOSE )
964  m_provider->msg(MSG::VERBOSE) << "No McEventCollection: " << keys[ik] << endmsg;
965  continue;
966  }
967 
968  if ( m_provider->msg().level() <= MSG::VERBOSE )
969  m_provider->msg(MSG::VERBOSE) << "evtStore()->retrieve( mcevent, " << keys[ik] << " )" << endmsg;
970 
971  if ( this->template retrieve( mcevent, keys[ik] ).isFailure() ) {
972  if ( m_provider->msg().level() <= MSG::VERBOSE )
973  m_provider->msg(MSG::VERBOSE) << "Failed to get McEventCollection: " << keys[ik] << endmsg;
974  }
975  else {
977  key = keys[ik];
978  if(m_provider->msg().level() <= MSG::VERBOSE)
979  m_provider->msg(MSG::VERBOSE) << "Found McEventCollection: " << key << endmsg;
980  foundcollection = true;
981  break;
982  }
983  }
984 
986  if ( !foundcollection ) {
987  if(m_provider->msg().level() <= MSG::VERBOSE)
988  m_provider->msg(MSG::WARNING) << "No MC Truth Collections of any sort, whatsoever!!!" << endmsg;
989 
990  // m_tree->Fill();
991  // return StatusCode::FAILURE;
992 
993  return;
994  }
995 
996  if ( m_provider->msg().level() <= MSG::VERBOSE ) {
997  m_provider->msg(MSG::VERBOSE) << "Found McEventCollection: " << key << "\tNevents " << mcevent->size() << endmsg;
998  }
999 
1000  McEventCollection::const_iterator evitr = mcevent->begin();
1001  McEventCollection::const_iterator evend = mcevent->end();
1002 
1003  unsigned ie = 0;
1004  unsigned ip = 0;
1005 
1006  unsigned ie_ip = 0;
1007 
1008  while ( evitr!=evend ) {
1009 
1010  int _ip = 0;
1011 
1012  int pid = HepMC::signal_process_id((*evitr));
1013 
1014  //The logic should be clarified here
1015  if ( pid!=0 ) {
1016 
1017  for (auto pitr: *(*evitr)) {
1018 
1019  selectorTruth.selectTrack( pitr );
1020 
1021  ++_ip;
1022 
1023  }
1024 
1025  }
1026  ++ie;
1027  ++evitr;
1028 
1029  if ( _ip>0 ) {
1031  // m_provider->msg(MSG::VERBOSE) << "Found " << ie << "\tpid " << pid << "\t with " << ip << " TruthParticles (GenParticles)" << endmsg;
1032  ++ie_ip;
1033  ip += _ip;
1034  }
1035  }
1036 
1037  if(m_provider->msg().level() <= MSG::VERBOSE){
1038  m_provider->msg(MSG::VERBOSE) << "Found " << ip << " TruthParticles (GenParticles) in " << ie_ip << " GenEvents out of " << ie << endmsg;
1039  m_provider->msg(MSG::VERBOSE) << "selected " << selectorTruth.size() << " TruthParticles (GenParticles)" << endmsg;
1040  }
1041 
1042  if(selectorTruth.size() > 0) foundTruth = true;
1043 
1044  if ( !(ip>0) ) {
1045  if (m_provider->msg().level() <= MSG::VERBOSE) m_provider->msg(MSG::WARNING) << "NO TRUTH PARTICLES - returning" << endmsg;
1046  return;
1047  }
1048 
1049  }
1050 
1052 
1053  // m_provider->msg(MSG::VERBOSE) << " Offline tracks " << endmsg;
1054 
1055  if ( m_doOffline ) {
1056 
1057 # ifdef XAODTRACKING_TRACKPARTICLE_H
1058  if ( m_provider->evtStore()->template contains<xAOD::TrackParticleContainer>("InDetTrackParticles") ) {
1059  this->template selectTracks<xAOD::TrackParticleContainer>( m_selectorRef, "InDetTrackParticles" );
1060  refbeamspot = this->template getBeamspot<xAOD::TrackParticleContainer>( "InDetTrackParticles" );
1061  }
1062  else if (m_provider->evtStore()->template contains<Rec::TrackParticleContainer>("TrackParticleCandidate") ) {
1063  this->template selectTracks<Rec::TrackParticleContainer>( m_selectorRef, "TrackParticleCandidate" );
1064  }
1065 # else
1066  if (m_provider->evtStore()->template contains<Rec::TrackParticleContainer>("TrackParticleCandidate") ) {
1067  this->template selectTracks<Rec::TrackParticleContainer>( m_selectorRef, "TrackParticleCandidate" );
1068  }
1069 # endif
1070  else if ( m_provider->msg().level() <= MSG::WARNING ) {
1071  m_provider->msg(MSG::WARNING) << " Offline tracks not found " << endmsg;
1072  }
1073 
1074  ref_tracks = m_selectorRef->tracks();
1075 
1076  if ( m_provider->msg().level() <= MSG::VERBOSE ) {
1077  m_provider->msg(MSG::VERBOSE) << "ref tracks.size() " << m_selectorRef->tracks().size() << endmsg;
1078  for ( int ii=m_selectorRef->tracks().size() ; ii-- ; ) {
1079  m_provider->msg(MSG::VERBOSE) << " ref track " << ii << " " << *m_selectorRef->tracks()[ii] << endmsg;
1080  }
1081  }
1082 
1083  }
1084  else {
1086  if ( m_mcTruth && foundTruth ){
1087  ref_tracks=selectorTruth.tracks();
1088  }
1089  }
1090 
1091 
1092 
1093  test_tracks.clear();
1094 
1095  for ( unsigned itrk=0 ; itrk<chain.rois().at(iroi).tracks().size() ; itrk++ ) {
1096  test_tracks.push_back(&(chain.rois().at(iroi).tracks().at(itrk)));
1097  }
1098 
1099 
1100  // std::cout << "sutt track multiplicities: offline " << offline_tracks.size() << "\ttest " << test_tracks.size() << std::endl;
1101 
1102  _analysis->setvertices( vertices.size() );
1103 
1104  if ( refbeamspot.size()>0 ) _analysis->setBeamRef( refbeamspot );
1105  if ( testbeamspot.size()>0 ) _analysis->setBeamTest( testbeamspot );
1106 
1109 
1110  if ( m_runPurity ) {
1111 
1112  if ( this->getUseHighestPT() ) HighestPTOnly( test_tracks );
1113 
1114  if ( m_pTthreshold>0 ) FilterPT( test_tracks, m_pTthreshold );
1115 
1117  m_NRois++;
1118  m_NRefTracks += test_tracks.size();
1119  m_NTestTracks += ref_tracks.size();
1120 
1122  m_associator->match( test_tracks, ref_tracks );
1123 
1124  _analysis->execute( test_tracks, ref_tracks, m_associator );
1125 
1126  }
1127  else {
1128 
1130 
1131  if ( this->getUseHighestPT() ) HighestPTOnly( ref_tracks );
1132 
1134 
1135  if ( m_pTthreshold>0 ) FilterPT( ref_tracks, m_pTthreshold );
1136 
1138  m_NRois++;
1139  m_NRefTracks += ref_tracks.size();
1140  m_NTestTracks += test_tracks.size();
1141 
1143  m_associator->match( ref_tracks, test_tracks );
1144 
1145  // std::cout << "SUTT: execute : N tracks " << ref_tracks.size() << " " << test_tracks.size() << std::endl;
1146 
1147  _analysis->setroi( &chain.rois().at(iroi).roi() );
1148  _analysis->execute( ref_tracks, test_tracks, m_associator );
1149 
1150  // std::cout << "chain " << m_chainNames[ichain] << " " << "\tvtx name " << vtx_name << std::endl;
1151 
1152  if ( vtx_name!="" ) {
1154  std::vector<TIDA::Vertex> vr = chain.rois().at(iroi).vertices();
1155  std::vector<TIDA::Vertex*> vtx_rec;
1156  for ( unsigned iv=0 ; iv<vr.size() ; iv++ ) vtx_rec.push_back( &vr[iv] );
1157 
1158  std::vector<TIDA::Vertex*> vtx;
1159  if ( this->getVtxIndex()<0 ) {
1160  for ( unsigned iv=0 ; iv<vertices.size() ; iv++ ) vtx.push_back( &vertices[iv] );
1161  }
1162  else {
1163  if ( vertices.size()>unsigned(this->getVtxIndex()) ) vtx.push_back( &vertices[this->getVtxIndex()] );
1164  }
1165 
1166  _analysis->execute_vtx( vtx, vtx_rec, m_event );
1167  }
1168 
1169  }
1170 
1171  if ( _analysis->debug() ) {
1172  m_provider->msg(MSG::INFO) << "Missing track for " << m_chainNames[ichain]
1173  << "\trun " << run_number
1174  << "\tevent " << event_number
1175  << "\tlb " << lumi_block << endmsg;
1176  }
1177 
1178  }
1179 
1180  }
1181 
1182  if ( m_provider->msg().level() <= MSG::VERBOSE ) {
1183  m_provider->msg(MSG::VERBOSE) << "\n\nEvent " << *m_event << endmsg;
1184  }
1185  }
1186 
1187 
1188 
1189  virtual void book() {
1190 
1191  if(m_provider->msg().level() <= MSG::VERBOSE)
1192  m_provider->msg(MSG::VERBOSE) << "AnalysisConfig_Tier0::book() " << name() << endmsg;
1193 
1194  m_provider->msg(MSG::ERROR) << "AnalysisConfig_Tier0::book() should no longer ever be called: " << name() << endmsg;
1195 
1196  }
1197 
1198 
1199 
1200  virtual void finalize() {
1201 
1202  if(m_provider->msg().level() <= MSG::VERBOSE)
1203  m_provider->msg(MSG::VERBOSE) << "AnalysisConfig_Tier0::finalise() " << m_provider->name() << endmsg;
1204 
1205  m_analysis->finalise();
1206 
1207  m_provider->msg(MSG::INFO) << m_provider->name() << " " << m_chainNames[0] << " \tNRois processed: " << m_NRois << "\tRef tracks: " << m_NRefTracks << "\tTestTracks: " << m_NTestTracks << endmsg;
1208 
1209  if(m_provider->msg().level() <= MSG::VERBOSE)
1210  m_provider->msg(MSG::VERBOSE) << m_provider->name() << " finalised" << endmsg;
1211 
1212  }
1213 
1214 
1215 protected:
1216 
1218 
1220 
1221  std::vector<ChainString> m_chainNames;
1222  std::vector<Analysis_Tier0*> m_analyses;
1223  std::string m_testType;
1224 
1228  bool m_doTaus;
1233 
1234  std::string m_outputFileName;
1235 
1237  int m_NRois;
1240 
1242 
1244 
1246 
1247  bool m_first;
1248 
1250 
1251 };
1252 
1253 
1254 
1255 #endif // TrigInDetAnalysisExample_T_AnalysisConfig_Tier0_H
1256 
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
T_AnalysisConfig< T >::m_selectorRef
TrigTrackSelector * m_selectorRef
Definition: T_AnalysisConfig.h:979
Trig::FeatureContainer::combination_const_iterator
std::vector< Combination >::const_iterator combination_const_iterator
Definition: FeatureContainer.h:69
TrackAnalysis::setBeamTest
void setBeamTest(double x, double y, double z=0)
Definition: TrackAnalysis.h:106
Trk::y
@ y
Definition: ParamDefs.h:62
TIDA::Associator
Definition: TIDAAssociator.h:24
TIDARoiDescriptorBuilder.h
T_AnalysisConfig< T >::m_mcTruth
bool m_mcTruth
Definition: T_AnalysisConfig.h:986
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
Analysis_Tier0::setvertices
void setvertices(int numvtx)
Definition: Analysis_Tier0.h:52
Filter_RoiSelector.h
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
GenEvent.h
plotting.plot_kinematics.run_number
run_number
Definition: plot_kinematics.py:29
ElectronContainer.h
T_AnalysisConfig_Tier0::m_containTracks
bool m_containTracks
Definition: T_AnalysisConfig_Tier0.h:1249
runLayerRecalibration.chain
chain
Definition: runLayerRecalibration.py:175
Trk::z
@ z
global position (cartesian)
Definition: ParamDefs.h:63
TrigCompositeUtils::passed
bool passed(DecisionID id, const DecisionIDContainer &idSet)
checks if required decision ID is in the set of IDs in the container
Definition: TrigCompositeUtilsRoot.cxx:117
T_AnalysisConfig< T >::m_provider
T * m_provider
Definition: T_AnalysisConfig.h:955
TrigTrackSelector::clear
virtual void clear() override
Definition: TrigTrackSelector.h:102
xAOD::EventInfo_v1::eventNumber
uint64_t eventNumber() const
The current event's event number.
TrackAnalysis::finalise
virtual void finalise()=0
T_AnalysisConfig_Tier0::setShifter
void setShifter(bool b)
Definition: T_AnalysisConfig_Tier0.h:152
TIDA::Roi::addTracks
void addTracks(const std::vector< TIDA::Track > &tracks)
accessors for the track vector
Definition: TIDARoi.h:46
T_AnalysisConfig< T >::m_tdt
ToolHandle< Trig::TrigDecisionTool > * m_tdt
Definition: T_AnalysisConfig.h:957
TIDAEvent.h
Basic event class to contain a vector of chains for trigger analysis
T_AnalysisConfig_Tier0::finalize
virtual void finalize()
Definition: T_AnalysisConfig_Tier0.h:1200
TruthParticleContainer.h
TrackFilter
Definition: TrackFilter.h:26
HepMC::signal_process_id
int signal_process_id(const GenEvent &e)
Definition: GenEvent.h:513
TrackSelector::size
unsigned size() const
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:63
Filter_etaPT
Definition: Filter_etaPT.h:27
Analysis_Tier0.h
T_AnalysisConfig_Tier0::setRunPurity
void setRunPurity(bool b)
Definition: T_AnalysisConfig_Tier0.h:150
GenVertex.h
T_AnalysisConfig_Tier0::m_chainNames
std::vector< ChainString > m_chainNames
Definition: T_AnalysisConfig_Tier0.h:1221
TIDAVertex.h
ChainString::head
std::string head() const
Definition: ChainString.h:33
JiveXML::Event
struct Event_t Event
Definition: ONCRPCServer.h:65
MuonContainer.h
Filters.h
T_AnalysisConfig< T >::analysis
const TrackAnalysis * analysis() const
Definition: T_AnalysisConfig.h:256
Analysis_Tier0
Definition: Analysis_Tier0.h:30
Analysis_Tier0::execute_vtx
virtual void execute_vtx(const std::vector< TIDA::Vertex * > &vtx0, const std::vector< TIDA::Vertex * > &vtx1, const TIDA::Event *tevt=0)
Definition: Analysis_Tier0.cxx:675
Analysis_Tier0::debug
bool debug() const
Definition: Analysis_Tier0.h:66
TIDARoiDescriptor
Describes the Region of Ineterest geometry It has basically 8 parameters.
Definition: TIDARoiDescriptor.h:42
T_AnalysisConfig_Tier0::m_doTaus
bool m_doTaus
Definition: T_AnalysisConfig_Tier0.h:1228
TrigRoiDescriptor
nope - should be used for standalone also, perhaps need to protect the class def bits #ifndef XAOD_AN...
Definition: TrigRoiDescriptor.h:56
ChainString
Definition: ChainString.h:23
TIDATools.h
useful tool for the TrigInDetAnalysis class code
TrigTrackSelector
L2 tracks.
Definition: TrigTrackSelector.h:58
T_AnalysisConfig_Tier0::m_runPurity
bool m_runPurity
Definition: T_AnalysisConfig_Tier0.h:1241
ExpertMethods.h
T_AnalysisConfig< T >::getUseHighestPT
bool getUseHighestPT() const
Definition: T_AnalysisConfig.h:277
Filter_AcceptAll.h
T_AnalysisConfig.h
HLTResult.h
Associator_BestMatch.h
TIDA::Event
Definition: TIDAEvent.h:33
T_AnalysisConfig_Tier0::m_outputFileName
std::string m_outputFileName
Definition: T_AnalysisConfig_Tier0.h:1234
TIDA::Event::lumi_block
void lumi_block(unsigned lb)
Definition: TIDAEvent.h:44
GenParticle.h
xAOD::EventInfo_v1::runNumber
uint32_t runNumber() const
The current event's run number.
T_AnalysisConfig_Tier0::m_doBjets
bool m_doBjets
Definition: T_AnalysisConfig_Tier0.h:1229
TIDA::Chain::addRoi
void addRoi(TIDA::Roi &roi)
add and roi by root dictionary class
Definition: TIDAChain.h:44
T_AnalysisConfig_Tier0::m_doTauThreeProng
bool m_doTauThreeProng
Definition: T_AnalysisConfig_Tier0.h:1231
PlotCalibFromCool.ie
ie
Definition: PlotCalibFromCool.py:420
covarianceTool.filter
filter
Definition: covarianceTool.py:514
Trig::FeatureContainer
Definition: FeatureContainer.h:54
Analysis_Tier0::execute
virtual void execute(const std::vector< TIDA::Track * > &referenceTracks, const std::vector< TIDA::Track * > &testTracks, TrackAssociator *associator)
Definition: Analysis_Tier0.cxx:473
TIDA::Chain::back
TIDA::Roi & back()
Definition: TIDAChain.h:60
T_AnalysisConfig_Tier0::T_AnalysisConfig_Tier0
T_AnalysisConfig_Tier0(const std::string &analysisInstanceName, const std::string &testChainName, const std::string &testType, const std::string &testKey, const std::string &referenceChainName, const std::string &referenceType, const std::string &referenceKey, TrackFilter *testFilter, TrackFilter *referenceFilter, TrackAssociator *associator, TrackAnalysis *analysis)
Definition: T_AnalysisConfig_Tier0.h:97
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
FilterPT
void FilterPT(std::vector< T * > &tracks, double pt)
Definition: TIDATools.h:41
TIDDirectory.h
class to keep a directory for each object in a root sort of way, but needed to keep the root objects ...
T_AnalysisConfig_Tier0::m_NRois
int m_NRois
output stats
Definition: T_AnalysisConfig_Tier0.h:1237
EventID.h
This class provides a unique identification for each event, in terms of run/event number and/or a tim...
T_AnalysisConfig_Tier0::~T_AnalysisConfig_Tier0
virtual ~T_AnalysisConfig_Tier0()
Definition: T_AnalysisConfig_Tier0.h:148
T_AnalysisConfig_Tier0::loop
virtual void loop()
Definition: T_AnalysisConfig_Tier0.h:185
TIDA::Event::addChain
void addChain(const std::string &chainname)
methods to add and access chains
Definition: TIDAEvent.h:67
TIDA::Event::time_stamp
void time_stamp(unsigned t)
Definition: TIDAEvent.h:45
T_AnalysisConfig_Tier0::m_pTthreshold
double m_pTthreshold
Definition: T_AnalysisConfig_Tier0.h:1245
McEventCollection.h
TIDA::Event::back
TIDA::Chain & back()
get the last chain from the vector
Definition: TIDAEvent.h:89
lumiFormat.i
int i
Definition: lumiFormat.py:92
TIDA::Event::event_number
void event_number(unsigned long long e)
Definition: TIDAEvent.h:43
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
T_AnalysisConfig< T >::m_analysis
TrackAnalysis * m_analysis
Definition: T_AnalysisConfig.h:984
T_AnalysisConfig< T >::getVtxIndex
int getVtxIndex() const
Definition: T_AnalysisConfig.h:280
TrigInDetTrackTruthMap
Definition: TrigInDetTrackTruthMap.h:38
TrackAnalysis
Definition: TrackAnalysis.h:32
ParticleGun_EoverP_Config.pid
pid
Definition: ParticleGun_EoverP_Config.py:62
find_tgc_unfilled_channelids.ip
ip
Definition: find_tgc_unfilled_channelids.py:3
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
Filter_etaPT.h
HighestPTOnly
void HighestPTOnly(std::vector< T * > &tracks)
Definition: TIDATools.h:20
TauJetContainer.h
T_AnalysisConfig< T >::m_keepAllEvents
bool m_keepAllEvents
Definition: T_AnalysisConfig.h:993
VxContainer.h
T_AnalysisConfig_Tier0::m_doElectrons
bool m_doElectrons
Definition: T_AnalysisConfig_Tier0.h:1227
VxContainer
Definition: VxContainer.h:28
TrackAnalysis::setBeamRef
void setBeamRef(double x, double y, double z=0)
set the beamline positions
Definition: TrackAnalysis.h:105
Filter_True
default simple filter which accepts all tracks
Definition: Filters.h:26
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
xAOD::EventInfo_v1::lumiBlock
uint32_t lumiBlock() const
The current event's luminosity block number.
T_AnalysisConfig_Tier0::m_event
TIDA::Event * m_event
Definition: T_AnalysisConfig_Tier0.h:1219
T_AnalysisConfig_Tier0::m_doOffline
bool m_doOffline
Definition: T_AnalysisConfig_Tier0.h:1225
VtxAnalysis.h
T_AnalysisConfig_Tier0::m_testType
std::string m_testType
Definition: T_AnalysisConfig_Tier0.h:1223
TIDA::Vertex
Definition: TIDAVertex.h:23
TrigTrackSelector::selectTrack
bool selectTrack(const TrigInDetTrack *track, const TrigInDetTrackTruthMap *truthMap=0)
neater code to make use of vector function also for a single ancestor pdgid, instead of the full code...
Definition: TrigTrackSelector.cxx:116
grepfile.ic
int ic
Definition: grepfile.py:33
xAOD::EventInfo_v1::averageInteractionsPerCrossing
float averageInteractionsPerCrossing() const
Average interactions per crossing for all BCIDs - for out-of-time pile-up.
Definition: EventInfo_v1.cxx:397
T_AnalysisConfig< T >::retrieve
StatusCode retrieve(Collection const *&collection, const std::string &key="")
Definition: T_AnalysisConfig.h:571
T_AnalysisConfig< T >::m_associator
TrackAssociator * m_associator
Definition: T_AnalysisConfig.h:983
TrackSelector::tracks
const std::vector< TIDA::Track * > & tracks() const
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:53
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
T_AnalysisConfig_Tier0::m_shifter
bool m_shifter
Definition: T_AnalysisConfig_Tier0.h:1243
T_AnalysisConfig_Tier0::book
virtual void book()
Definition: T_AnalysisConfig_Tier0.h:1189
ChainString.h
EventInfo
This class provides general information about an event. Event information is provided by the accessor...
Definition: EventInfo/EventInfo/EventInfo.h:42
Filter_Combined
Definition: Filters.h:225
TIDA::Chain
Definition: TIDAChain.h:28
T_AnalysisConfig_Tier0::m_analyses
std::vector< Analysis_Tier0 * > m_analyses
Definition: T_AnalysisConfig_Tier0.h:1222
DataHandle
an iterator over instances of a given type in StoreGateSvc. It d-casts and caches locally the pointed...
Definition: DataHandle.h:42
TIDARoiDescriptorBuilder
Definition: TIDARoiDescriptorBuilder.h:21
TIDA::Event::addVertex
void addVertex(const TIDA::Vertex &v)
Definition: TIDAEvent.h:71
EventInfo.h
TIDA::Event::clear
void clear()
clear the event
Definition: TIDAEvent.h:86
T_AnalysisConfig_Tier0::m_first
bool m_first
Definition: T_AnalysisConfig_Tier0.h:1247
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
Filter_Combined::containtracks
void containtracks(bool b=true)
set / unset the flag to determine whether tracks should be fully contained in the RoI or not
Definition: Filters.h:242
TrackAnalysis::setroi
void setroi(TIDARoiDescriptor *r)
Definition: TrackAnalysis.h:135
TIDA::Event::mu
void mu(double m)
Definition: TIDAEvent.h:47
python.copyTCTOutput.chains
chains
Definition: copyTCTOutput.py:81
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
T_AnalysisConfig_Tier0::useBeamCondSvc
void useBeamCondSvc(bool b)
Definition: T_AnalysisConfig_Tier0.h:154
TrackParticle.h
Filter_Combined::setRoi
void setRoi(TIDARoiDescriptor *r)
Definition: Filters.h:236
T_AnalysisConfig_Tier0::m_NTestTracks
int m_NTestTracks
Definition: T_AnalysisConfig_Tier0.h:1239
T_AnalysisConfig_Tier0::m_tauEtCutOffline
bool m_tauEtCutOffline
Definition: T_AnalysisConfig_Tier0.h:1232
T_AnalysisConfig_Tier0::m_NRefTracks
int m_NRefTracks
Definition: T_AnalysisConfig_Tier0.h:1238
T_AnalysisConfig_Tier0::m_hasTruthMap
bool m_hasTruthMap
Definition: T_AnalysisConfig_Tier0.h:1230
DEBUG
#define DEBUG
Definition: page_access.h:11
python.TriggerAPI.TriggerAPISession.chainName
chainName
Definition: TriggerAPISession.py:353
TrigTrackSelector::setBeamline
void setBeamline(double x, double y, double z=0)
Definition: TrigTrackSelector.h:94
xAOD::EventInfo_v1::timeStamp
uint32_t timeStamp() const
POSIX time in seconds from 1970. January 1st.
T_AnalysisConfig_Tier0::m_useBeamCondSvc
bool m_useBeamCondSvc
Definition: T_AnalysisConfig_Tier0.h:1217
T_AnalysisConfig_Tier0
Definition: T_AnalysisConfig_Tier0.h:87
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
T_AnalysisConfig< T >::filterOnRoi
bool filterOnRoi() const
Definition: T_AnalysisConfig.h:282
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:790
T_AnalysisConfig< T >::name
const std::string name() const
Definition: T_AnalysisConfig.h:233
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
TIDA::Associator::match
virtual void match(const std::vector< T * > &s1, const std::vector< S * > &s2)=0
python.StandardJetMods.vr
vr
Definition: StandardJetMods.py:276
TIDA::Event::bunch_crossing_id
void bunch_crossing_id(unsigned b)
Definition: TIDAEvent.h:46
Trk::x
@ x
Definition: ParamDefs.h:61
T_AnalysisConfig< T >::m_filters
std::vector< std::vector< TrackFilter * > > m_filters
Definition: T_AnalysisConfig.h:977
xAOD::EventInfo_v1::bcid
uint32_t bcid() const
The bunch crossing ID of the event.
TIDA::Event::run_number
void run_number(unsigned r)
accessors
Definition: TIDAEvent.h:42
T_AnalysisConfig< T >::m_selectorTest
TrigTrackSelector * m_selectorTest
Definition: T_AnalysisConfig.h:980
python.compressB64.c
def c
Definition: compressB64.py:93
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
T_AnalysisConfig_Tier0::containTracks
void containTracks(bool b)
Definition: T_AnalysisConfig_Tier0.h:156
T_AnalysisConfig_Tier0::m_doMuons
bool m_doMuons
Definition: T_AnalysisConfig_Tier0.h:1226
TrigRoiDescriptorCollection.h
T_AnalysisConfig_Tier0::_analysis
Analysis_Tier0 * _analysis
Definition: T_AnalysisConfig_Tier0.h:160
TrackParticleContainer.h
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
T_AnalysisConfig< T >::requireDecision
bool requireDecision() const
Definition: T_AnalysisConfig.h:286
T_AnalysisConfig
Definition: T_AnalysisConfig.h:59
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37