ATLAS Offline Software
Loading...
Searching...
No Matches
MuonCnvAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3*/
4
5// $Id: MuonCnvAlg.cxx 298140 2013-11-19 11:32:49Z emoyse $
6
7// Gaudi/Athena include(s):
9
10// EDM include(s):
13
14// Local include(s):
15#include "MuonCnvAlg.h"
16
17namespace xAODMaker {
18
19 MuonCnvAlg::MuonCnvAlg( const std::string& name,
20 ISvcLocator* svcLoc )
21 : AthAlgorithm( name, svcLoc ),
22 m_muonDressingTool("MuonCombined::MuonDressingTool/MuonDressingTool")
23 {
24
25 declareProperty( "AODContainerName", m_aodContainerName = "Muons" );
26 declareProperty( "xAODContainerName", m_xaodContainerName = "Muons" );
27 declareProperty( "xAODInDetTrackParticleContainerName", m_inDetTrackParticles = "InDetTrackParticles" );
28 declareProperty( "xAODSATrackParticleContainerName", m_saTrackParticles = "ExtrapolatedMuonTrackParticles" );
29 declareProperty( "xAODCombinedTrackParticleContainerName", m_cbTrackParticles = "" );
30 }
31
33
34 ATH_MSG_DEBUG( "AODContainerName = " << m_aodContainerName << " xAODContainerName = " << m_xaodContainerName );
35 ATH_CHECK(m_muonDressingTool.retrieve());
36
37 // Return gracefully:
38 return StatusCode::SUCCESS;
39 }
40
41 StatusCode MuonCnvAlg::execute() {
42
43 // Retrieve the AOD particles:
45 if (!aod) {
46 ATH_MSG_DEBUG("No MuonContainer with key " << m_aodContainerName << " found. Do nothing.");
47 return StatusCode::SUCCESS;
48 }
49
50
51 ATH_MSG_DEBUG( "Retrieved particles with key: " << m_aodContainerName );
52
53 // Create the xAOD container and its auxiliary store:
55 CHECK( evtStore()->record( xaod, m_xaodContainerName ) );
57 CHECK( evtStore()->record( aux, m_xaodContainerName + "Aux." ) );
58 xaod->setStore( aux );
59 ATH_MSG_DEBUG( "Recorded Muons with key: "
61
62 // Create the xAOD objects:
63 Analysis::MuonContainer::const_iterator itr = aod->begin();
64 Analysis::MuonContainer::const_iterator end = aod->end();
65 for( ; itr != end; ++itr ) {
66 // Create the xAOD object:
67 xAOD::Muon* muon = new xAOD::Muon();
68 xaod->push_back( muon );
69
70 // p4
71 muon->setP4((*itr)->pt(),(*itr)->eta(),(*itr)->phi());
72
73 // author(s)
74 muon->setAuthor( static_cast<xAOD::Muon_v1::Author>((*itr)->author()));//FIXME - error prone. Only works if they have the same indices
75 muon->setAllAuthors( (*itr)->allAuthors());
76
77 //type
78 if ((*itr)->isCombinedMuon())
79 muon->setMuonType(xAOD::Muon::Combined);
80 else if ((*itr)->isStandAloneMuon())
81 muon->setMuonType(xAOD::Muon::MuonStandAlone);
82 else if ((*itr)->isSegmentTaggedMuon())
83 muon->setMuonType(xAOD::Muon::SegmentTagged);
84 else if ((*itr)->isCaloMuonId())
85 muon->setMuonType(xAOD::Muon::CaloTagged);
86 else if ((*itr)->isSiliconAssociatedForwardMuon())
87 muon->setMuonType(xAOD::Muon::SiliconAssociatedForwardMuon);
88 else
89 ATH_MSG_WARNING("Unknown type of AOD Muon");
90
91 //setQuality
92 xAOD::Muon::Quality tightness;
93 if ((*itr)->isTight()) {
94 tightness=xAOD::Muon::Tight;
95 } else if ((*itr)->isMedium()) {
96 tightness=xAOD::Muon::Medium;
97 } else {
98 tightness=xAOD::Muon::Loose;
99 }
100 muon->setQuality( tightness );
101
102 //setParameters
103 setParameters(**itr,*muon);
104
105 //setIsolations
106 setIsolations(**itr,*muon);
107
108 // set Links
109 setLinks(**itr,*muon);
110
111 // ATH_MSG_VERBOSE(" AOD Muon pt " << (*itr)->pt() << " eta " << (*itr)->eta() << " phi " << (*itr)->phi());
112 ATH_MSG_VERBOSE(" xAOD Muon pt " << muon->pt() << " eta " << muon->eta() << " phi " << muon->phi());
113 ATH_MSG_VERBOSE(" author " << muon->author() << " type " << muon->muonType()
114 << " links CB " << muon->combinedTrackParticleLink().isValid()
115 << " ID " << muon->inDetTrackParticleLink().isValid()
116 << " MS " << muon->muonSpectrometerTrackParticleLink().isValid()
117 << " Primary " << muon->primaryTrackParticleLink().isValid()
118 );
119
120 setMuonHitContent(**itr,*muon);
121 }
122
123 // Return gracefully:
124 return StatusCode::SUCCESS;
125 }
126
127 void MuonCnvAlg::setParameters(const Analysis::Muon& aodmuon, xAOD::Muon& xaodmuon){
128 // We're not doing all AOD parameters here because some are dropped, and some are moved elsewhere.
129 checkAndSetParameter(MuonParameters::spectrometerFieldIntegral , xAOD::Muon::spectrometerFieldIntegral , aodmuon, xaodmuon);
130 checkAndSetParameter(MuonParameters::scatteringCurvatureSignificance , xAOD::Muon::scatteringCurvatureSignificance , aodmuon, xaodmuon);
131 checkAndSetParameter(MuonParameters::scatteringNeighbourSignificance , xAOD::Muon::scatteringNeighbourSignificance , aodmuon, xaodmuon);
132 checkAndSetParameter(MuonParameters::momentumBalanceSignificance , xAOD::Muon::momentumBalanceSignificance , aodmuon, xaodmuon);
133 checkAndSetParameter(MuonParameters::segmentDeltaEta , xAOD::Muon::segmentDeltaEta , aodmuon, xaodmuon);
134 checkAndSetParameter(MuonParameters::segmentDeltaPhi , xAOD::Muon::segmentDeltaPhi , aodmuon, xaodmuon);
135 checkAndSetParameter(MuonParameters::t0 , xAOD::Muon::t0 , aodmuon, xaodmuon);
136 checkAndSetParameter(MuonParameters::beta , xAOD::Muon::beta , aodmuon, xaodmuon);
137 checkAndSetParameter(MuonParameters::annBarrel , xAOD::Muon::annBarrel , aodmuon, xaodmuon);
138 checkAndSetParameter(MuonParameters::annEndCap , xAOD::Muon::annEndCap , aodmuon, xaodmuon);
139 checkAndSetParameter(MuonParameters::innAngle , xAOD::Muon::innAngle , aodmuon, xaodmuon);
140 checkAndSetParameter(MuonParameters::midAngle , xAOD::Muon::midAngle , aodmuon, xaodmuon);
141 }
142
144
145 const Rec::TrackParticle* aTrackParticle = aodmuon.track();
146 if( !aTrackParticle->trackSummary() ) return;
147 m_muonDressingTool->addMuonHitSummary(xaodmuon,aTrackParticle->trackSummary());
148 }
149
150
151 void MuonCnvAlg::checkAndSetParameter(MuonParameters::ParamDef aodParameter,xAOD::Muon::ParamDef xaodParameter, const Analysis::Muon& aodmuon, xAOD::Muon& xaodmuon){
152 double result = aodmuon.parameter(aodParameter);
153 if (result>-999.) {
154 float parameter = static_cast<float>(result);
155 xaodmuon.setParameter(parameter, xaodParameter);
156 }
157 }
158
159 void MuonCnvAlg::setIsolations(const Analysis::Muon& aodmuon, xAOD::Muon& xaodmuon){
160 //checkAndSetIsolation(MuonParameters::etcone10 , xAOD::Iso::etcone10 , aodmuon, xaodmuon);
164 //checkAndSetIsolation(MuonParameters::nucone10 , xAOD::Iso::nucone10 , aodmuon, xaodmuon);
165 //checkAndSetIsolation(MuonParameters::nucone20 , xAOD::Iso::nucone20 , aodmuon, xaodmuon);
166 //checkAndSetIsolation(MuonParameters::nucone30 , xAOD::Iso::nucone30 , aodmuon, xaodmuon);
167 //checkAndSetIsolation(MuonParameters::nucone40 , xAOD::Iso::nucone40 , aodmuon, xaodmuon);
168 //checkAndSetIsolation(MuonParameters::ptcone10 , xAOD::Iso::ptcone10 , aodmuon, xaodmuon);
172 //checkAndSetIsolation(MuonParameters::etconeNoEm10 , xAOD::Iso::etconeNoEm10 , aodmuon, xaodmuon);
173 //checkAndSetIsolation(MuonParameters::etconeNoEm20 , xAOD::Iso::etconeNoEm20 , aodmuon, xaodmuon);
174 //checkAndSetIsolation(MuonParameters::etconeNoEm30 , xAOD::Iso::etconeNoEm30 , aodmuon, xaodmuon);
175 //checkAndSetIsolation(MuonParameters::etconeNoEm40 , xAOD::Iso::etconeNoEm40 , aodmuon, xaodmuon);
176 }
177
179 double result = aodmuon.parameter(aodParameter);
180 if (result>-999.) {
181 float isolation = static_cast<float>(aodmuon.parameter(aodParameter));
182 xaodmuon.setIsolation(isolation, xaodParameter);
183 }
184 }
185
186 void MuonCnvAlg::setLinks(const Analysis::Muon& aodmuon, xAOD::Muon& xaodmuon) const {
187 // Need to reset links from old TrackParticle to xAOD::TrackParticles
188 // ElementLink<xAOD::TrackParticleContainer > newLink = getNewLink(aodmuon.inDetTrackLink(), m_inDetTrackParticles);
189 xaodmuon.setTrackParticleLink(xAOD::Muon_v1::InnerDetectorTrackParticle, getNewLink(aodmuon.inDetTrackLink(), m_inDetTrackParticles) );
190 // ElementLink<xAOD::TrackParticleContainer > newLink2 = getNewLink(aodmuon.muonExtrapTrackLink(), m_saTrackParticles);
191 xaodmuon.setTrackParticleLink(xAOD::Muon_v1::MuonSpectrometerTrackParticle,getNewLink(aodmuon.muonExtrapTrackLink(), m_saTrackParticles) );
192 // ElementLink<xAOD::TrackParticleContainer > newLink3 = getNewLink(aodmuon.muonExtrapTrackLink(), m_cbTrackParticles);
193 xaodmuon.setTrackParticleLink(xAOD::Muon_v1::CombinedTrackParticle, getNewLink(aodmuon.combinedTrackLink(), m_cbTrackParticles) );
194
195 // Sanity checks - can remove at some stage
196 if (!xaodmuon.primaryTrackParticleLink().isValid()){
197 ATH_MSG_WARNING(" xAOD::Muon with no primary TrackParticle! Type: " << xaodmuon.muonType());
198 ATH_MSG_WARNING(" author " << xaodmuon.author() << " type " << xaodmuon.muonType()
199 << " links CB " << xaodmuon.combinedTrackParticleLink().isValid()
200 << " ID " << xaodmuon.inDetTrackParticleLink().isValid()
201 << " MS " << xaodmuon.muonSpectrometerTrackParticleLink().isValid()
202 << " Primary " << xaodmuon.primaryTrackParticleLink().isValid()
203 );
204 ATH_MSG_WARNING(" AOD::Muon links CB " << aodmuon.combinedTrackLink().isValid()
205 << " ID " << aodmuon.combinedTrackLink().isValid()
206 << " MS " << aodmuon.muonExtrapTrackLink().isValid()
207 );
208 }
209 }
210
213 std::string destname = name;
214 if (destname.empty())
215 destname = oldLink.dataID();
216 newLink.resetWithKeyAndIndex( destname, oldLink.index() );
217 ATH_MSG_VERBOSE("MuonCnvAlg::getNewLink - Old link is "<<(oldLink.isValid()?"VALID":"INVALID")<< " with SGKey = "<<oldLink.dataID()<< " & index = "<<oldLink.index()
218 <<" and new link is "<<(newLink.isValid()?"VALID":"INVALID")<< " with SGKey = "<<newLink.dataID()<< " & index = "<<newLink.index());
219 return newLink;
220 }
221
222} // namespace xAODMaker
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
Helpers for checking error return status codes and reporting errors.
#define CHECK(...)
Evaluate an expression and check for errors.
definition of StoreGate container holding a vector of Analysis::Muon
The ATLAS Muon object - see doxygen, physics workbookd and the Muon Combined Performance WG's pages f...
const Rec::TrackParticle * track() const
return the primary track of this muon
Definition Muon.cxx:1135
const ElementLink< Rec::TrackParticleContainer > & muonExtrapTrackLink() const
Access to the smart pointer to the muon track extrapolated to the vertex.
const ElementLink< Rec::TrackParticleContainer > & inDetTrackLink() const
Access to the smart pointer to inner detector track.
double parameter(MuonParameters::ParamDef x) const
get a parameter for this Muon - isolation energy in some cone for example
Definition Muon.cxx:485
const ElementLink< Rec::TrackParticleContainer > & combinedTrackLink() const
Access to the smart pointer to the muon combined track.
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
value_type push_back(value_type pElem)
Add an element to the end of the collection.
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
const TrackSummary * trackSummary() const
accessor function for TrackSummary.
MuonCnvAlg(const std::string &name, ISvcLocator *svcLoc)
Regular algorithm constructor.
std::string m_aodContainerName
The key of the input CaloClusterContainer.
Definition MuonCnvAlg.h:54
void setLinks(const Analysis::Muon &aodmuon, xAOD::Muon &xaodmuon) const
static void checkAndSetIsolation(MuonParameters::ParamDef aodParameter, xAOD::Iso::IsolationType xaodParameter, const Analysis::Muon &aodmuon, xAOD::Muon &xaodmuon)
virtual StatusCode execute()
Function executing the algorithm.
void setMuonHitContent(const Analysis::Muon &aodmuon, xAOD::Muon &xaodmuon)
static void setIsolations(const Analysis::Muon &aodmuon, xAOD::Muon &xaodmuon)
std::string m_cbTrackParticles
Location/Key for combined fit xAOD::TrackParticles.
Definition MuonCnvAlg.h:69
std::string m_xaodContainerName
The key for the output xAOD::CaloClusterContainer.
Definition MuonCnvAlg.h:56
static void setParameters(const Analysis::Muon &aodmuon, xAOD::Muon &xaodmuon)
virtual StatusCode initialize()
Function initialising the algorithm.
ToolHandle< xAOD::IMuonDressingTool > m_muonDressingTool
Definition MuonCnvAlg.h:73
std::string m_inDetTrackParticles
Location/Key for xAOD::TrackParticles from ID.
Definition MuonCnvAlg.h:67
ElementLink< xAOD::TrackParticleContainer > getNewLink(const ElementLink< Rec::TrackParticleContainer > &oldLink, const std::string &name) const
std::string m_saTrackParticles
Location/Key for MS SA (extrap to beamline) xAOD::TrackParticles.
Definition MuonCnvAlg.h:68
static void checkAndSetParameter(MuonParameters::ParamDef aodParameter, xAOD::Muon::ParamDef xaodParameter, const Analysis::Muon &aodmuon, xAOD::Muon &xaodmuon)
const ElementLink< TrackParticleContainer > & combinedTrackParticleLink() const
Returns an ElementLink to the InnerDetector TrackParticle used in identification of this muon.
const ElementLink< TrackParticleContainer > & inDetTrackParticleLink() const
Returns an ElementLink to the InnerDetector TrackParticle used in identification of this muon.
void setTrackParticleLink(TrackParticleType type, const ElementLink< TrackParticleContainer > &link)
Set method for TrackParticle links.
Definition Muon_v1.cxx:501
void setParameter(float value, const ParamDef parameter)
Set method for parameter values.
void setIsolation(float value, const Iso::IsolationType information)
Set method for Isolation values.
Definition Muon_v1.cxx:272
Author author() const
MuonType muonType() const
const ElementLink< TrackParticleContainer > & muonSpectrometerTrackParticleLink() const
Returns an ElementLink to the InnerDetector TrackParticle used in identification of this muon.
const ElementLink< TrackParticleContainer > & primaryTrackParticleLink() const
Definition Muon_v1.cxx:356
ParamDef
Enum for parameter indexes.
@ spectrometerFieldIntegral
Discriminators and further variables.
@ innAngle
common MuGirl and MuTag parameters
@ scatteringNeighbourSignificance
@ scatteringCurvatureSignificance
@ t0
MuGirl parameter.
@ segmentDeltaEta
MuTag parameters.
IsolationType
Overall enumeration for isolation types in xAOD files.
@ etcone20
Calorimeter isolation.
@ ptcone20
Track isolation.
Muon_v1 Muon
Reference the current persistent version:
MuonAuxContainer_v5 MuonAuxContainer
Definition of the current Muon auxiliary container.
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".