ATLAS Offline Software
TileTrackFilterAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 /*
6  * File: TileTrackFilterAlg.cxx
7  * Author: Marco van Woerden <mvanwoer@cern.ch>, Gang Qin <gang.qin@cern.ch>
8  *
9  * Created in September 2012
10  */
11 
12 // INCLUDE HEADER
14 #include "TileTrackFilterAlg.h"
15 
16 //===============================================================================================
17 TileTrackFilterAlg::TileTrackFilterAlg( const std::string& name,ISvcLocator* pSvcLocator ):
18  AthAlgorithm( name, pSvcLocator ),
19  m_track_iso_tool("TrackIsolationTool"){
20 //==============================================================================================
21  declareProperty("track_iso_tool", m_track_iso_tool );
22  declareProperty("InputTracksName", m_trackContainerName = "TrackParticleCandidate"); // INPUT TRACK CONTAINER
23  declareProperty("OutputTracksName", m_outputTracksName = "SelectedTracks"); // OUTPUT TRACK CONTAINER
24 
25  // CUTS
26  declareProperty("cut_p", m_cutP = 500.); // CUT IN MOMENTUM
27  declareProperty("cut_eta", m_cutEta = 2.4); // CUT IN ETA
28  declareProperty("cut_sizeofcone", m_cutSizeOfCone = 0.4); // CUT IN CONE SIZE
29 
30 } // TileTrackFilterAlg::TileTrackFilterAlg
31 
32 //==========================================
34 //==========================================
35  // INITIALISE THE TRACK FILTER ALGORITHM
36 
37  ATH_MSG_INFO("TileTrackFilterAlg::initialize() ");
38 
39  CHECK(m_track_iso_tool.retrieve());
40 
41  return StatusCode::SUCCESS;
42 } // TileTrackFilterAlg::initialize()
43 
44 //=======================================
46 //=======================================
47 
48  // TRACKPARTICLE OUTPUT CONTAINER
49  auto outputCont = new ConstDataVector<TRACKCONTAINER>( SG::VIEW_ELEMENTS );
50  CHECK( evtStore()->record( outputCont, m_outputTracksName ) );
51 
52  // NUMBER OF TRACKPARTICLECANDIDATES
53 
54  //bool debug = false;
55 
56  // GET HANDLE ON TRACKPARTICLE CONTAINER AND RETRIEVE FROM STOREGATE
57  const TRACKCONTAINER* trackcoll = 0;
58  CHECK( evtStore()->retrieve( trackcoll, m_trackContainerName ) );
59 
60  // ALLOW FOR MULTIPLE TRACKPARTICLE TYPES
61  std::vector<TRACKCONTAINER::const_iterator> start;
62  std::vector<TRACKCONTAINER::const_iterator> stop;
63  start.push_back(trackcoll->begin());
64  stop.push_back(trackcoll->end());
65 
66  // LOOP OVER TRACKPARTICLE TYPES
67  for(unsigned int i=0;i<start.size();++i){
70  // LOOP OVER TRACKS
71  for( ; f_track != l_track; ++f_track ){
72  const TRACK* trackPointer = ( *f_track);
73  if(!trackPointer){
74  ATH_MSG_INFO("NO TRACK FOUND.");
75  continue;
76  } // IF
77  // CHECK WHETHER TRACK SHOULD BE ACCEPTED
78  if(accept(trackPointer)){
79  if(std::find(outputCont->begin(),outputCont->end(),trackPointer) == outputCont->end()){
80  outputCont->push_back(trackPointer);
81  } // IF
82  } // IF
83  } // FOR (TRACKS)
84  } // FOR (TRACK TYPES)
85 
86  return StatusCode::SUCCESS;
87 } // TileTrackFilterAlg::execute()
88 
89 //=====================================================
91 //=====================================================
92  int nucone = 0; // FIXME: NEED TO USE xAOD tool m_track_iso_tool->trackIsolationNumberOfTrack(p, m_cutSizeOfCone);
93  float momentum = p->p4().P(); // for xAOD::TrackParticle
94  //float momentum = p->p();
95  float eta = p->eta();
96  // cout<<"num de trazas "<<nucone<<endl;
97  // if( nucone != 1 || momentum < m_cutP || fabs(eta) > m_cutEta ){
98  // return false;
99  // } // IF
100  // return true;
101 
102  if (nucone==0 && momentum >= m_cutP && fabs(eta) <= m_cutEta){
103  // cout<<"solo ella "<<nucone<<endl;
104  return true;
105  }
106  else{
107  // cout<<"mas de ella misma "<<nucone<<endl;
108  return false;
109  }
110  /*
111  int tracksnum = h->tracks_n;
112  for(int tracki=0; tracki<tracksnum;tracki++){
113  for(int trackii=0; trackii<tracksnum; trackii++){
114  if(trackii==tracki) continue;
115 
116  for(int layy=4; layy<7;layy++){
117  float etatr=h->tracks_eta_layer->at(trackii).at(layy);
118  float phitr=h->tracks_phi_layer->at(trackii).at(layy);
119  float delta2=dist(phitr,phitrack,etatr,etatrack);
120  if(delta2<isolation){
121  isolation=delta2;
122  indextrack=trackii;
123  indexlay=layy;
124  energyclosesttrack=h->tracks_pt->at(trackii);
125  }
126  }
127  }
128  }
129  */
130 } // TileTrackFilterAlg::accept
131 
132 //========================================
134 //========================================
135  return StatusCode::SUCCESS;
136 } // TileTrackFilterAlg::finalize()
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
TileTrackFilterAlg::m_outputTracksName
std::string m_outputTracksName
Definition: TileTrackFilterAlg.h:70
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
TileTrackFilterAlg::m_cutSizeOfCone
float m_cutSizeOfCone
Definition: TileTrackFilterAlg.h:75
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
TileTrackFilterAlg::m_cutEta
float m_cutEta
Definition: TileTrackFilterAlg.h:74
PixelModuleFeMask_create_db.stop
int stop
Definition: PixelModuleFeMask_create_db.py:76
TileTrackFilterAlg.h
TileTrackFilterAlg::initialize
virtual StatusCode initialize()
Definition: TileTrackFilterAlg.cxx:33
TileTrackFilterAlg::execute
virtual StatusCode execute()
Definition: TileTrackFilterAlg.cxx:45
GeoPrimitives.h
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
ParticleGun_EoverP_Config.momentum
momentum
Definition: ParticleGun_EoverP_Config.py:63
lumiFormat.i
int i
Definition: lumiFormat.py:92
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TileTrackFilterAlg::m_trackContainerName
std::string m_trackContainerName
Definition: TileTrackFilterAlg.h:69
TileTrackFilterAlg::m_cutP
float m_cutP
Definition: TileTrackFilterAlg.h:73
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
DataVector< xAOD::TrackParticle_v1 >
AthAlgorithm
Definition: AthAlgorithm.h:47
TileTrackFilterAlg::m_track_iso_tool
ToolHandle< xAOD::ITrackIsolationTool > m_track_iso_tool
Definition: TileTrackFilterAlg.h:78
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
TileTrackFilterAlg::finalize
virtual StatusCode finalize()
Definition: TileTrackFilterAlg.cxx:133
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
ConstDataVector
DataVector adapter that acts like it holds const pointers.
Definition: ConstDataVector.h:76
TileTrackFilterAlg::TileTrackFilterAlg
TileTrackFilterAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TileTrackFilterAlg.cxx:17
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
TileTrackFilterAlg::accept
bool accept(const TRACK *p)
Definition: TileTrackFilterAlg.cxx:90