ATLAS Offline Software
TileCosmicMuonFilterAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 /*
6  * File: TileCosmicMuonFilterAlg.cxx
7  * Author: Carlos.Solans@cern.ch
8  * Author: Archil.Durglishvili@cern.ch
9  */
10 
13 #include "CaloGeoHelpers/CaloSampling.h"
16 
17 using namespace std;
18 using namespace xAOD;
19 
20 //=======================================
21 TileCosmicMuonFilterAlg::TileCosmicMuonFilterAlg( const std::string& name, ISvcLocator* pSvcLocator ):
22  AthAlgorithm( name, pSvcLocator ), m_trackInCalo("TrackExtrapolator"){
23 //=======================================
24  declareProperty("InputTracks", m_inputTracks = "CombinedMuonTrackParticles");
25  declareProperty("InputMuons", m_inputMuons = "Muons");
26  declareProperty("OutputMuons", m_outputMuons = "SelectedMuons");
27  declareProperty("OutputTracks", m_outputTracks = "SelectedTracks");
28  declareProperty("InputCells", m_inputCells = "AODCellContainer");
29  declareProperty("OutputCells", m_outputCells = "SelectedCells");
30  declareProperty("MuonCells", m_muonCells = "muonCells");
31  declareProperty("MuonPtCut", m_muonPt = 10000.);
32  declareProperty("MuonEtaCut", m_muonEta = 1.7);
33  declareProperty("MuonCellR", m_muonCellR = 1.0);
34  declareProperty("DumpLArCells", m_dumpLarCells = false);
35  declareProperty("UseCuts", m_useCuts = false);
36  declareProperty("TrackTools", m_trackInCalo);
37  declareProperty("TrackType", m_trackType = 1);
38 }
39 
40 //=======================================
42 //=======================================
43  ATH_MSG_INFO("TileCosmicMuonFilterAlg::initialize()");
44 
45  CHECK(m_trackInCalo.retrieve());
46 
47  return StatusCode::SUCCESS;
48 }
49 
50 //=======================================
52 //=======================================
53  switch(m_trackType)
54  {
55  case 0: m_inputTracks = "CombinedMuonTrackParticles"; break;
56  case 1: m_inputTracks = "InDetTrackParticles" ; break;
57  case 2: m_inputTracks = "MuonSpectrometerTrackParticles" ; break;
58  default: m_inputTracks = "CombinedMuonTrackParticles"; break;
59  } // SWITCH
60 
61 
62  //Get the input tracks
63  const TRACKCONTAINER* inputTracks = 0;
65 
66  //Get the input Muons
67  const MUONCONTAINER* inputMuons = 0;
68  CHECK( evtStore()->retrieve( inputMuons, m_inputMuons ) );
69  ATH_MSG_INFO("Number of Muons: " << inputMuons->size());
70 
71  //Allocate the output Muons container
72  MUONCONTAINER* outputMuons = new MUONCONTAINER;
73  MUONAUXCONTAINER* outputAuxMuons = new MUONAUXCONTAINER;
74  outputMuons->setStore( outputAuxMuons );
75 
76 
77  //Allocate the output tracks container
78  TRACKCONTAINER * outputTracks = new TRACKCONTAINER;
79  TRACKAUXCONTAINER* outputAuxTracks = new TRACKAUXCONTAINER;
80  outputTracks->setStore( outputAuxTracks );
81 
82 
83  //Get input cells
84  const CELLCONTAINER* inputCells = 0;
85  CHECK( evtStore()->retrieve( inputCells, m_inputCells ) );
86 
87  //Allocate output cells container
89  CHECK( evtStore()->record( outputCells, m_outputCells ) );
90 
91  //Allocate cells container which will be refilled for every muon; temporary use only
93 
94 
95  //===============================================
96  const int Ncut=7;
97  int cut[Ncut];
98  for( int i = 0; i < Ncut; ++i) cut[i] = 0;
99  //===============================================
100 
101  //Select Muons and corresponding tracks
102  MUONCONTAINER::const_iterator muonItr = inputMuons->begin();
103  MUONCONTAINER::const_iterator muonEnd = inputMuons->end();
104  for(; muonItr != muonEnd; ++muonItr ){
105  const MUON* muon = *muonItr;
106  if(!muon){ ATH_MSG_INFO("Not a valid muon"); continue; }
107  //Cut 0: combined muon // probably it is better to use this cut
108  if( m_useCuts && muon->muonType()!=xAOD::Muon::Combined ) continue;
109  cut[0]++;
110  //Cut 1: transverse momentum
111  if( m_useCuts && muon->pt() < m_muonPt ) continue;
112  cut[1]++;
113  //Cut 2: Eta
114  if( m_useCuts && fabs(muon->eta()) > m_muonEta ) continue;
115  cut[2]++;
116  if( m_useCuts )
117  {
118  //============Cut 3: Criteria for the associated inner detector track (all muon collections)=========
121  if( !muon->passesIDCuts() ) continue;
122  }
123  cut[3]++;
124  //=====================================================================================================
125 
126  //===============save only muons which have the xAOD::TrackParticle of m_trackType===========
133  const TRACK* muon_track = 0;
134  switch(m_trackType)
135  {
136  case 0: muon_track = muon->trackParticle(xAOD::Muon::CombinedTrackParticle); break;
137  case 1: muon_track = muon->trackParticle(xAOD::Muon::InnerDetectorTrackParticle); break;
138  case 2: muon_track = muon->trackParticle(xAOD::Muon::MuonSpectrometerTrackParticle); break;
139  default: muon_track = muon->primaryTrackParticle(); break;
140  } // SWITCH
141  if(!muon_track) continue;
142  cut[4]++;
143  //====================================================================
144  //Fill the muon container
145  MUON* tmpMuon = new MUON();
146  tmpMuon->makePrivateStore( muon );
147  outputMuons->push_back(tmpMuon);
148  }// Muons loop
149 
150 
151  //Allocate output association between muons and cells
152  ASSOCCONTAINER* muonCells = new ASSOCCONTAINER_CONSTRUCTOR(outputMuons->size());
153  CHECK( evtStore()->record( muonCells, m_muonCells ) );
154  ASSOCCONTAINER::iterator assocItr = muonCells->begin();
155 
156 
157  muonItr = outputMuons->begin();
158  muonEnd = outputMuons->end();
159  for(; muonItr != muonEnd; ++muonItr ){
160  const MUON* muon = *muonItr;
161 
168  const TRACK* muon_track = 0;
169  switch(m_trackType)
170  {
171  case 0: muon_track = muon->trackParticle(xAOD::Muon::CombinedTrackParticle); break;
172  case 1: muon_track = muon->trackParticle(xAOD::Muon::InnerDetectorTrackParticle); break;
173  case 2: muon_track = muon->trackParticle(xAOD::Muon::MuonSpectrometerTrackParticle); break;
174  default: muon_track = muon->primaryTrackParticle(); break;
175  } // SWITCH
176  if(!muon_track) continue;
177 
178  //save the track associated to muon
179  TRACK* tmpTrack = new TRACK();
180  tmpTrack->makePrivateStore( muon_track );
181  outputTracks->push_back(tmpTrack);
182 
183 
184  tmpCells->clear();
185  m_trackInCalo->getCellsWithinConeAroundTrack(muon_track,inputCells, tmpCells, m_muonCellR , m_dumpLarCells );
186 
187  //loop over the selected cells in order to associat to muon
188  CELLCONTAINER::const_iterator cellItr = tmpCells->begin();
189  CELLCONTAINER::const_iterator cellEnd = tmpCells->end();
190  for( ;cellItr != cellEnd; ++cellItr){
191  const CELL* cell = *cellItr;
192  unsigned int i=0;
193  while(i!=outputCells->size()){if(outputCells->at(i)==cell){break;}i++;}
194  if(i==outputCells->size()){
195  outputCells->push_back(cell);
196  }
197  assocItr->push_back(i);//FIXME
198  }
199  ++assocItr;
200  }// output Muons loop
201 
202  //for( int i = 0; i < Ncut; ++i) ATH_MSG_INFO(" cut["<<i<<"] = "<< cut[i] );
203 
204  ATH_MSG_DEBUG("Number of selected Muons: "<< outputMuons->size() );
205  ATH_MSG_DEBUG("Number of selected cells: " << outputCells->size());
206 
207  CHECK( evtStore()->record(outputMuons, m_outputMuons) );
208  CHECK( evtStore()->record(outputAuxMuons,m_outputMuons+"Aux.") );
209  CHECK( evtStore()->record(outputTracks, m_outputTracks) );
210  CHECK( evtStore()->record(outputAuxTracks,m_outputTracks+"Aux.") );
211 
212  delete tmpCells; // clean up memory
213  return StatusCode::SUCCESS;
214 }
215 
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:195
ConstDataVector::at
ElementProxy at(size_type n)
Access an element, as an lvalue.
TileCosmicMuonFilterAlg::m_useCuts
bool m_useCuts
Definition: TileCosmicMuonFilterAlg.h:57
TileCosmicMuonFilterAlg::m_outputCells
std::string m_outputCells
Definition: TileCosmicMuonFilterAlg.h:51
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
xAOD::TrackParticleAuxContainer_v5
Temporary container used until we have I/O for AuxStoreInternal.
Definition: TrackParticleAuxContainer_v5.h:35
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
TileCosmicMuonFilterAlg::m_trackInCalo
ToolHandle< ITrackTools > m_trackInCalo
Definition: TileCosmicMuonFilterAlg.h:61
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
MUONCONTAINER
xAOD::MuonContainer MUONCONTAINER
Definition: TileCellFillerTool.h:38
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
TileCosmicMuonFilterAlg::execute
virtual StatusCode execute()
Definition: TileCosmicMuonFilterAlg.cxx:51
ConstDataVector::end
iterator end() noexcept
Return an iterator pointing past the end of the collection.
ConstDataVector.h
DataVector adapter that acts like it holds const pointers.
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
TileCosmicMuonFilterAlg::m_trackType
short m_trackType
Definition: TileCosmicMuonFilterAlg.h:58
TileCosmicMuonFilterAlg::m_inputCells
std::string m_inputCells
Definition: TileCosmicMuonFilterAlg.h:50
TRACKCONTAINER
xAOD::TrackParticleContainer TRACKCONTAINER
Definition: D3PDMaker/TileD3PDMaker/src/ITrackTools.h:87
ASSOCCONTAINER_CONSTRUCTOR
#define ASSOCCONTAINER_CONSTRUCTOR(size)
Definition: TileAssocFillerTool.h:23
TileCosmicMuonFilterAlg::m_outputTracks
std::string m_outputTracks
Definition: TileCosmicMuonFilterAlg.h:47
TileCosmicMuonFilterAlg::m_inputTracks
std::string m_inputTracks
Definition: TileCosmicMuonFilterAlg.h:46
xAOD
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
Definition: ICaloAffectedTool.h:24
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
TileCosmicMuonFilterAlg::m_outputMuons
std::string m_outputMuons
Definition: TileCosmicMuonFilterAlg.h:49
xAOD::MuonAuxContainer_v5
Temporary container used until we have I/O for AuxStoreInternal.
Definition: MuonAuxContainer_v5.h:31
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
ConstDataVector::clear
void clear()
Erase all the elements in the collection.
python.TrigInDetConfig.inputTracks
inputTracks
Definition: TrigInDetConfig.py:168
TileCosmicMuonFilterAlg::TileCosmicMuonFilterAlg
TileCosmicMuonFilterAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TileCosmicMuonFilterAlg.cxx:21
lumiFormat.i
int i
Definition: lumiFormat.py:92
MUONAUXCONTAINER
xAOD::MuonAuxContainer MUONAUXCONTAINER
Definition: TileCosmicMuonFilterAlg.h:27
TileCosmicMuonFilterAlg::m_muonCells
std::string m_muonCells
Definition: TileCosmicMuonFilterAlg.h:52
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
TileCosmicMuonFilterAlg::m_muonEta
float m_muonEta
Definition: TileCosmicMuonFilterAlg.h:54
BindingsTest.cut
cut
This script demonstrates how to call a C++ class from Python Also how to use PyROOT is shown.
Definition: BindingsTest.py:13
TileCosmicMuonFilterAlg::m_muonCellR
float m_muonCellR
Definition: TileCosmicMuonFilterAlg.h:55
MUON
xAOD::Muon MUON
D3PD INCLUDES.
Definition: TileCellFillerTool.h:37
TileCosmicMuonFilterAlg::initialize
virtual StatusCode initialize()
Definition: TileCosmicMuonFilterAlg.cxx:41
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
TRACKAUXCONTAINER
xAOD::TrackParticleAuxContainer TRACKAUXCONTAINER
Definition: D3PDMaker/TileD3PDMaker/src/ITrackTools.h:88
Trk::Combined
@ Combined
Definition: TrackSummaryTool.h:32
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
TileCosmicMuonFilterAlg::m_inputMuons
std::string m_inputMuons
Definition: TileCosmicMuonFilterAlg.h:48
ConstDataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
SG::AuxElement::makePrivateStore
void makePrivateStore()
Create a new (empty) private store for this object.
Definition: AuxElement.cxx:172
TileCosmicMuonFilterAlg::m_dumpLarCells
bool m_dumpLarCells
Definition: TileCosmicMuonFilterAlg.h:56
CaloCellContainer
Container class for CaloCell.
Definition: CaloCellContainer.h:55
TileCosmicMuonFilterAlg::m_muonPt
float m_muonPt
Definition: TileCosmicMuonFilterAlg.h:53
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
ConstDataVector
DataVector adapter that acts like it holds const pointers.
Definition: ConstDataVector.h:76
TileCosmicMuonFilterAlg.h
TRACK
xAOD::TrackParticle TRACK
Definition: D3PDMaker/TileD3PDMaker/src/ITrackTools.h:86
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
TrackingPrimitives.h
ConstDataVector::begin
iterator begin() noexcept
Return an iterator pointing at the beginning of the collection.
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
ASSOCCONTAINER
std::vector< std::vector< int > > ASSOCCONTAINER
Definition: TileAssocFillerTool.h:22