From ed92ac2829e09175380727a7ce6afaea55f3c414 Mon Sep 17 00:00:00 2001 From: Stewart Martin-Haugh <smh@cern.ch> Date: Fri, 14 Aug 2020 17:38:37 +0200 Subject: [PATCH] Make T2VertexBeamSpot reentrant --- .../TrigT2BeamSpot/T2VertexBeamSpot.h | 9 +- .../TrigT2BeamSpot/T2VertexBeamSpotTool.h | 33 +++-- .../TrigT2BeamSpot/src/T2VertexBeamSpot.cxx | 61 ++------- .../src/T2VertexBeamSpotTool.cxx | 127 ++++++------------ 4 files changed, 72 insertions(+), 158 deletions(-) diff --git a/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/T2VertexBeamSpot.h b/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/T2VertexBeamSpot.h index 66b394a62de..dbcc132a655 100644 --- a/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/T2VertexBeamSpot.h +++ b/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/T2VertexBeamSpot.h @@ -29,7 +29,7 @@ /// trigger EDM #include "TrigInterfaces/AllTEAlgo.h" //Interface for the beam spot tool -#include "IT2VertexBeamSpotTool.h" +#include "T2VertexBeamSpotTool.h" namespace HLT { class TriggerElement; @@ -86,6 +86,11 @@ namespace PESA { /** Function which attaches splitted vertex collections to the trigger element output */ HLT::ErrorCode attachFeatureSplitVertex(DataVector< TrigVertexCollection > &mySplitVertexCollections, HLT::TEVec &allTEs, unsigned int type_out ); + //Until HLT::Algo inherits from AthReentrantAlgorithm or we can drop Run-2 setup + virtual bool isClonable() const override { return true; } + virtual unsigned int cardinality() const override { return 0; }//Mark as re-entrant + + //Only for Run2 settings bool m_activateTE; /*If true to be added */ bool m_activateAllTE;/*If true to be added */ @@ -116,7 +121,7 @@ namespace PESA { SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey { this, "EventInfo", "EventInfo", "" }; //Tools - ToolHandle<IT2VertexBeamSpotTool> m_beamSpotTool {this, "BeamSpotTool", "PESA::T2VertexBeamSpotTool/T2VertexBeamSpotTool" }; + ToolHandle<T2VertexBeamSpotTool> m_beamSpotTool {this, "BeamSpotTool", "PESA::T2VertexBeamSpotTool/T2VertexBeamSpotTool" }; ToolHandle<GenericMonitoringTool> m_monTool{this,"MonTool","","Monitoring tool"}; diff --git a/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/T2VertexBeamSpotTool.h b/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/T2VertexBeamSpotTool.h index af8af7b0e92..795429cd4fc 100644 --- a/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/T2VertexBeamSpotTool.h +++ b/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/T2VertexBeamSpotTool.h @@ -27,6 +27,7 @@ #include <memory> // Local tools #include "../src/T2TrackManager.h" +#include "../src/T2Track.h" #include "../src/T2BeamSpot.h" #include "../src/T2SplitVertex.h" //Athena tools @@ -37,8 +38,6 @@ //Tracking #include "TrkTrack/TrackCollection.h" #include "TrigInDetToolInterfaces/ITrigPrimaryVertexFitter.h" -//BeamSpotTool interface -#include "IT2VertexBeamSpotTool.h" //Data handles #include "StoreGate/ReadCondHandleKey.h" //Beam data @@ -68,7 +67,7 @@ namespace PESA { * @author David W. Miller <David.W.Miller@cern.ch> * */ - class T2VertexBeamSpotTool : public AthAlgTool, virtual public IT2VertexBeamSpotTool{ + class T2VertexBeamSpotTool : public AthAlgTool { public: T2VertexBeamSpotTool( const std::string& type, const std::string& name, const IInterface* parent ); @@ -100,20 +99,14 @@ namespace PESA { void selectTracks( const TrackCollection* trackCollection, - ConstDataVector<TrackCollection>& mySelectedTrackCollection, std::vector<unsigned> &trackCounter ); - - void reconstructVertices( ConstDataVector<TrackCollection>& mySelectedTrackCollection, - TrigVertexCollection& myVertexCollection, - DataVector< TrigVertexCollection >& mySplitVertexCollections ); + ConstDataVector<TrackCollection>& mySelectedTrackCollection, std::vector<unsigned> &trackCounter ) const; + unsigned int reconstructVertices( ConstDataVector<TrackCollection>& mySelectedTrackCollection, + TrigVertexCollection& myVertexCollection, + DataVector< TrigVertexCollection >& mySplitVertexCollections, const EventContext& ) const; void reconstructSplitVertices( ConstDataVector<TrackCollection>& mySelectedTrackCollection, - DataVector< TrigVertexCollection >& mySplitVertexCollections, T2TrackClusterer& trackClusterer ); - - - bool eventStage( Statistics stage ); - - void resetMonitoredVariables(); + DataVector< TrigVertexCollection >& mySplitVertexCollections, T2TrackClusterer& trackClusterer, const EventContext& ) const; bool m_passNpvTrigCuts; @@ -170,20 +163,24 @@ namespace PESA { unsigned int m_maxNpvTrigger; /* Monitor track parameters */ - void monitor_tracks(std::string prefix, std::string suffix, std::vector<const T2Track*> tracks ); + void monitor_tracks(const std::string& prefix, const std::string& suffix, const std::vector<T2Track>& tracks ) const; /* Monitor cluster parameters */ - void monitor_cluster( const T2TrackClusterer& clusterer ); + void monitor_cluster( const T2TrackClusterer& clusterer ) const; /* Monitor parameters of tracks inside the cluster */ - void monitor_cluster_tracks(T2TrackClusterer& clusterer, const Trk::Track & track ); + void monitor_cluster_tracks(T2TrackClusterer& clusterer, const Trk::Track & track ) const; /* Monitor vertex parameters */ - void monitor_vertex(std::string prefix, std::string suffix, const T2Vertex &vertex ); + void monitor_vertex(const std::string& prefix, const std::string& suffix, const T2Vertex &vertex ) const; + + std::string m_vertexCollName; private: ToolHandle<GenericMonitoringTool> m_monTool{this,"MonTool","","Monitoring tool"}; + + }; diff --git a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2VertexBeamSpot.cxx b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2VertexBeamSpot.cxx index b64d686df28..0ed455d0a96 100644 --- a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2VertexBeamSpot.cxx +++ b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2VertexBeamSpot.cxx @@ -104,19 +104,14 @@ HLT::ErrorCode T2VertexBeamSpot::hltExecute( std::vector< HLT::TEVec >& tes_in, // Start the overall timer auto tTotal = Monitored::Timer("TIME_TotalTime"); - //Reset monitored variables from previous event - m_beamSpotTool->resetMonitoredVariables(); - // Initialize booleans for event stats - m_beamSpotTool->m_eventStageFlag = std::vector<bool>( numStatistics, false ); - m_beamSpotTool->eventStage( allInput ); - // Initialize vertex collections TrigVertexCollection myVertexCollection; DataVector< TrigVertexCollection > mySplitVertexCollections; // Be optimistic HLT::ErrorCode errorCode = HLT::OK; - + unsigned int nPassVtx = 0; + const EventContext& ctx = Algorithm::getContext(); // Process event - break to do cleanup before returning do { @@ -128,8 +123,6 @@ HLT::ErrorCode T2VertexBeamSpot::hltExecute( std::vector< HLT::TEVec >& tes_in, } else ATH_MSG_DEBUG( "Number of input TEs = " << tes_in.size() ); - m_beamSpotTool->eventStage( hasTE ); - //----------------- // Track selection @@ -225,20 +218,16 @@ HLT::ErrorCode T2VertexBeamSpot::hltExecute( std::vector< HLT::TEVec >& tes_in, - m_beamSpotTool->eventStage( hasSeedTrack ); - // Check for the total number of available tracks if( m_beamSpotTool->notEnoughTracks( nSelectedTracks ) ){ ATH_MSG_DEBUG( " Not enough total passed tracks to vertex"); break; } - m_beamSpotTool->eventStage( enoughTracks ); - //----------------------- // Vertex reconstruction // Cluster tracks in z around seed track and reconstruct vertices - m_beamSpotTool->reconstructVertices( mySelectedTrackCollection, myVertexCollection, mySplitVertexCollections ); + nPassVtx = m_beamSpotTool->reconstructVertices( mySelectedTrackCollection, myVertexCollection, mySplitVertexCollections, ctx ); } while (false); @@ -258,9 +247,6 @@ HLT::ErrorCode T2VertexBeamSpot::hltExecute( std::vector< HLT::TEVec >& tes_in, HLT::TEVec allTEs = getAllTEs(tes_in); ATH_MSG_DEBUG( "n of all TEs: " << allTEs.size() ); - //Check how many vertices passed the selection - unsigned int nPassedVtx = m_beamSpotTool->m_NvtxPass; - //Save all events, or only those events which pass the Npv cuts (if activated)! if ( m_activateAllTE ) { ATH_MSG_DEBUG( "Activate all TEs" ); @@ -270,10 +256,10 @@ HLT::ErrorCode T2VertexBeamSpot::hltExecute( std::vector< HLT::TEVec >& tes_in, } - if ( ! m_activateAllTE && m_activateTE && nPassedVtx > 0 ) { - ATH_MSG_DEBUG( "Activate TE with "<< nPassedVtx << " vertices" ); + if ( ! m_activateAllTE && m_activateTE && nPassVtx > 0 ) { + ATH_MSG_DEBUG( "Activate TE with "<< nPassVtx << " vertices" ); // FIXME: Why do we need one TE per vertex? - for ( unsigned i=0; i < nPassedVtx; ++i ) { + for ( unsigned i=0; i < nPassVtx; ++i ) { // Create an output TE seeded by the inputs HLT::TriggerElement* outputTE = config()->getNavigation()->addNode(allTEs, type_out); outputTE->setActiveState(true); @@ -299,10 +285,6 @@ HLT::ErrorCode T2VertexBeamSpot::hltExecute( std::vector< HLT::TEVec >& tes_in, - //Monitoring eventStatistics - auto eventStatistics = Monitored::Collection("EventStatistics", m_beamSpotTool->m_eventStage ); - auto mon = Monitored::Group(m_monTool, eventStatistics, timeToCreateOutput ); - // Return cause you're done! return errorCode; } @@ -418,25 +400,10 @@ StatusCode T2VertexBeamSpot::execute(){ ATH_MSG_DEBUG( "Beam spot algorithm execute method" ); - - - //Reset monitored variables from previous event - m_beamSpotTool->resetMonitoredVariables(); - // Initialize booleans for event stats - m_beamSpotTool->m_eventStageFlag = std::vector<bool>( numStatistics, false ); - m_beamSpotTool->eventStage( allInput ); - const EventContext& ctx = Algorithm::getContext(); - ATH_MSG_DEBUG( "Run: " << ctx.eventID().run_number() << - " Event Number: " << ctx.eventID().event_number() << - " Lumi Block: " << ctx.eventID().lumi_block() << - " Bunch Crossing ID " << ctx.eventID().bunch_crossing_id() ); - - //Pass event ID for vertex splitting alg, TODO: need to revisit - m_beamSpotTool->m_EventID = ctx.eventID().event_number() ; //// Initialize vertex collections - SG::WriteHandle<TrigVertexCollection> myVertexCollection(m_outputVertexCollectionKey); + SG::WriteHandle<TrigVertexCollection> myVertexCollection(m_outputVertexCollectionKey, ctx); myVertexCollection = std::make_unique<TrigVertexCollection>(); //Need to convert to the write handles @@ -452,7 +419,6 @@ StatusCode T2VertexBeamSpot::execute(){ unsigned nHighPtTracks = 0; ATH_MSG_DEBUG( "Selecting tracks" ); - //Loop over trackCollections { //Monitor how long does it take to loop over all collections auto tSelectingTracks = Monitored::Timer("TIME_SelectingTracks"); @@ -462,7 +428,7 @@ StatusCode T2VertexBeamSpot::execute(){ auto nTotalPassedTracks = Monitored::Scalar<unsigned>("nTotalPassedTracks"); auto nTotalHighPTTracks = Monitored::Scalar<unsigned>("nTotalHighPTTracks"); //Loop over track collections and select tracks - SG::ReadHandle<TrackCollection> trackCollection (m_trackCollectionKey); + SG::ReadHandle<TrackCollection> trackCollection (m_trackCollectionKey, ctx); ATH_CHECK(trackCollection.isValid()); //Dereference tracks @@ -494,37 +460,28 @@ StatusCode T2VertexBeamSpot::execute(){ return StatusCode::SUCCESS; } - m_beamSpotTool->eventStage( hasSeedTrack ); - // Check for the total number of available tracks if ( ( m_beamSpotTool->notEnoughTracks(nSelectedTracks)) ) { ATH_MSG_DEBUG( "Not enough total passed tracks to vertex"); return StatusCode::SUCCESS; } - m_beamSpotTool->eventStage( enoughTracks ); - ATH_MSG_DEBUG( "Reconstruct vertices" ); //Reconstruct vertices if passed track selection { //Monitor how long does it take to loop over all collections auto tReconstructVertices = Monitored::Timer("TIME_ReconstructVertices"); - m_beamSpotTool->reconstructVertices( mySelectedTrackCollection, *myVertexCollection, mySplitVertexCollections ); + m_beamSpotTool->reconstructVertices( mySelectedTrackCollection, *myVertexCollection, mySplitVertexCollections, ctx ); //Monitor total number of tracks auto monitor = Monitored::Group(m_monTool, tReconstructVertices); } - //Do i want to call createOutputTEs even if the conditions are not fulfilled? ATH_MSG_DEBUG( "Number of track collection containers: " << mySelectedTrackCollection.size() ); //What should go as an output? SelectedTrackCollection and Vertices? //Atm just try add vertex //TODO: adding split vertices as well, will need an array - - //Monitoring eventStatistics - auto eventStatistics = Monitored::Collection("EventStatistics", m_beamSpotTool->m_eventStage ); - auto monitor = Monitored::Group(m_monTool, eventStatistics, tTotal); return StatusCode::SUCCESS; } diff --git a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2VertexBeamSpotTool.cxx b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2VertexBeamSpotTool.cxx index e0e9a225143..81e8fda7e0e 100644 --- a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2VertexBeamSpotTool.cxx +++ b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2VertexBeamSpotTool.cxx @@ -42,16 +42,6 @@ using std::abs; using namespace PESA; -//Delete a vector of dynamically created objects -template<typename T> -void deleteVector(std::vector<T*> &v){ - while(!v.empty()){ - delete v.back(); - v.pop_back(); - } - v.clear(); -} - namespace Beamspot { class TrackPTSort{ @@ -81,7 +71,6 @@ PESA::T2VertexBeamSpotTool::T2VertexBeamSpotTool( const std::string& type, const : AthAlgTool( type, name, parent), m_primaryVertexFitterTool("TrigInDetToolInterfaces/ITrigPrimaryVertexFitter", this){ - declareInterface<IT2VertexBeamSpotTool>(this); //Declare properties in here declareProperty( "BeamSpotData", m_beamSpotKey ); declareProperty( "PrimaryVertexFitter", m_primaryVertexFitterTool); @@ -165,7 +154,7 @@ StatusCode T2VertexBeamSpotTool::initialize(){ * Detailed description of the select track function ***********************************************/ void T2VertexBeamSpotTool::selectTracks( const TrackCollection* trackCollection, - ConstDataVector<TrackCollection>& mySelectedTrackCollection, std::vector<unsigned> &trackCounter ) { + ConstDataVector<TrackCollection>& mySelectedTrackCollection, std::vector<unsigned> &trackCounter ) const { ATH_MSG_DEBUG( "Selecting tracks for the beamSpot algorithm" ); @@ -177,7 +166,7 @@ void T2VertexBeamSpotTool::selectTracks( const TrackCollection* trackCollection, auto nHiPTTracksPassedPerROI = Monitored::Scalar<unsigned>("SelectedHiPTTracksPerROI", 0); //T2Track with easily accesable parameters - std::vector<const T2Track*> myTracks; myTracks.reserve(trackCollection->size() ); + std::vector<T2Track> myTracks; myTracks.reserve(trackCollection->size() ); // Loop over all tracks in the given track collections for ( TrackCollection::const_iterator trackIter = trackCollection->begin(); @@ -186,13 +175,12 @@ void T2VertexBeamSpotTool::selectTracks( const TrackCollection* trackCollection, const Trk::Track& track = **trackIter; // Make sure that the event has tracks - eventStage( hasTracks ); //Counter for all input tracks nTracksPerROI++; - const T2Track *myTrack = new T2Track( track ); + T2Track myTrack( track ); // Check for passed track - if ( isGoodTrack( *myTrack ) ) { + if ( isGoodTrack( myTrack ) ) { // Add this track to the set used to find a vertex mySelectedTrackCollection.push_back( *trackIter ); @@ -203,22 +191,22 @@ void T2VertexBeamSpotTool::selectTracks( const TrackCollection* trackCollection, nTracksPassedPerROI++; // Check for high-pT track - if ( myTrack->Pt() > m_trackSeedPt ){ + if ( myTrack.Pt() > m_trackSeedPt ){ //Counter for high pT tracks nHiPTTracksPassedPerROI++; } - else ATH_MSG_DEBUG( "Track->pt: " << myTrack->Pt()*GeV ); + else ATH_MSG_DEBUG( "Track.pt: " << myTrack.Pt()*GeV ); } else { - ATH_MSG_DEBUG( "Track->failed selection: d0: " << myTrack->D0() << - " z0: " << myTrack->Z0() << - " phi0: " << myTrack->Phi() << - " eta: " << myTrack->Eta() << - " pT: " << myTrack->Pt()*GeV << - " chi2: " << myTrack->Qual() << - " NpixSPs: " << myTrack->PIXHits() << - " NsctSPs: " << myTrack->SCTHits() << - " NstrawHits: " << myTrack->TRTHits() ); + ATH_MSG_DEBUG( "Track.failed selection: d0: " << myTrack.D0() << + " z0: " << myTrack.Z0() << + " phi0: " << myTrack.Phi() << + " eta: " << myTrack.Eta() << + " pT: " << myTrack.Pt()*GeV << + " chi2: " << myTrack.Qual() << + " NpixSPs: " << myTrack.PIXHits() << + " NsctSPs: " << myTrack.SCTHits() << + " NstrawHits: " << myTrack.TRTHits() ); } } //end for loop over tracks in a collection @@ -236,14 +224,12 @@ void T2VertexBeamSpotTool::selectTracks( const TrackCollection* trackCollection, //Monitor counters per track collection and time to select tracks auto mon = Monitored::Group(m_monTool, nTracksPerROI, nTracksPassedPerROI, nHiPTTracksPassedPerROI, timerTrackSelection ); //timers - //clear tracks - deleteVector( myTracks ); } -void T2VertexBeamSpotTool::reconstructVertices( ConstDataVector<TrackCollection>& mySelectedTrackCollection, +unsigned int T2VertexBeamSpotTool::reconstructVertices( ConstDataVector<TrackCollection>& mySelectedTrackCollection, TrigVertexCollection& myVertexCollection, - DataVector< TrigVertexCollection >& mySplitVertexCollections) { + DataVector< TrigVertexCollection >& mySplitVertexCollections, const EventContext& ctx) const { ATH_MSG_DEBUG( "Reconstructing vertices" ); //Monitoring counters and timers @@ -309,7 +295,6 @@ void T2VertexBeamSpotTool::reconstructVertices( ConstDataVector<TrackCollection> } // Event has a good cluster - eventStage( hasCluster ); nClusters++; // Monitor properties of of the cluster @@ -339,14 +324,11 @@ void T2VertexBeamSpotTool::reconstructVertices( ConstDataVector<TrackCollection> continue; } - // Event has a vertex! - eventStage( hasVertex ); - // Update vertex counter nVtx++; // Extract beam spot parameters - SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey }; + SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey, ctx }; T2BeamSpot beamSpot(*beamSpotHandle); @@ -369,10 +351,7 @@ void T2VertexBeamSpotTool::reconstructVertices( ConstDataVector<TrackCollection> // Add primary vertex to collection myVertexCollection.push_back( primaryVertex ); // passes ownership to vertex collection - // Event has good vertex - eventStage( hasGoodVertex ); - - //Monito parameters of the passed vertex + //Monitor parameters of the passed vertex monitor_vertex( "Vertex", "Pass", myVertex ); //Update good vertex counter @@ -405,7 +384,7 @@ void T2VertexBeamSpotTool::reconstructVertices( ConstDataVector<TrackCollection> { // Split, optinally re-cluster, and fit separate vertices ATH_MSG_DEBUG( "Reconstruct split vertices"); - reconstructSplitVertices( mySplitTrackCollection, mySplitVertexCollections, trackClusterer ); + reconstructSplitVertices( mySplitTrackCollection, mySplitVertexCollections, trackClusterer, ctx ); } // Alternative 3: Split all the tracks and iterate with the remaining tracks // mySplitTrackCollection = mySelectedTrackCollection; @@ -426,19 +405,15 @@ void T2VertexBeamSpotTool::reconstructVertices( ConstDataVector<TrackCollection> }//End looping over tracks - //Store flag whether the nvtx passed trig cuts - m_passNpvTrigCuts = (m_minNpvTrigger <= nPassVtx) && (nPassVtx <= m_maxNpvTrigger); - //Keep the track of how many vertices passed the selection - m_NvtxPass = nPassVtx; - //monitor number of (passed) vertices, clusters, etc auto mon = Monitored::Group(m_monTool, nVtx, nPassVtx, nPassBCIDVtx, nClusters, timerVertexRec ); + return static_cast<unsigned int>(nPassVtx); } void T2VertexBeamSpotTool::reconstructSplitVertices( ConstDataVector<TrackCollection>& myFullTrackCollection, DataVector< TrigVertexCollection >& mySplitVertexCollections, - T2TrackClusterer& trackClusterer ) { + T2TrackClusterer& trackClusterer, const EventContext& ctx ) const { auto timerVertexRec = Monitored::Timer("TIME_SplitVertexReconstruction"); @@ -449,10 +424,8 @@ void T2VertexBeamSpotTool::reconstructSplitVertices( ConstDataVector<TrackCollec auto mon = Monitored::Group(m_monTool, timeToSortTracks ); } - // Split the track collection (typically into halves) // This returns m_nSplitVertices (ideally) or fewer (if clustering fails) track collections - m_trackManager.ResetKey( m_EventID % 2 - 1 ); - vector< ConstDataVector<TrackCollection> > splitTrackCollections = m_trackManager.split( *myFullTrackCollection.asDataVector() ); + vector< ConstDataVector<TrackCollection> > splitTrackCollections = m_trackManager.split( *myFullTrackCollection.asDataVector(), ctx ); // Add a new track collection for the split vertices corresponding to this primary vertex // There can be anywhere between zero and m_nSplitVertices entries in the collection @@ -582,38 +555,29 @@ bool T2VertexBeamSpotTool::isGoodVertexBCID( const T2Vertex& vertex ) const { ); } -void T2VertexBeamSpotTool::resetMonitoredVariables() { - if(m_eventStageFlag.size() != 0 ) m_eventStageFlag.clear(); - if(m_eventStage.size() != 0 ) m_eventStage.clear(); - //Reset all variables just in case - m_NvtxPass = 0; - m_passNpvTrigCuts = false; - -} - //Monitoring track variables -void T2VertexBeamSpotTool::monitor_tracks(std::string prefix, std::string suffix, std::vector<const T2Track*> tracks ){ - auto trackPt = Monitored::Collection( prefix + "Pt" + suffix, tracks, [](const T2Track *t){ return t->Pt() ;}); - auto trackEta = Monitored::Collection( prefix + "Eta" + suffix, tracks, [](const T2Track *t){ return t->Eta() ;}); - auto trackPhi = Monitored::Collection( prefix + "Phi" + suffix, tracks, [](const T2Track *t){ return t->Phi() ;}); - auto trackZ0 = Monitored::Collection( prefix + "Z0" + suffix, tracks, [](const T2Track *t){ return t->Z0() ;}); - auto trackD0 = Monitored::Collection( prefix + "D0" + suffix, tracks, [](const T2Track *t){ return t->D0() ;}); - auto trackZ0err = Monitored::Collection( prefix + "Z0err" + suffix, tracks, [](const T2Track *t){ return t->Z0err() ;}); - auto trackD0err = Monitored::Collection( prefix + "D0err" + suffix, tracks, [](const T2Track *t){ return t->D0err() ;}); - auto trackNDF = Monitored::Collection( prefix + "NDF" + suffix, tracks, [](const T2Track *t){ return t->NDF() ;}); - auto trackQual = Monitored::Collection( prefix + "Qual" + suffix, tracks, [](const T2Track *t){ return t->Qual() ;}); - auto trackChi2Prob= Monitored::Collection( prefix + "Chi2Prob" + suffix, tracks, [](const T2Track *t){ return t->Chi2Prob();}); - auto trackSiHits = Monitored::Collection( prefix + "SiHits" + suffix, tracks, [](const T2Track *t){ return t->SiHits() ;}); - auto trackPiHits = Monitored::Collection( prefix + "PIXHits" + suffix, tracks, [](const T2Track *t){ return t->PIXHits() ;}); - auto trackSCTHits = Monitored::Collection( prefix + "SCTHits" + suffix, tracks, [](const T2Track *t){ return t->SCTHits() ;}); - auto trackTRTHits = Monitored::Collection( prefix + "TRTHits" + suffix, tracks, [](const T2Track *t){ return t->TRTHits() ;}); +void T2VertexBeamSpotTool::monitor_tracks(const std::string& prefix, const std::string& suffix, const std::vector<T2Track>& tracks ) const { + auto trackPt = Monitored::Collection( prefix + "Pt" + suffix, tracks, [](const T2Track t){ return t.Pt() ;}); + auto trackEta = Monitored::Collection( prefix + "Eta" + suffix, tracks, [](const T2Track t){ return t.Eta() ;}); + auto trackPhi = Monitored::Collection( prefix + "Phi" + suffix, tracks, [](const T2Track t){ return t.Phi() ;}); + auto trackZ0 = Monitored::Collection( prefix + "Z0" + suffix, tracks, [](const T2Track t){ return t.Z0() ;}); + auto trackD0 = Monitored::Collection( prefix + "D0" + suffix, tracks, [](const T2Track t){ return t.D0() ;}); + auto trackZ0err = Monitored::Collection( prefix + "Z0err" + suffix, tracks, [](const T2Track t){ return t.Z0err() ;}); + auto trackD0err = Monitored::Collection( prefix + "D0err" + suffix, tracks, [](const T2Track t){ return t.D0err() ;}); + auto trackNDF = Monitored::Collection( prefix + "NDF" + suffix, tracks, [](const T2Track t){ return t.NDF() ;}); + auto trackQual = Monitored::Collection( prefix + "Qual" + suffix, tracks, [](const T2Track t){ return t.Qual() ;}); + auto trackChi2Prob= Monitored::Collection( prefix + "Chi2Prob" + suffix, tracks, [](const T2Track t){ return t.Chi2Prob();}); + auto trackSiHits = Monitored::Collection( prefix + "SiHits" + suffix, tracks, [](const T2Track t){ return t.SiHits() ;}); + auto trackPiHits = Monitored::Collection( prefix + "PIXHits" + suffix, tracks, [](const T2Track t){ return t.PIXHits() ;}); + auto trackSCTHits = Monitored::Collection( prefix + "SCTHits" + suffix, tracks, [](const T2Track t){ return t.SCTHits() ;}); + auto trackTRTHits = Monitored::Collection( prefix + "TRTHits" + suffix, tracks, [](const T2Track t){ return t.TRTHits() ;}); auto mon = Monitored::Group(m_monTool, trackPt, trackEta, trackPhi, trackZ0, trackD0, trackZ0err, trackD0err, trackNDF, trackQual, trackChi2Prob, trackSiHits, trackPiHits, trackSCTHits, trackTRTHits ); } -void T2VertexBeamSpotTool::monitor_cluster( const T2TrackClusterer& clusterer ){ +void T2VertexBeamSpotTool::monitor_cluster( const T2TrackClusterer& clusterer ) const { auto clusterZ = Monitored::Scalar<double>("ClusterZ", clusterer.seedZ0() ); auto clusterNtracks = Monitored::Scalar<int>("ClusterZ", clusterer.cluster().size() ); auto clusterNUnusedTracks = Monitored::Scalar<int>("ClusterZ", clusterer.unusedTracks().size() ); @@ -622,7 +586,7 @@ void T2VertexBeamSpotTool::monitor_cluster( const T2TrackClusterer& clusterer ) } -void T2VertexBeamSpotTool::monitor_cluster_tracks(T2TrackClusterer &clusterer, const Trk::Track &track ){ +void T2VertexBeamSpotTool::monitor_cluster_tracks(T2TrackClusterer &clusterer, const Trk::Track &track ) const { const double deltaZ0 = track.perigeeParameters()->parameters()[Trk::z0] - clusterer.seedZ0(); const AmgSymMatrix(5)& perigeeCov = *track.perigeeParameters()->covariance(); const double z0Error = std::sqrt(perigeeCov(Trk::z0,Trk::z0)); @@ -635,7 +599,7 @@ void T2VertexBeamSpotTool::monitor_cluster_tracks(T2TrackClusterer &clusterer, c -void T2VertexBeamSpotTool::monitor_vertex(std::string prefix, std::string suffix, const T2Vertex &vertex ){ +void T2VertexBeamSpotTool::monitor_vertex(const std::string& prefix, const std::string& suffix, const T2Vertex &vertex ) const { auto ntrk = Monitored::Scalar<int> ( prefix + "NTrks" + suffix, vertex.NTrks() ); auto sumpt = Monitored::Scalar<double>( prefix + "SumPt" + suffix, vertex.SumPt() ); @@ -662,13 +626,4 @@ void T2VertexBeamSpotTool::monitor_vertex(std::string prefix, std::string suffix -bool T2VertexBeamSpotTool::eventStage( Statistics stage ) { - if ( ! m_eventStageFlag[ stage ] ) - { - m_eventStageFlag[ stage ] = true; - m_eventStage.push_back( stage ); - return true; - } - return false; -} -- GitLab