From 00a4e9848ee422566711653f878fd2244f0550ef Mon Sep 17 00:00:00 2001 From: Zhang Yao <zhangyao@ihep.ac.cn> Date: Mon, 18 Jan 2021 11:03:11 +0800 Subject: [PATCH] Fix unit error in smear DC hit --- Reconstruction/RecGenfitAlg/CMakeLists.txt | 7 ++----- Reconstruction/RecGenfitAlg/src/GenfitTrack.cpp | 15 ++++++++------- Reconstruction/RecGenfitAlg/src/GenfitTrack.h | 4 ++-- .../RecGenfitAlg/src/RecGenfitAlgDC.cpp | 8 ++++---- Reconstruction/RecGenfitAlg/src/RecGenfitAlgDC.h | 1 + .../RecGenfitAlg/src/RecGenfitAlgSDT.cpp | 2 +- .../Tracking/src/TruthTracker/TruthTrackerAlg.cpp | 13 +++++++++---- 7 files changed, 27 insertions(+), 23 deletions(-) diff --git a/Reconstruction/RecGenfitAlg/CMakeLists.txt b/Reconstruction/RecGenfitAlg/CMakeLists.txt index 45617cab..c3ea9300 100644 --- a/Reconstruction/RecGenfitAlg/CMakeLists.txt +++ b/Reconstruction/RecGenfitAlg/CMakeLists.txt @@ -8,8 +8,6 @@ gaudi_add_module(RecGenfitAlg src/GenfitMaterialInterface.cpp src/GenfitMsg.cpp LINK GearSvc -# EventSeeder -# TrackSystemSvcLib Gaudi::GaudiAlgLib Gaudi::GaudiKernel ${GEAR_LIBRARIES} @@ -20,14 +18,13 @@ gaudi_add_module(RecGenfitAlg DataHelperLib EDM4HEP::edm4hep EDM4HEP::edm4hepDict - $ENV{GENFIT_ROOT}/lib64/libgenfit2.so - + $ENV{GenFit}/lib64/libgenfit2.so ) target_include_directories(RecGenfitAlg PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>/include $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> - $<BUILD_INTERFACE:$ENV{GENFIT_ROOT}>/include + $<BUILD_INTERFACE:$ENV{GenFit}>/include ) install(TARGETS RecGenfitAlg diff --git a/Reconstruction/RecGenfitAlg/src/GenfitTrack.cpp b/Reconstruction/RecGenfitAlg/src/GenfitTrack.cpp index b7cbd8b0..f210dc9f 100644 --- a/Reconstruction/RecGenfitAlg/src/GenfitTrack.cpp +++ b/Reconstruction/RecGenfitAlg/src/GenfitTrack.cpp @@ -238,9 +238,9 @@ bool GenfitTrack::addSpacePointTrakerHit(edm4hep::ConstTrackerHit& hit, /// Add a 3d SpacepointMeasurement with MC truth position smeared by sigma bool GenfitTrack::addSpacePointMeasurement(const TVectorD& pos, - double sigma, int detID, int hitID) + double sigma, int detID, int hitID, bool smear) { - + double sigma_t=sigma*dd4hep::mm; /// Convert from CEPCSW unit to genfit unit, cm TVectorD pos_t(3); pos_t(0)=pos(0)*dd4hep::mm; @@ -250,12 +250,12 @@ bool GenfitTrack::addSpacePointMeasurement(const TVectorD& pos, /// smear hit position with same weight TVectorD pos_smeared(3); for (int i=0;i<3;i++){ - pos_smeared[i] = pos_t(i)+gRandom->Gaus(0, sigma/TMath::Sqrt(3.)); + pos_smeared[i]=pos_t(i); + if(smear) pos_smeared[i]+=gRandom->Gaus(0,sigma_t/TMath::Sqrt(3.)); } /// New a SpacepointMeasurement TMatrixDSym hitCov(3); - double sigma_t=sigma*dd4hep::mm; hitCov(0,0)=sigma_t*sigma_t; hitCov(1,1)=sigma_t*sigma_t; hitCov(2,2)=sigma_t*sigma_t; @@ -647,7 +647,7 @@ double GenfitTrack::extrapolateToHit( TVector3& poca, TVector3& pocaDir, ///Add space point measurement from edm4hep::Track to genfit track int GenfitTrack::addSimTrackerHits(const edm4hep::Track& track, const edm4hep::MCRecoTrackerAssociationCollection* assoHits, - float sigma){ + float sigma,bool smear){ //A TrakerHit collection std::vector<edm4hep::ConstSimTrackerHit> sortedDCTrackHitCol; @@ -691,6 +691,7 @@ int GenfitTrack::addSimTrackerHits(const edm4hep::Track& track, if(assoHits->at(iSimHit).getRec()==hit && assoHits->at(iSimHit).getSim().getTime()<minTime){ minTimeSimHit=assoHits->at(iSimHit).getSim(); + minTime=assoHits->at(iSimHit).getSim().getTime(); } } //std::cout<<"minTimeSimHit "<<minTimeSimHit<<std::endl; @@ -705,7 +706,7 @@ int GenfitTrack::addSimTrackerHits(const edm4hep::Track& track, ///Add DC hits to track //Sort sim DC hits by time - std::sort(sortedDCTrackHitCol.begin(),sortedDCTrackHitCol.end(),sortDCHit); + //std::sort(sortedDCTrackHitCol.begin(),sortedDCTrackHitCol.end(),sortDCHit); for(auto dCTrackerHit: sortedDCTrackHitCol){ edm4hep::Vector3d pos=dCTrackerHit.getPosition(); TVectorD p(3); @@ -713,7 +714,7 @@ int GenfitTrack::addSimTrackerHits(const edm4hep::Track& track, p[1]=pos.y; p[2]=pos.z; unsigned long long detID = dCTrackerHit.getCellID(); - if(addSpacePointMeasurement(p,sigma,detID,hitID)){ + if(addSpacePointMeasurement(p,sigma,detID,hitID,smear)){ GenfitMsg::get()<<MSG::DEBUG<<"add DC space point"<<endmsg; hitID++; }else{ diff --git a/Reconstruction/RecGenfitAlg/src/GenfitTrack.h b/Reconstruction/RecGenfitAlg/src/GenfitTrack.h index 6ab8db8e..708c33e3 100644 --- a/Reconstruction/RecGenfitAlg/src/GenfitTrack.h +++ b/Reconstruction/RecGenfitAlg/src/GenfitTrack.h @@ -102,7 +102,7 @@ class GenfitTrack { /// Add a space point measurement, return number of hits on track virtual bool addSpacePointMeasurement(const TVectorD&, double, - int detID=-1, int hitID=-1); + int detID=-1, int hitID=-1, bool smear=false); /// Add a WireMeasurement with MC truth position smeared by sigma virtual void addWireMeasurement(double driftDistance, @@ -115,7 +115,7 @@ class GenfitTrack { ///Add space point from truth to track int addSimTrackerHits(const edm4hep::Track& track, const edm4hep::MCRecoTrackerAssociationCollection* assoHits, - float sigma);// float nSigmaSelection + float sigma,bool smear=false);// float nSigmaSelection ///Store track to ReconstructedParticle bool storeTrack(edm4hep::ReconstructedParticle& dcRecParticle,int pidType, diff --git a/Reconstruction/RecGenfitAlg/src/RecGenfitAlgDC.cpp b/Reconstruction/RecGenfitAlg/src/RecGenfitAlgDC.cpp index 478d88a5..b627ae49 100644 --- a/Reconstruction/RecGenfitAlg/src/RecGenfitAlgDC.cpp +++ b/Reconstruction/RecGenfitAlg/src/RecGenfitAlgDC.cpp @@ -61,7 +61,7 @@ RecGenfitAlgDC::RecGenfitAlgDC(const std::string& name, ISvcLocator* pSvcLocator StatusCode RecGenfitAlgDC::initialize() { MsgStream log(msgSvc(), name()); - info()<<" RecGenfitAlgDC initialize()"<<endmsg; + info()<<"RecGenfitAlgDC initialize()"<<endmsg; ///Get GeomSvc m_geomSvc=Gaudi::svcLocator()->service("GeomSvc"); @@ -196,7 +196,7 @@ StatusCode RecGenfitAlgDC::execute() { StatusCode sc; m_timer=clock(); - info()<<" RecGenfitAlgDC in execute()"<<endmsg; + info()<<"RecGenfitAlgDC in execute()"<<endmsg; /////retrieve EventHeader //auto header = _headerCol.get()->at(0); @@ -248,7 +248,7 @@ StatusCode RecGenfitAlgDC::execute() } if(m_useTruthHit){ if(0==genfitTrack->addSimTrackerHits(dcTrack,assoDCHitsCol, - m_sigmaHit.value())){ + m_sigmaHit.value(),m_smearHit)){ debug()<<"addSimTrackerHits failed!"<<endmsg; return StatusCode::FAILURE; } @@ -304,7 +304,7 @@ StatusCode RecGenfitAlgDC::execute() StatusCode RecGenfitAlgDC::finalize() { MsgStream log(msgSvc(), name()); - info()<< " RecGenfitAlgDC in finalize()" << endmsg; + info()<< "RecGenfitAlgDC in finalize()" << endmsg; m_genfitFitter->writeHist(); delete m_genfitFitter; diff --git a/Reconstruction/RecGenfitAlg/src/RecGenfitAlgDC.h b/Reconstruction/RecGenfitAlg/src/RecGenfitAlgDC.h index 4619b468..1e714310 100644 --- a/Reconstruction/RecGenfitAlg/src/RecGenfitAlgDC.h +++ b/Reconstruction/RecGenfitAlg/src/RecGenfitAlgDC.h @@ -95,6 +95,7 @@ class RecGenfitAlgDC:public GaudiAlgorithm { Gaudi::Property<std::string> m_readout_name{this, "readout", "DriftChamberHitsCollection"}; Gaudi::Property<int> m_debug{this,"debug",false}; + Gaudi::Property<bool> m_smearHit{this,"smearHit",false}; Gaudi::Property<float> m_sigmaHit{this,"sigmaHit",0.11};//mm Gaudi::Property<float> m_nSigmaHit{this,"nSigmaHit",5}; Gaudi::Property<double> m_initCovResPos{this,"initCovResPos",1}; diff --git a/Reconstruction/RecGenfitAlg/src/RecGenfitAlgSDT.cpp b/Reconstruction/RecGenfitAlg/src/RecGenfitAlgSDT.cpp index 8aa61f18..18f19c8e 100644 --- a/Reconstruction/RecGenfitAlg/src/RecGenfitAlgSDT.cpp +++ b/Reconstruction/RecGenfitAlg/src/RecGenfitAlgSDT.cpp @@ -199,7 +199,7 @@ StatusCode RecGenfitAlgSDT::execute() { StatusCode sc=StatusCode::SUCCESS; m_timer=clock(); - info()<<" RecGenfitAlgSDT in execute()"<<endmsg; + info()<<"RecGenfitAlgSDT in execute()"<<endmsg; /////retrieve EventHeader //auto header = _headerCol.get()->at(0); diff --git a/Reconstruction/Tracking/src/TruthTracker/TruthTrackerAlg.cpp b/Reconstruction/Tracking/src/TruthTracker/TruthTrackerAlg.cpp index 8053ac44..d9bd55f8 100644 --- a/Reconstruction/Tracking/src/TruthTracker/TruthTrackerAlg.cpp +++ b/Reconstruction/Tracking/src/TruthTracker/TruthTrackerAlg.cpp @@ -187,10 +187,15 @@ StatusCode TruthTrackerAlg::execute() double B[3]={1e9,1e9,1e9}; m_dd4hepField.magneticField({0.,0.,0.},B); HelixClass helix; - float pos[3]={mcParticleVertexSmeared.x, - mcParticleVertexSmeared.y,mcParticleVertexSmeared.z}; - float mom[3]={mcParticleMomSmeared.x,mcParticleMomSmeared.y, - mcParticleMomSmeared.z}; + //float pos[3]={mcParticleVertexSmeared.x, + // mcParticleVertexSmeared.y,mcParticleVertexSmeared.z}; + //float mom[3]={mcParticleMomSmeared.x,mcParticleMomSmeared.y, + // mcParticleMomSmeared.z}; + ////FIXME DEBUG + float pos[3]={(float)mcParticleVertex.x, + (float)mcParticleVertex.y,(float)mcParticleVertex.z}; + float mom[3]={(float)mcParticleMom.x,(float)mcParticleMom.y, + (float)mcParticleMom.z}; helix.Initialize_VP(pos,mom,mcParticle.getCharge(),B[2]/dd4hep::tesla); ///new Track -- GitLab