diff --git a/MuonSpectrometer/MuonTruthAlgs/src/MuonTrackTruthTool.cxx b/MuonSpectrometer/MuonTruthAlgs/src/MuonTrackTruthTool.cxx index c0168623b8fe5fd466c4128d6f6290d2f87a7680..4145e41d41b2216ecd4a3332f50ac55c2c1bdabc 100644 --- a/MuonSpectrometer/MuonTruthAlgs/src/MuonTrackTruthTool.cxx +++ b/MuonSpectrometer/MuonTruthAlgs/src/MuonTrackTruthTool.cxx @@ -658,6 +658,7 @@ namespace Muon { void MuonTrackTruthTool::addClusterTruth( MuonTechnologyTruth& truth, const Identifier& id, const Trk::MeasurementBase& meas, const MuonSimDataCollection& simCol ) const { + Trk::RoT_Extractor rotExtractor; Identifier layid = m_idHelperTool->layerId(id); Identifier chid = m_idHelperTool->chamberId(id); @@ -677,9 +678,26 @@ namespace Muon { } } }else{ - // find SimData corresponding to identifier - it = simCol.find(id); - if( it != simCol.end() ) goodCluster = true; + // Find SimData corresponding to identifier + const Trk::RIO_OnTrack* rot = 0; + rotExtractor.extract(rot,&meas); + const Trk::PrepRawData* prd = rot->prepRawData(); + if(prd) { + // check if an identifier from the list of RDOs is matched to that in the SDO collection + const std::vector<Identifier> rdoList = prd->rdoList(); + std::vector<Identifier>::const_iterator rit = rdoList.begin(); + std::vector<Identifier>::const_iterator rit_end = rdoList.end(); + for( ;rit!=rit_end;++rit ){ + it = simCol.find(*rit); + if( it != simCol.end() ) { + goodCluster = true; + break; + } + } + } else { + it = simCol.find(id); + if( it != simCol.end() ) goodCluster = true; + } } if( !goodCluster || it == simCol.end() ){