diff --git a/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.cpp b/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.cpp index 7e4dda5ce5b68c3bd6f9b03605b6b980e98b1654..df95acc6cbe9cfa3fe53902b659792f367b5c558 100644 --- a/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.cpp +++ b/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.cpp @@ -32,6 +32,8 @@ //#include "Tools/KiTrackMarlinCEDTools.h" #include "Tools/FTDHelixFitter.h" +#include <TStopwatch.h> + using namespace MarlinTrk ; // Used to fedine the quality of the track output collection @@ -64,6 +66,23 @@ StatusCode ForwardTrackingAlg::initialize(){ // can be printed. As this is mainly used for debugging it is not a steerable parameter. //if( _useCED )MarlinCED::init(this) ; //CED + if(m_dumpTime){ + NTuplePtr nt1(ntupleSvc(), "MyTuples/Time"+name()); + if ( !nt1 ) { + m_tuple = ntupleSvc()->book("MyTuples/Time"+name(),CLID_ColumnWiseTuple,"Tracking time"); + if ( 0 != m_tuple ) { + m_tuple->addItem ("timeTotal", m_timeTotal ).ignore(); + } + else { + fatal() << "Cannot book MyTuples/Time"+name() <<endmsg; + return StatusCode::FAILURE; + } + } + else{ + m_tuple = nt1; + } + } + // Now set min and max values for all the criteria for( unsigned i=0; i < _criteriaNames.size(); i++ ){ std::vector< float > emptyVec; @@ -181,6 +200,8 @@ StatusCode ForwardTrackingAlg::initialize(){ StatusCode ForwardTrackingAlg::execute(){ debug() << " processing event number " << _nEvt << endmsg; + auto stopwatch = TStopwatch(); + auto trkCol = _outColHdl.createAndPut(); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // @@ -683,6 +704,12 @@ StatusCode ForwardTrackingAlg::execute(){ //if( _useCED ) MarlinCED::draw(this); _nEvt ++ ; + + if(m_dumpTime&&m_tuple){ + m_timeTotal = stopwatch.RealTime()*1000; + m_tuple->write(); + } + return StatusCode::SUCCESS; } diff --git a/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.h b/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.h index 56de6af9f2bb3ea94b24554b3139a10b658b0600..bd7a5173be02214e734579e3d4c025f8006ec1a2 100644 --- a/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.h +++ b/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.h @@ -21,6 +21,8 @@ #include "Criteria/Criteria.h" #include "ILDImpl/SectorSystemFTD.h" +#include "GaudiKernel/NTuple.h" + using namespace KiTrack; using namespace KiTrackMarlin; @@ -234,7 +236,10 @@ class ForwardTrackingAlg : public GaudiAlgorithm { int _nRun ; int _nEvt ; - + + NTuple::Tuple* m_tuple; + NTuple::Item<float> m_timeTotal; + /** B field in z direction */ double _Bz; @@ -255,6 +260,7 @@ class ForwardTrackingAlg : public GaudiAlgorithm { Gaudi::Property<std::vector<std::string> > _criteriaNames{this, "Criteria", Criteria::getAllCriteriaNamesVec()}; Gaudi::Property<std::vector<float> > _critMinimaInit{this, "CriteriaMin", {} }; Gaudi::Property<std::vector<float> > _critMaximaInit{this, "CriteriaMax", {} }; + Gaudi::Property<bool> m_dumpTime{this, "DumpTime", true}; std::map<std::string, std::vector<float> > _critMinima; std::map<std::string, std::vector<float> > _critMaxima; diff --git a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp index 792685092237ca9248c16bc63dd7fca8a8ce9f1f..d4741f2eb165767d51fdaf7afee0612dacf942b7 100644 --- a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp +++ b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp @@ -15,6 +15,8 @@ #include "TrackSystemSvc/MarlinTrkUtils.h" +#include <TStopwatch.h> + using namespace KiTrack; DECLARE_COMPONENT(TrackSubsetAlg) @@ -39,6 +41,23 @@ StatusCode TrackSubsetAlg::initialize() { _nRun = 0 ; _nEvt = 0 ; + if(m_dumpTime){ + NTuplePtr nt1(ntupleSvc(), "MyTuples/Time"+name()); + if ( !nt1 ) { + m_tuple = ntupleSvc()->book("MyTuples/Time"+name(),CLID_ColumnWiseTuple,"Tracking time"); + if ( 0 != m_tuple ) { + m_tuple->addItem ("timeTotal", m_timeTotal ).ignore(); + } + else { + fatal() << "Cannot book MyTuples/Time"+name() <<endmsg; + return StatusCode::FAILURE; + } + } + else{ + m_tuple = nt1; + } + } + for(unsigned i=0; i<_trackInputColNames.size(); i++){ _inTrackColHdls.push_back(new DataHandle<edm4hep::TrackCollection> (_trackInputColNames[i], Gaudi::DataHandle::Reader, this)); } @@ -96,6 +115,8 @@ StatusCode TrackSubsetAlg::finalize(){ } StatusCode TrackSubsetAlg::execute(){ + auto stopwatch = TStopwatch(); + std::vector<edm4hep::Track> tracks; auto trkCol = _outColHdl.createAndPut(); @@ -331,6 +352,12 @@ StatusCode TrackSubsetAlg::execute(){ Navigation::Instance()->Initialize(); _nEvt ++ ; + + if(m_dumpTime&&m_tuple){ + m_timeTotal = stopwatch.RealTime()*1000; + m_tuple->write(); + } + return StatusCode::SUCCESS; } diff --git a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.h b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.h index 952d08fa2607dee095444f3dcf0563901c28dc63..1023eba976e861461174d93a7158294328ef4854 100644 --- a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.h +++ b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.h @@ -11,6 +11,7 @@ #include "Math/ProbFunc.h" +#include "GaudiKernel/NTuple.h" /** Processor that takes tracks from multiple sources and outputs them (or modified versions, or a subset of them) * as one track collection. * @@ -74,11 +75,15 @@ class TrackSubsetAlg : public GaudiAlgorithm { Gaudi::Property<float> _initialTrackError_tanL{this, "InitialTrackErrorTanL",1e2}; Gaudi::Property<double> _maxChi2PerHit{this, "MaxChi2PerHit", 1e2}; Gaudi::Property<double> _omega{this, "Omega", 0.75}; + Gaudi::Property<bool> m_dumpTime{this, "DumpTime", true}; float _bField; int _nRun ; int _nEvt ; + + NTuple::Tuple* m_tuple; + NTuple::Item<float> m_timeTotal; }; /** A functor to return whether two tracks are compatible: The criterion is if the share a TrackerHit or more */