diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigParticleCreation/src/TrigTrackingxAODCnvMT.cxx b/InnerDetector/InDetTrigRecAlgs/InDetTrigParticleCreation/src/TrigTrackingxAODCnvMT.cxx index 5620f01d6d9229eac43cc14919724fc5c5129ccd..f633f993fae9f784396e72f87f8e214e8dbea543 100644 --- a/InnerDetector/InDetTrigRecAlgs/InDetTrigParticleCreation/src/TrigTrackingxAODCnvMT.cxx +++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigParticleCreation/src/TrigTrackingxAODCnvMT.cxx @@ -40,7 +40,6 @@ namespace InDet : AthAlgorithm (name, pSvcLocator), m_particleCreatorTool("Trk::ParticleCreatorTool"), m_residualCalc("Trk::ResidualPullCalculator"), - m_tracks(0), m_doIBLresidual(false), m_slice_name(""), m_mon_doSliceSpecific(true), @@ -225,7 +224,6 @@ namespace InDet //const TrackCollection* allTracksFromStoreGate; //initialize monitored objects - m_tracks = 0; bool runAlg = true; StatusCode statCode(StatusCode::SUCCESS); @@ -234,20 +232,33 @@ namespace InDet } //+++ DQM (SA): monitoring - ResetMon(); + // ResetMon(); + auto ctx = getContext(); + auto tpHandle = SG::makeHandle (m_trackParticleKey, ctx); + + ATH_CHECK( tpHandle.record (std::make_unique<xAOD::TrackParticleContainer>(), + std::make_unique<xAOD::TrackParticleAuxContainer>()) ); + xAOD::TrackParticleContainer* tpCont=tpHandle.ptr(); // - float tmp_eta_roi = -999; - float tmp_phi_roi = -999; - - auto roiCollection = SG::makeHandle(m_roiCollectionKey); - TrigRoiDescriptor* roi = *(roiCollection->begin()); - tmp_eta_roi = roi->eta(); - tmp_phi_roi = roi->phi(); + //float tmp_eta_roi = -999; + //float tmp_phi_roi = -999; + ATH_MSG_DEBUG(" Getting RoI"); + auto roiCollection = SG::makeHandle(m_roiCollectionKey, ctx); + ATH_MSG_DEBUG(" Got RoICollection size "<<roiCollection->size() ); + + if (roiCollection->size()==0) { + ATH_MSG_DEBUG("RoICollection size 0"); + // tmp_eta_roi = 0; + // tmp_phi_roi = 0; + } else { + TrigRoiDescriptor* roi = *(roiCollection->begin()); + //tmp_eta_roi = roi->eta(); + //tmp_phi_roi = roi->phi(); + } - m_tracks = 0; - auto tracks = SG::makeHandle(m_trackKey); + auto tracks = SG::makeHandle(m_trackKey, ctx); ATH_MSG_VERBOSE(" Input track collection has size " << tracks->size()); if ( tracks->size() == 0 ) { @@ -257,23 +268,19 @@ namespace InDet //convert tracks - auto tpHandle = SG::makeHandle (m_trackParticleKey); - xAOD::TrackParticleContainer* tpCont=tpHandle.ptr(); - ATH_CHECK( tpHandle.record (std::make_unique<xAOD::TrackParticleContainer>(), - std::make_unique<xAOD::TrackParticleAuxContainer>()) ); - //Memory Alloc - // if(doTiming()) m_timerMemAlloc->start(); - tpCont->reserve(m_tracks->size()); - // if(doTiming()) m_timerMemAlloc->stop(); - if(m_tracks && runAlg) { - for(unsigned int idtr=0; idtr< m_tracks->size(); ++idtr) { - const ElementLink<TrackCollection> trackLink(*m_tracks, idtr); + if(runAlg) { + //Memory Alloc + // if(doTiming()) m_timerMemAlloc->start(); + tpCont->reserve(tracks->size()); + // if(doTiming()) m_timerMemAlloc->stop(); + for(unsigned int idtr=0; idtr< tracks->size(); ++idtr) { + const ElementLink<TrackCollection> trackLink(*tracks, idtr); - if (m_doIBLresidual) fillIBLResidual(m_tracks->at(idtr)); + if (m_doIBLresidual) fillIBLResidual(tracks->at(idtr)); // if(doTiming()) m_timerTrackConversion->start(); xAOD::TrackParticle* tp = m_particleCreatorTool->createParticle( trackLink, tpCont); @@ -311,14 +318,14 @@ namespace InDet ATH_MSG_DEBUG("REGTEST container size = " << tpCont->size()); - for (xAOD::TrackParticleContainer::iterator itr = tpCont->begin(); itr != tpCont->end(); ++itr) { - FillMonPerTrack(*itr, tmp_eta_roi, tmp_phi_roi); - } + // for (xAOD::TrackParticleContainer::iterator itr = tpCont->begin(); itr != tpCont->end(); ++itr) { + //FillMonPerTrack(*itr, tmp_eta_roi, tmp_phi_roi); + //} if (runAlg){ //+++ DQM (SA): per RoI quantities - FillMonPerRoi(roi, tmp_eta_roi, tmp_phi_roi); - ++m_mon_counter; + // FillMonPerRoi(roi, *tracks, tmp_eta_roi, tmp_phi_roi); + //++m_mon_counter; return StatusCode::SUCCESS; } else { @@ -483,7 +490,7 @@ namespace InDet } - void TrigTrackingxAODCnvMT::FillMonPerRoi(const TrigRoiDescriptor* roi, const double &tmp_eta_roi, const double &tmp_phi_roi) { + void TrigTrackingxAODCnvMT::FillMonPerRoi(const TrigRoiDescriptor* roi, const TrackCollection* tracks, const double &tmp_eta_roi, const double &tmp_phi_roi) { //+++ Prescale if (m_mon_counter >= m_mon_prescale) { @@ -494,7 +501,7 @@ namespace InDet //+++ Common for all slices - if (m_tracks) m_dqm_ntrk = m_tracks->size(); + if (tracks) m_dqm_ntrk = tracks->size(); if (roi) { @@ -511,8 +518,8 @@ namespace InDet //+++ Bjet if (m_slice_name == "Bjet") { const Trk::Perigee* tmpMp = 0; - if (m_tracks) { - for (auto track : *m_tracks) { + if (tracks) { + for (auto track : *tracks) { tmpMp = track->perigeeParameters(); if (tmpMp) { m_dqm_bj_sumpt += tmpMp->pT()/1000; @@ -529,8 +536,8 @@ namespace InDet const Trk::Track* tpL = 0; const Trk::Perigee* tmpMp = 0; float tmp_pt_max = 0; - if (m_tracks) { - for (auto track : *m_tracks) { + if (tracks) { + for (auto track : *tracks) { tmpMp = track->perigeeParameters(); if (tmpMp) { float tmp_pt = tmpMp->pT()/1000; @@ -581,8 +588,8 @@ namespace InDet float tmp_py = 0; float tmp_pz = 0; float tmp_e = 0; - if (m_tracks) { - for (auto track : *m_tracks) { + if (tracks) { + for (auto track : *tracks) { tmpLMp = track->perigeeParameters(); if (tmpLMp) { float tmp_qOverP = tmpLMp->parameters()[Trk::qOverP]; diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigParticleCreation/src/TrigTrackingxAODCnvMT.h b/InnerDetector/InDetTrigRecAlgs/InDetTrigParticleCreation/src/TrigTrackingxAODCnvMT.h index 23ded38dc45a8cae8e5fefb5c1a915a85b78b396..31a5538407551f325b53e27752708020de9bd8b1 100644 --- a/InnerDetector/InDetTrigRecAlgs/InDetTrigParticleCreation/src/TrigTrackingxAODCnvMT.h +++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigParticleCreation/src/TrigTrackingxAODCnvMT.h @@ -67,7 +67,7 @@ namespace InDet private: void ResetMon(); void FillMonPerTrack(const xAOD::TrackParticle *, const double&, const double&); - void FillMonPerRoi(const TrigRoiDescriptor* , const double&, const double&); + void FillMonPerRoi(const TrigRoiDescriptor* , const TrackCollection* tracks, const double&, const double&); void fillIBLResidual(const Trk::Track *track); private: @@ -76,8 +76,6 @@ namespace InDet const AtlasDetectorID* m_idHelper; const PixelID* m_pixelId; - const TrackCollection* m_tracks; - bool m_doIBLresidual; //Monitoring diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronFexMT.cxx b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronFexMT.cxx index 1ac43dcdfb7cab3d335fd5157336ace7bec17211..1d7bd442a9fc4a33c799286289a1e8bd346df2ca 100644 --- a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronFexMT.cxx +++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronFexMT.cxx @@ -140,17 +140,24 @@ StatusCode TrigL2ElectronFexMT::execute() { // NULL value is specially important to avoid crashs in monitoring //m_trigElecColl = NULL; - auto trigElecColl = SG::makeHandle (m_outputElectronsKey); + auto ctx = getContext(); + + auto trigElecColl = SG::makeHandle (m_outputElectronsKey, ctx); ATH_CHECK( trigElecColl.record (std::make_unique<xAOD::TrigElectronContainer>(), std::make_unique<xAOD::TrigEMClusterAuxContainer>()) ); - auto roiCollection = SG::makeHandle(m_roiCollectionKey); + auto roiCollection = SG::makeHandle(m_roiCollectionKey, ctx); //JTB For the moment assume 1 RoI (as in TrigL2ElectronFex) - could change to SuperRoI later //TrigRoiDescriptorCollection::const_iterator roiDescriptor = roiCollection->begin(); //TrigRoiDescriptorCollection::const_iterator roiE = roiCollection->end(); + if (roiCollection->size()==0) { + ATH_MSG_DEBUG(" RoI collection size = 0"); + return StatusCode::SUCCESS; + } + TrigRoiDescriptor* roiDescriptor = *(roiCollection->begin()); ATH_MSG_DEBUG(" RoI ID = " << (roiDescriptor)->roiId() @@ -159,7 +166,7 @@ StatusCode TrigL2ElectronFexMT::execute() { float calo_eta(999), calo_phi(999), calo_et(-1); - auto clusContainer = SG::makeHandle (m_TrigEMClusterContainerKey); + auto clusContainer = SG::makeHandle (m_TrigEMClusterContainerKey, ctx); //JTB Should only be 1 cluster in each RoI @@ -178,7 +185,9 @@ StatusCode TrigL2ElectronFexMT::execute() { ATH_MSG_DEBUG("searching a matching track: loop over tracks"); - SG::ReadHandle<xAOD::TrackParticleContainer> tracks(m_TrackParticleContainerKey); + + SG::ReadHandle<xAOD::TrackParticleContainer> tracks(m_TrackParticleContainerKey, ctx); + if (tracks->size() < 1){ ATH_MSG_ERROR("No track collection, vector < 1");