ATLAS Offline Software
MuonRetriever.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 #include "CLHEP/Units/SystemOfUnits.h"
8 
10 
11 // for associations:
13 #include "CaloEvent/CaloClusterContainer.h"
14 
15 namespace JiveXML {
16 
23  MuonRetriever::MuonRetriever(const std::string& type,const std::string& name,const IInterface* parent):
25  m_typeName("Muon"){
26 
27  //Only declare the interface
28  declareInterface<IDataRetriever>(this);
29 
30  declareProperty("StoreGateKey", m_sgKey= "Muons",
31  "Collection to be first in output, shown in Atlantis without switching");
32  }
33 
38  StatusCode MuonRetriever::retrieve(ToolHandle<IFormatTool> &FormatTool) {
39 
40  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "in retrieveAll()" << endmsg;
41 
43  const Analysis::MuonContainer* muCont;
44 
45  //obtain the default collection first
46  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Trying to retrieve " << dataTypeName() << " (" << m_sgKey << ")" << endmsg;
47  StatusCode sc = evtStore()->retrieve(muCont, m_sgKey);
48  if (sc.isFailure() ) {
49  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Collection " << m_sgKey << " not found in SG " << endmsg;
50  }else{
51  DataMap data = getData(muCont);
52  if ( FormatTool->AddToEvent(dataTypeName(), m_sgKey, &data).isFailure()){
53  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Collection " << m_sgKey << " not found in SG " << endmsg;
54  }else{
55  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << dataTypeName() << " (" << m_sgKey << ") Muon retrieved" << endmsg;
56  }
57  }
58 
59  //obtain all other collections from StoreGate
60  if (( evtStore()->retrieve(iterator, end)).isFailure()){
61  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Unable to retrieve iterator for Jet collection" << endmsg;
62 // return StatusCode::WARNING;
63  }
64 
65  for (; iterator!=end; ++iterator) {
66  // hack to remove CaloMuons, jpt 31Mar10
67  if ((iterator.key() != m_sgKey) && (iterator.key() != "CaloMuonCollection") &&
68  (iterator.key() != "CaloESDMuonCollection" )) {
70  // if (iterator.key()!=m_sgKey) {
71  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Trying to retrieve all " << dataTypeName() << " (" << iterator.key() << ")" << endmsg;
73  if ( FormatTool->AddToEvent(dataTypeName(), iterator.key(), &data).isFailure()){
74  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Collection " << iterator.key() << " not found in SG " << endmsg;
75  }else{
76  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << dataTypeName() << " (" << iterator.key() << ") Muon retrieved" << endmsg;
77  }
78  }
79  }
80  //All collections retrieved okay
81  return StatusCode::SUCCESS;
82  }
83 
84 
90 
91  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "in getData()" << endmsg;
92 
94 
95  DataVect phi; phi.reserve(muoncont->size());
96  DataVect eta; eta.reserve(muoncont->size());
97  DataVect pt; pt.reserve(muoncont->size());
98  DataVect mass; mass.reserve(muoncont->size());
99  DataVect energy; energy.reserve(muoncont->size());
100  DataVect px; px.reserve(muoncont->size());
101  DataVect py; py.reserve(muoncont->size());
102  DataVect pz; pz.reserve(muoncont->size());
103 
104  DataVect dataType; dataType.reserve(muoncont->size());
105  DataVect chi2; chi2.reserve(muoncont->size());
106  DataVect pdgId; pdgId.reserve(muoncont->size());
107  DataVect etConeIsol; etConeIsol.reserve(muoncont->size());
108  DataVect author; author.reserve(muoncont->size());
109 
110  // for associations:
111  DataVect clusterKeyVec; clusterKeyVec.reserve(muoncont->size());
112  DataVect clusterIndexVec; clusterIndexVec.reserve(muoncont->size());
113  DataVect trackKeyVec; trackKeyVec.reserve(muoncont->size());
114  DataVect trackIndexVec; trackIndexVec.reserve(muoncont->size());
115 
116  Analysis::MuonContainer::const_iterator muonItr = muoncont->begin();
117  Analysis::MuonContainer::const_iterator muonItrE = muoncont->end();
118 
119  int MCdataType = 1;
120  std::string clusterKey = "none"; // Storegate key of container
121  int clusterIndex = -1; // index number inside the container
122  std::string trackKey = "none"; // Storegate key of container
123  int trackIndex = -1; // index number inside the container
124 
125  for (; muonItr != muonItrE; ++muonItr) {
126  phi.push_back(DataType((*muonItr)->phi()));
127  eta.push_back(DataType((*muonItr)->eta()));
128  pt.push_back(DataType((*muonItr)->pt()/CLHEP::GeV));
129  mass.push_back(DataType((*muonItr)->m()/CLHEP::GeV));
130  energy.push_back( DataType((*muonItr)->e()/CLHEP::GeV ) );
131  px.push_back( DataType((*muonItr)->px()/CLHEP::GeV ) );
132  py.push_back( DataType((*muonItr)->py()/CLHEP::GeV ) );
133  pz.push_back( DataType((*muonItr)->pz()/CLHEP::GeV ) );
134 
135  pdgId.push_back( DataType((*muonItr)->pdgId() ) );
136 
137  std::string muonAuthor = "none";
138  if (( (*muonItr)->author()) == 0){ muonAuthor = "unknown"; }
139  if (( (*muonItr)->author()) == 1){ muonAuthor = "highpt"; }
140  if (( (*muonItr)->author()) == 2){ muonAuthor = "lowpt"; }
141  author.push_back( DataType( muonAuthor ) );
142 
143  MCdataType = (*muonItr)->dataType();
144  dataType.push_back( DataType( MCdataType ) );
145 
146 // check: full simulation input file (1) or fast (0)
147 // code from:
148 // PhysicsAnalysis/AnalysisCommon/AnalysisExamples/src/MiscellaneousExamples.cxx
149  if (MCdataType != 3){ // full simulation
150  chi2.push_back( DataType((*muonItr)->matchChi2OverDoF() ) );
151  etConeIsol.push_back( DataType(
152  ((*muonItr)->parameter(MuonParameters::etcone20))/CLHEP::GeV ) );
153 
154 // print some more variables, taken from:
155 // PhysicsAnalysis/EventViewBuilder/EventViewUserData/EVUDMuonAll
156 
157  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) <<
158  " Muon: matchChi2OverDoF: " << (*muonItr)->matchChi2OverDoF() <<
159  ", matchChi2: " << (*muonItr)->matchChi2() <<
160  ", fitChi2: " << (*muonItr)->fitChi2() <<
161  ", isCombined: " << (int)(*muonItr)->isCombinedMuon() << endmsg;
162 
163 // parameters for associations:
164 // stricly speaking, these should be ElementLinkVectors (see TauJet association)
165 // const ElementLinkVector<Rec::TrackParticleContainer> trackLink = (*muonItr)->trackLinkVector();
166 // necessary to change ?
167 
168  const ElementLink<Rec::TrackParticleContainer> trackLink = (*muonItr)->inDetTrackLink();
169  if (trackLink.isValid()) {
170  trackKey = trackLink.dataID(); // Storegate key of
171  trackIndex = trackLink.index(); // index into the contianer
172  trackKeyVec.push_back(DataType( trackKey ));
173  trackIndexVec.push_back(DataType( trackIndex ));
174  } else {
175  trackKeyVec.push_back( DataType( "none" ) );
176  trackIndexVec.push_back( DataType( -1 ) );
177  }
178  const ElementLink<CaloClusterContainer> clusterLink = (*muonItr)->clusterLink();
179  if (clusterLink.isValid()) {
180  clusterKey = clusterLink.dataID(); // Storegate key of container
181  clusterIndex = clusterLink.index(); // index number inside the container
182  clusterKeyVec.push_back(DataType( clusterKey ));
183  clusterIndexVec.push_back(DataType( clusterIndex ));
184  } else { // no clusterLink
185  clusterKeyVec.push_back(DataType( "none" ));
186  clusterIndexVec.push_back(DataType( -1 ));
187  }
188 
189  } else { // fast simulation
190  chi2.push_back( DataType( 0 ) );
191  etConeIsol.push_back( DataType( 0 ) );
192  trackKeyVec.push_back(DataType( "none" ));
193  trackIndexVec.push_back(DataType( -1 ));
194  clusterKeyVec.push_back(DataType( "none" ));
195  clusterIndexVec.push_back(DataType( -1 ));
196  }
197  }
198  // four-vectors
199  DataMap["phi"] = phi;
200  DataMap["eta"] = eta;
201  DataMap["pt"] = pt;
202  DataMap["energy"] = energy;
203  DataMap["mass"] = mass;
204  DataMap["px"] = px;
205  DataMap["py"] = py;
206  DataMap["pz"] = pz;
207 
208  // special muon parameters
209  DataMap["chi2"] = chi2;
210  DataMap["etConeIsol"] = etConeIsol;
211  DataMap["author"] = author;
212  DataMap["pdgId"] = pdgId;
213  DataMap["dataType"] = dataType;
214  // further details and associations
215  DataMap["clusterKey"] = clusterKeyVec;
216  DataMap["clusterIndex"] = clusterIndexVec;
217  DataMap["trackKey"] = trackKeyVec;
218  DataMap["trackIndex"] = trackIndexVec;
219 
220  if (msgLvl(MSG::DEBUG)) {
221  msg(MSG::DEBUG) << dataTypeName() << " retrieved with " << phi.size() << " entries"<< endmsg;
222  }
223 
224  //All collections retrieved okay
225  return DataMap;
226 
227  } // retrieve
228 
229  //--------------------------------------------------------------------------
230 
231 } // JiveXML namespace
JiveXML::MuonRetriever::m_sgKey
std::string m_sgKey
Definition: MuonRetriever.h:51
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
MuonParameters::etcone20
@ etcone20
Definition: MuonParamDefs.h:114
test_pyathena.px
px
Definition: test_pyathena.py:18
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
JiveXML::MuonRetriever::retrieve
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool)
Retrieve all the data.
Definition: MuonRetriever.cxx:38
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
JiveXML::DataVect
std::vector< DataType > DataVect
Defines a map with a key and a vector of DataType objects e.g.
Definition: DataType.h:58
DataType
OFFLINE_FRAGMENTS_NAMESPACE::PointerType DataType
Definition: RoIBResultByteStreamTool.cxx:25
MuonContainer.h
test_pyathena.pt
pt
Definition: test_pyathena.py:11
downloadSingle.dataType
string dataType
Definition: downloadSingle.py:18
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
JiveXML::DataMap
std::map< std::string, DataVect > DataMap
Definition: DataType.h:59
PowhegPy8EG_H2a.pdgId
dictionary pdgId
Definition: PowhegPy8EG_H2a.py:128
dqt_zlumi_pandas.mass
mass
Definition: dqt_zlumi_pandas.py:170
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
ParticleGun_FastCalo_ChargeFlip_Config.energy
energy
Definition: ParticleGun_FastCalo_ChargeFlip_Config.py:78
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition: comparitor.cxx:522
JiveXML::MuonRetriever::getData
const DataMap getData(const Analysis::MuonContainer *)
Retrieve basic parameters, mainly four-vectors, for each collection.
Definition: MuonRetriever.cxx:89
Amg::pz
@ pz
Definition: GeoPrimitives.h:40
test_pyathena.parent
parent
Definition: test_pyathena.py:15
Analysis::MuonContainer
definition of StoreGate container holding a vector of Analysis::Muon
Definition: Reconstruction/MuonIdentification/muonEvent/muonEvent/MuonContainer.h:38
JiveXML
This header is shared inbetween the C-style server thread and the C++ Athena ServerSvc.
Definition: BadLArRetriever.cxx:21
Amg::py
@ py
Definition: GeoPrimitives.h:39
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
CaloCondBlobAlgs_fillNoiseFromASCII.author
string author
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:26
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
MuonRetriever.h
JiveXML::MuonRetriever::dataTypeName
virtual std::string dataTypeName() const
Return the name of the data type.
Definition: MuonRetriever.h:45
AthAlgTool
Definition: AthAlgTool.h:26
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
SG::ConstIterator
Definition: SGIterator.h:163
JiveXML::MuonRetriever::MuonRetriever
MuonRetriever(const std::string &type, const std::string &name, const IInterface *parent)
Standard Constructor.
Definition: MuonRetriever.cxx:23
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
TrackParticleContainer.h