ATLAS Offline Software
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 
17 namespace 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 
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:
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.
141  }
142 
143  void MuonCnvAlg::setMuonHitContent(const Analysis::Muon& aodmuon, xAOD::Muon& xaodmuon){
144 
145  const Rec::TrackParticle* aTrackParticle = aodmuon.track();
146  if( !aTrackParticle->trackSummary() ) return;
147  m_muonDressingTool->addMuonHitSummary(xaodmuon,aTrackParticle->trackSummary());
148  }
149 
150 
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
xAODMaker::MuonCnvAlg::m_saTrackParticles
std::string m_saTrackParticles
Location/Key for MS SA (extrap to beamline) xAOD::TrackParticles.
Definition: MuonCnvAlg.h:68
xAOD::Muon_v1::primaryTrackParticleLink
const ElementLink< TrackParticleContainer > & primaryTrackParticleLink() const
Definition: Muon_v1.cxx:378
LikeEnum::Loose
@ Loose
Definition: LikelihoodEnums.h:12
xAODMaker::MuonCnvAlg::m_inDetTrackParticles
std::string m_inDetTrackParticles
Location/Key for xAOD::TrackParticles from ID.
Definition: MuonCnvAlg.h:67
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:195
Analysis::Muon::track
const Rec::TrackParticle * track() const
return the primary track of this muon
Definition: Reconstruction/MuonIdentification/muonEvent/src/Muon.cxx:1135
Analysis::Muon::combinedTrackLink
const ElementLink< Rec::TrackParticleContainer > & combinedTrackLink() const
Access to the smart pointer to the muon combined track.
Definition: Reconstruction/MuonIdentification/muonEvent/muonEvent/Muon.h:378
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
MuonParameters::etcone20
@ etcone20
Definition: MuonParamDefs.h:114
get_generator_info.result
result
Definition: get_generator_info.py:21
xAOD::MuonContainer
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".
Definition: Event/xAOD/xAODMuon/xAODMuon/MuonContainer.h:14
MuonParameters::t0
@ t0
MuGirl parameter.
Definition: MuonParamDefs.h:143
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
xAOD::Muon_v1::setTrackParticleLink
void setTrackParticleLink(TrackParticleType type, const ElementLink< TrackParticleContainer > &link)
Set method for TrackParticle links.
Definition: Muon_v1.cxx:523
ALFA_EventTPCnv_Dict::t0
std::vector< ALFA_RawData_p1 > t0
Definition: ALFA_EventTPCnvDict.h:42
MuonContainer.h
xAODMaker::MuonCnvAlg::setMuonHitContent
void setMuonHitContent(const Analysis::Muon &aodmuon, xAOD::Muon &xaodmuon)
Definition: MuonCnvAlg.cxx:143
Trk::TrackParticleBase::trackSummary
const TrackSummary * trackSummary() const
accessor function for TrackSummary.
Definition: TrackParticleBase.h:247
MuonParameters::scatteringNeighbourSignificance
@ scatteringNeighbourSignificance
Definition: MuonParamDefs.h:135
xAOD::Iso::ptcone30
@ ptcone30
Definition: IsolationType.h:41
MuonParameters::innAngle
@ innAngle
common MuGirl and MuTag parameters
Definition: MuonParamDefs.h:148
xAOD::Iso::ptcone20
@ ptcone20
Track isolation.
Definition: IsolationType.h:40
xAOD::Iso::etcone40
@ etcone40
Definition: IsolationType.h:34
egammaParameters::ParamDef
ParamDef
Definition: egammaParamDefs.h:99
xAOD::Iso::etcone30
@ etcone30
Definition: IsolationType.h:33
xAOD::Muon_v1::author
Author author() const
xAODMaker::MuonCnvAlg::MuonCnvAlg
MuonCnvAlg(const std::string &name, ISvcLocator *svcLoc)
Regular algorithm constructor.
Definition: MuonCnvAlg.cxx:19
xAODMaker::MuonCnvAlg::checkAndSetIsolation
static void checkAndSetIsolation(MuonParameters::ParamDef aodParameter, xAOD::Iso::IsolationType xaodParameter, const Analysis::Muon &aodmuon, xAOD::Muon &xaodmuon)
Definition: MuonCnvAlg.cxx:178
xAODMaker::MuonCnvAlg::execute
virtual StatusCode execute()
Function executing the algorithm.
Definition: MuonCnvAlg.cxx:41
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
xAODMaker
Definition: StoreGateSvc.h:72
MuonParameters::ptcone20
@ ptcone20
Definition: MuonParamDefs.h:122
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
MuonParameters::segmentDeltaPhi
@ segmentDeltaPhi
Definition: MuonParamDefs.h:140
MuonParameters::annBarrel
@ annBarrel
Definition: MuonParamDefs.h:145
xAOD::Muon_v1::setIsolation
void setIsolation(float value, const Iso::IsolationType information)
Set method for Isolation values.
Definition: Muon_v1.cxx:296
xAODMaker::MuonCnvAlg::setLinks
void setLinks(const Analysis::Muon &aodmuon, xAOD::Muon &xaodmuon) const
Definition: MuonCnvAlg.cxx:186
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
MuonParameters::momentumBalanceSignificance
@ momentumBalanceSignificance
Definition: MuonParamDefs.h:136
xAOD::Muon_v1::setParameter
void setParameter(float value, const ParamDef parameter)
Set method for parameter values.
Analysis::Muon::muonExtrapTrackLink
const ElementLink< Rec::TrackParticleContainer > & muonExtrapTrackLink() const
Access to the smart pointer to the muon track extrapolated to the vertex.
Definition: Reconstruction/MuonIdentification/muonEvent/muonEvent/Muon.h:359
MuonAuxContainer.h
MuonParameters::ptcone40
@ ptcone40
Definition: MuonParamDefs.h:124
MuonParameters::etcone30
@ etcone30
Definition: MuonParamDefs.h:115
xAOD::MuonAuxContainer_v5
Temporary container used until we have I/O for AuxStoreInternal.
Definition: MuonAuxContainer_v5.h:31
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
xAODMaker::MuonCnvAlg::checkAndSetParameter
static void checkAndSetParameter(MuonParameters::ParamDef aodParameter, xAOD::Muon::ParamDef xaodParameter, const Analysis::Muon &aodmuon, xAOD::Muon &xaodmuon)
Definition: MuonCnvAlg.cxx:151
xAODMaker::MuonCnvAlg::getNewLink
ElementLink< xAOD::TrackParticleContainer > getNewLink(const ElementLink< Rec::TrackParticleContainer > &oldLink, const std::string &name) const
Definition: MuonCnvAlg.cxx:211
Analysis::Muon::parameter
double parameter(MuonParameters::ParamDef x) const
get a parameter for this Muon - isolation energy in some cone for example
Definition: Reconstruction/MuonIdentification/muonEvent/src/Muon.cxx:485
MuonParameters::midAngle
@ midAngle
Definition: MuonParamDefs.h:149
xAOD::Iso::etcone20
@ etcone20
Calorimeter isolation.
Definition: IsolationType.h:32
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
xAODMaker::MuonCnvAlg::initialize
virtual StatusCode initialize()
Function initialising the algorithm.
Definition: MuonCnvAlg.cxx:32
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
xAOD::Iso::IsolationType
IsolationType
Overall enumeration for isolation types in xAOD files.
Definition: IsolationType.h:26
xAOD::Muon_v1::muonSpectrometerTrackParticleLink
const ElementLink< TrackParticleContainer > & muonSpectrometerTrackParticleLink() const
Returns an ElementLink to the InnerDetector TrackParticle used in identification of this muon.
MuonParameters::segmentDeltaEta
@ segmentDeltaEta
MuTag parameters.
Definition: MuonParamDefs.h:139
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Analysis::Muon
The ATLAS Muon object - see doxygen, physics workbookd and the Muon Combined Performance WG's pages f...
Definition: Reconstruction/MuonIdentification/muonEvent/muonEvent/Muon.h:48
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
MuonParameters::ParamDef
ParamDef
Enum for parameter indexes.
Definition: MuonParamDefs.h:111
Analysis::MuonContainer
definition of StoreGate container holding a vector of Analysis::Muon
Definition: Reconstruction/MuonIdentification/muonEvent/muonEvent/MuonContainer.h:38
MuonCnvAlg.h
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
AthAlgorithm
Definition: AthAlgorithm.h:47
Trk::Combined
@ Combined
Definition: TrackSummaryTool.h:32
xAODMaker::MuonCnvAlg::m_aodContainerName
std::string m_aodContainerName
The key of the input CaloClusterContainer.
Definition: MuonCnvAlg.h:54
LikeEnum::Tight
@ Tight
Definition: LikelihoodEnums.h:15
MuonParameters::scatteringCurvatureSignificance
@ scatteringCurvatureSignificance
Definition: MuonParamDefs.h:134
xAOD::Muon
Muon_v1 Muon
Reference the current persistent version:
Definition: Event/xAOD/xAODMuon/xAODMuon/Muon.h:13
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
errorcheck.h
Helpers for checking error return status codes and reporting errors.
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
xAODMaker::MuonCnvAlg::m_cbTrackParticles
std::string m_cbTrackParticles
Location/Key for combined fit xAOD::TrackParticles.
Definition: MuonCnvAlg.h:69
Rec::TrackParticle
Definition: Reconstruction/Particle/Particle/TrackParticle.h:47
xAOD::Iso::ptcone40
@ ptcone40
Definition: IsolationType.h:42
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
xAOD::Muon_v1::inDetTrackParticleLink
const ElementLink< TrackParticleContainer > & inDetTrackParticleLink() const
Returns an ElementLink to the InnerDetector TrackParticle used in identification of this muon.
LikeEnum::Medium
@ Medium
Definition: LikelihoodEnums.h:14
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
MuonParameters::annEndCap
@ annEndCap
Definition: MuonParamDefs.h:146
xAODMaker::MuonCnvAlg::setIsolations
static void setIsolations(const Analysis::Muon &aodmuon, xAOD::Muon &xaodmuon)
Definition: MuonCnvAlg.cxx:159
MuonParameters::ptcone30
@ ptcone30
Definition: MuonParamDefs.h:123
Analysis::Muon::inDetTrackLink
const ElementLink< Rec::TrackParticleContainer > & inDetTrackLink() const
Access to the smart pointer to inner detector track.
Definition: Reconstruction/MuonIdentification/muonEvent/muonEvent/Muon.h:353
MuonParameters::etcone40
@ etcone40
Definition: MuonParamDefs.h:116
MuonParameters::beta
@ beta
Definition: MuonParamDefs.h:144
xAODMaker::MuonCnvAlg::setParameters
static void setParameters(const Analysis::Muon &aodmuon, xAOD::Muon &xaodmuon)
Definition: MuonCnvAlg.cxx:127
ParticleJetParams::Author
Author
Definition: ParticleJetParamDefs.h:33
xAOD::MuonAuxContainer
MuonAuxContainer_v5 MuonAuxContainer
Definition of the current Muon auxiliary container.
Definition: MuonAuxContainer.h:19
xAODMaker::MuonCnvAlg::m_xaodContainerName
std::string m_xaodContainerName
The key for the output xAOD::CaloClusterContainer.
Definition: MuonCnvAlg.h:56
MuonParameters::spectrometerFieldIntegral
@ spectrometerFieldIntegral
Discriminators and further variables.
Definition: MuonParamDefs.h:133
xAODMaker::MuonCnvAlg::m_muonDressingTool
ToolHandle< xAOD::IMuonDressingTool > m_muonDressingTool
Definition: MuonCnvAlg.h:73
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
xAOD::Muon_v1::combinedTrackParticleLink
const ElementLink< TrackParticleContainer > & combinedTrackParticleLink() const
Returns an ElementLink to the InnerDetector TrackParticle used in identification of this muon.
xAOD::Muon_v1::muonType
MuonType muonType() const