From c6d1b08f206dbf9c3c731c8df8d351ca19be9fba Mon Sep 17 00:00:00 2001 From: John Baines <john.baines@stfc.ac.uk> Date: Tue, 20 Dec 2016 16:48:47 +0100 Subject: [PATCH] protect from dereferencing nullptr (TrigFTK_RawDataAlgs-01-00-44) * src/FTK_RDO_ReaderAlgo.cxx: add protection against trying to dereference null pointers. * tag as TrigFTK_RawDataAlgs-01-00-44 Former-commit-id: a125857f529b91c8613b7c49e637b23bf7ac499f --- .../src/FTK_RDO_ReaderAlgo.cxx | 160 ++++++++++-------- 1 file changed, 91 insertions(+), 69 deletions(-) diff --git a/Trigger/TrigFTK/TrigFTK_RawDataAlgs/src/FTK_RDO_ReaderAlgo.cxx b/Trigger/TrigFTK/TrigFTK_RawDataAlgs/src/FTK_RDO_ReaderAlgo.cxx index 08b0618007d..44c888d27ff 100644 --- a/Trigger/TrigFTK/TrigFTK_RawDataAlgs/src/FTK_RDO_ReaderAlgo.cxx +++ b/Trigger/TrigFTK/TrigFTK_RawDataAlgs/src/FTK_RDO_ReaderAlgo.cxx @@ -57,15 +57,15 @@ FTK_RDO_ReaderAlgo::FTK_RDO_ReaderAlgo(const std::string& name, ISvcLocator* pSv m_getRefitVertex_Fast(false), m_getRefitVertex(true), m_getOfflineVertex(true), - m_getTruthVertex(true), + m_getTruthVertex(false), m_getClusters(false), m_getOfflineClusters(false), m_residualCalc("Trk::ResidualPullCalculator"), m_DataProviderSvc("IFTK_DataProviderSvc/IFTK_DataProviderSvc", name), m_iUpdator ("Trk::KalmanUpdator"), - m_fillHists(true), - m_fillTree(true) + m_fillHists(false), + m_fillTree(false) { declareProperty("RDO_CollectionName",m_ftk_raw_trackcollection_Name, "Collection name of RDO"); @@ -192,27 +192,28 @@ StatusCode FTK_RDO_ReaderAlgo::execute() { StatusCode scEv = evtStore()->retrieve(eventInfo); if (scEv.isFailure()) { ATH_MSG_ERROR( "Could not retrieve event info" ); - } - int eventNumber = eventInfo->event_ID()->event_number(); - ATH_MSG_DEBUG(" Event " << eventNumber); - - const EventID* eventID( eventInfo->event_ID()); - ATH_MSG_DEBUG( "entered execution for run" << eventID->run_number() - << "event" << eventID->event_number()); + } else { + int eventNumber = eventInfo->event_ID()->event_number(); + ATH_MSG_DEBUG(" Event " << eventNumber); + + const EventID* eventID( eventInfo->event_ID()); + ATH_MSG_DEBUG( "entered execution for run" << eventID->run_number() + << "event" << eventID->event_number()); - const TriggerInfo *triggerInfo(eventInfo->trigger_info()); + const TriggerInfo *triggerInfo(eventInfo->trigger_info()); - RunNumber = eventID->run_number(); - EventNumber = eventID->event_number(); - LumiBlock = eventID->lumi_block(); - BCID = eventID->bunch_crossing_id(); - averageInteractionsPerCrossing = eventInfo->averageInteractionsPerCrossing(); - actualInteractionsPerCrossing = eventInfo->actualInteractionsPerCrossing(); - extendedLevel1ID = triggerInfo->extendedLevel1ID(); - level1TriggerType = triggerInfo->level1TriggerType(); - std::vector<unsigned int> info = triggerInfo->level1TriggerInfo(); - - for (unsigned int i = 0; i < info.size(); i++) level1TriggerInfo.push_back(info[i]); + RunNumber = eventID->run_number(); + EventNumber = eventID->event_number(); + LumiBlock = eventID->lumi_block(); + BCID = eventID->bunch_crossing_id(); + averageInteractionsPerCrossing = eventInfo->averageInteractionsPerCrossing(); + actualInteractionsPerCrossing = eventInfo->actualInteractionsPerCrossing(); + extendedLevel1ID = triggerInfo->extendedLevel1ID(); + level1TriggerType = triggerInfo->level1TriggerType(); + std::vector<unsigned int> info = triggerInfo->level1TriggerInfo(); + + for (unsigned int i = 0; i < info.size(); i++) level1TriggerInfo.push_back(info[i]); + } unsigned int track_requirement = 3; @@ -239,28 +240,33 @@ StatusCode FTK_RDO_ReaderAlgo::execute() { if (m_getTrackParticles) { ATH_MSG_DEBUG( " Getting TrackParticles from converted tracks from DataProviderSvc" ); xAOD::TrackParticleContainer *tpc = m_DataProviderSvc->getTrackParticles(false); - ATH_MSG_DEBUG( "DataProviderSvc returned " << tpc->size() << " TrackParticles created from converted tracks" ); - - // if ( evtStore()->get ( tpc, m_TrackParticleCollectionName).isFailure() ) { - // ATH_MSG_DEBUG( "Failed to get FTK TrackParticleCollection with name " << m_TrackParticleCollectionName ); - // } + if (!tpc) { + ATH_MSG_DEBUG( "DataProviderSvc->getTrackParticles(false) returned nullptr"); + } else { - ATH_MSG_VERBOSE( " " ); - ATH_MSG_VERBOSE( " Printing information for " << tpc->size()<< " TrackParticles" ); - - int itpc = 0; - for ( auto ptp = tpc->begin(); ptp != tpc->end(); ptp++, itpc++) { - //uint8_t NumOfPixHits = 0; - //uint8_t NumOfSCTHits = 0; - //if (!(*ptp)->summaryValue(NumOfSCTHits, xAOD::numberOfSCTHits) ) ATH_MSG_DEBUG( "Could not retrieve number of SCT hits"); - //if (!(*ptp)->summaryValue(NumOfPixHits, xAOD::numberOfPixelHits) ) ATH_MSG_DEBUG( "Could not retrieve number of Pixel hits"); - - double p = 1e10; - if (fabs((*ptp)->qOverP()) >=1e-9) p = 1./(*ptp)->qOverP(); - ATH_MSG_VERBOSE( "itp:" << itpc << ": q*pT " << (*ptp)->pt()*(*ptp)->charge() << " eta " << (*ptp)->eta() << " phi " << (*ptp)->phi0() << - " d0: " << (*ptp)->d0() << " z0: " << (*ptp)->z0() << " p " << p ); + ATH_MSG_DEBUG( "DataProviderSvc returned " << tpc->size() << " TrackParticles created from converted tracks" ); + + // if ( evtStore()->get ( tpc, m_TrackParticleCollectionName).isFailure() ) { + // ATH_MSG_DEBUG( "Failed to get FTK TrackParticleCollection with name " << m_TrackParticleCollectionName ); + // } + + ATH_MSG_VERBOSE( " " ); + ATH_MSG_VERBOSE( " Printing information for " << tpc->size()<< " TrackParticles" ); + + int itpc = 0; + for ( auto ptp = tpc->begin(); ptp != tpc->end(); ptp++, itpc++) { + //uint8_t NumOfPixHits = 0; + //uint8_t NumOfSCTHits = 0; + //if (!(*ptp)->summaryValue(NumOfSCTHits, xAOD::numberOfSCTHits) ) ATH_MSG_DEBUG( "Could not retrieve number of SCT hits"); + //if (!(*ptp)->summaryValue(NumOfPixHits, xAOD::numberOfPixelHits) ) ATH_MSG_DEBUG( "Could not retrieve number of Pixel hits"); + + double p = 1e10; + if (fabs((*ptp)->qOverP()) >=1e-9) p = 1./(*ptp)->qOverP(); + ATH_MSG_VERBOSE( "itp:" << itpc << ": q*pT " << (*ptp)->pt()*(*ptp)->charge() << " eta " << (*ptp)->eta() << " phi " << (*ptp)->phi0() << + " d0: " << (*ptp)->d0() << " z0: " << (*ptp)->z0() << " p " << p ); + } + delete (tpc); } - delete (tpc); } @@ -270,26 +276,30 @@ StatusCode FTK_RDO_ReaderAlgo::execute() { if (m_getRefitTrackParticles) { ATH_MSG_DEBUG( " Getting TrackParticles from refitted tracks from DataProviderSvc" ); xAOD::TrackParticleContainer *tpr = m_DataProviderSvc->getTrackParticles(true); - ATH_MSG_DEBUG( "DataProviderSvc returned " << tpr->size() << " TrackParticles created from refitted tracks" ); - // if ( evtStore()->get ( tpr, m_refitTrackParticleCollectionName).isFailure() ) { - // ATH_MSG_DEBUG( "Failed to get refit FTK TrackParticleCollection with name " << m_refitTrackParticleCollectionName ); - // } - - ATH_MSG_VERBOSE( " " ); - ATH_MSG_VERBOSE( " Printing information for " << tpr->size()<< " refitted TrackParticles" ); - - int itpr=0; - for ( auto ptpr = tpr->begin(); ptpr != tpr->end(); ptpr++, itpr++) { - double p = 1.e10; - if ((*ptpr)->qOverP()!=0.) p = 1./(*ptpr)->qOverP(); - //uint8_t NumOfPixHits = 0; - //uint8_t NumOfSCTHits = 0; - //if (!(*ptpr)->summaryValue(NumOfSCTHits, xAOD::numberOfSCTHits) ) athlog << MSG::DEBUG << "Could not retrieve number of SCT hits"); - //if (!(*ptpr)->summaryValue(NumOfPixHits, xAOD::numberOfPixelHits) ) athlog << MSG::DEBUG << "Could not retrieve number of Pixel hits"); - ATH_MSG_VERBOSE( itpr << ": q*pT " << (*ptpr)->pt()*(*ptpr)->charge() << " eta " << (*ptpr)->eta() << " phi " << (*ptpr)->phi0() << - " d0: " << (*ptpr)->d0() << " z0: " << " q*p: " << p << (*ptpr)->z0() ); + if (!tpr) { + ATH_MSG_DEBUG( "DataProviderSvc->getTrackParticles(true) returned nullptr"); + } else { + ATH_MSG_DEBUG( "DataProviderSvc returned " << tpr->size() << " TrackParticles created from refitted tracks" ); + // if ( evtStore()->get ( tpr, m_refitTrackParticleCollectionName).isFailure() ) { + // ATH_MSG_DEBUG( "Failed to get refit FTK TrackParticleCollection with name " << m_refitTrackParticleCollectionName ); + // } + + ATH_MSG_VERBOSE( " " ); + ATH_MSG_VERBOSE( " Printing information for " << tpr->size()<< " refitted TrackParticles" ); + + int itpr=0; + for ( auto ptpr = tpr->begin(); ptpr != tpr->end(); ptpr++, itpr++) { + double p = 1.e10; + if ((*ptpr)->qOverP()!=0.) p = 1./(*ptpr)->qOverP(); + //uint8_t NumOfPixHits = 0; + //uint8_t NumOfSCTHits = 0; + //if (!(*ptpr)->summaryValue(NumOfSCTHits, xAOD::numberOfSCTHits) ) athlog << MSG::DEBUG << "Could not retrieve number of SCT hits"); + //if (!(*ptpr)->summaryValue(NumOfPixHits, xAOD::numberOfPixelHits) ) athlog << MSG::DEBUG << "Could not retrieve number of Pixel hits"); + ATH_MSG_VERBOSE( itpr << ": q*pT " << (*ptpr)->pt()*(*ptpr)->charge() << " eta " << (*ptpr)->eta() << " phi " << (*ptpr)->phi0() << + " d0: " << (*ptpr)->d0() << " z0: " << " q*p: " << p << (*ptpr)->z0() ); + } + delete (tpr); } - delete (tpr); } @@ -879,6 +889,10 @@ void FTK_RDO_ReaderAlgo::Fill_Raw_Tracks(){ void FTK_RDO_ReaderAlgo::Fill_Converted_Tracks(){ ATH_MSG_DEBUG("Getting converted tracks from DataProviderSvc"); TrackCollection *track_collection = m_DataProviderSvc->getTracks(false); + if (!track_collection) { + ATH_MSG_DEBUG("DataProviderSvc->getTracks(false) returned nullptr"); + return; + } ATH_MSG_DEBUG("DataProviderSvc returned " << track_collection->size() << " converted tracks"); // if ( evtStore()->record ( track_collection, m_TrackCollectionName).isFailure() ) { // ATH_MSG_DEBUG("Failed to record FTK TrackCollection with name " << m_TrackCollectionName); @@ -950,14 +964,16 @@ void FTK_RDO_ReaderAlgo::Fill_Converted_Tracks(){ } trkPt = 1.e10; - if (fabs((*track_it)->perigeeParameters()->parameters()[Trk::qOverP])>=1e-9) trkPt= sin((*track_it)->perigeeParameters()->parameters()[Trk::theta])/(*track_it)->perigeeParameters()->parameters()[Trk::qOverP]; - ATH_MSG_VERBOSE( " Track "<< iTrack << ": pT: "<< trkPt << - " eta: " << -log(std::tan((*track_it)->perigeeParameters()->parameters()[Trk::theta]/2.)) << - " phi: " << (*track_it)->perigeeParameters()->parameters()[Trk::phi0] << - " d0: " << (*track_it)->perigeeParameters()->parameters()[Trk::d0] << - " z0: " << (*track_it)->perigeeParameters()->parameters()[Trk::z0] << - " nPix: " << nPix << " nSCT: " << nSCT ); - + const Trk::Perigee* peri=(*track_it)->perigeeParameters(); + if (peri) { + if (fabs(peri->parameters()[Trk::qOverP])>=1e-9) trkPt= sin(peri->parameters()[Trk::theta])/peri->parameters()[Trk::qOverP]; + ATH_MSG_VERBOSE( " Track "<< iTrack << ": pT: "<< trkPt << + " eta: " << -log(std::tan((*track_it)->perigeeParameters()->parameters()[Trk::theta]/2.)) << + " phi: " << (*track_it)->perigeeParameters()->parameters()[Trk::phi0] << + " d0: " << (*track_it)->perigeeParameters()->parameters()[Trk::d0] << + " z0: " << (*track_it)->perigeeParameters()->parameters()[Trk::z0] << + " nPix: " << nPix << " nSCT: " << nSCT ); + } } delete(track_collection); } @@ -966,6 +982,10 @@ void FTK_RDO_ReaderAlgo::Fill_Converted_Tracks(){ void FTK_RDO_ReaderAlgo::Fill_Refit_Tracks(){ ATH_MSG_DEBUG( " Getting refitted tracks from DataProviderSvc" ); TrackCollection *refitTracks = m_DataProviderSvc->getTracks(true); + if (!refitTracks) { + ATH_MSG_DEBUG( "DataProviderSvc->getTracks(true) returned nullptr"); + return; + } ATH_MSG_DEBUG( "DataProviderSvc returned " << refitTracks->size() << " refitted tracks" ); // if ( evtStore()->get ( refitTracks, m_refitTrackCollectionName).isFailure() ) { // ATH_MSG_DEBUG( "Failed to get refit FTK TrackCollection with name " << m_refitTrackCollectionName ); @@ -1562,6 +1582,7 @@ void FTK_RDO_ReaderAlgo::Fill_Offline_Vertices(unsigned int track_requirement){ if ( evtStore()->retrieve(offlineVertices,"PrimaryVertices").isFailure() || !offlineVertices ) { ATH_MSG_ERROR("Could not retrieve offline algo primary vertices"); + return; } else { @@ -1677,6 +1698,7 @@ void FTK_RDO_ReaderAlgo::Fill_Truth_Vtx(){ if (evtStore()->retrieve(importedTruthVertices,m_verticesKey).isFailure()) { ATH_MSG_ERROR("No TruthVertexContainer with name " << m_verticesKey << " found in StoreGate!"); + return; } if (importedTruthVertices->size() !=0 ){ -- GitLab