From d9f65086d12e30d6f115ce6c8ab262e6075f2f2f Mon Sep 17 00:00:00 2001 From: Zhang Yao <zhangyao@ihep.ac.cn> Date: Fri, 15 Jan 2021 14:37:52 +0800 Subject: [PATCH] Fix id of DCH in DC/det.xml --- Detector/DetDriftChamber/compact/det.xml | 4 +- .../RecGenfitAlg/src/GenfitTrack.cpp | 41 +++++++++---------- .../RecGenfitAlg/src/RecGenfitAlgDC.cpp | 25 ++++++++++- .../RecGenfitAlg/src/RecGenfitAlgSDT.cpp | 24 ++++++++++- 4 files changed, 69 insertions(+), 25 deletions(-) diff --git a/Detector/DetDriftChamber/compact/det.xml b/Detector/DetDriftChamber/compact/det.xml index 6c2ad0d7..a070d543 100644 --- a/Detector/DetDriftChamber/compact/det.xml +++ b/Detector/DetDriftChamber/compact/det.xml @@ -16,7 +16,7 @@ </includes> <define> - <constant name="world_size" value="2226*m"/> + <constant name="world_size" value="2226*mm"/> <constant name="world_x" value="world_size"/> <constant name="world_y" value="world_size"/> <constant name="world_z" value="world_size"/> @@ -65,7 +65,7 @@ </regions> <detectors> - <detector id="1" name="DriftChamber" type="DriftChamber" readout="DriftChamberHitsCollection" vis="VisibleBlue" sensitive="true" region="DriftChamberRegion"> + <detector id="7" name="DriftChamber" type="DriftChamber" readout="DriftChamberHitsCollection" vis="VisibleBlue" sensitive="true" region="DriftChamberRegion"> <envelope vis="SeeThrough"> <shape type="BooleanShape" operation="Union" material="Air"> <shape type="Tube" rmin="SDT_radius_min" rmax="909*mm" dz="SDT_half_length" /> diff --git a/Reconstruction/RecGenfitAlg/src/GenfitTrack.cpp b/Reconstruction/RecGenfitAlg/src/GenfitTrack.cpp index 37778c62..b7cbd8b0 100644 --- a/Reconstruction/RecGenfitAlg/src/GenfitTrack.cpp +++ b/Reconstruction/RecGenfitAlg/src/GenfitTrack.cpp @@ -46,8 +46,8 @@ const int GenfitTrack::s_PDG[2][5] bool sortDCHit(edm4hep::ConstSimTrackerHit hit1,edm4hep::ConstSimTrackerHit hit2) { - std::cout<<"hit1"<<hit1<<std::endl; - std::cout<<"hit2"<<hit2<<std::endl; + //std::cout<<"hit1"<<hit1<<std::endl; + //std::cout<<"hit2"<<hit2<<std::endl; bool isEarly=hit1.getTime()<hit2.getTime(); return isEarly; } @@ -206,7 +206,7 @@ bool GenfitTrack::addSpacePointTrakerHit(edm4hep::ConstTrackerHit& hit, p[1]=pos.y*dd4hep::mm; p[2]=pos.z*dd4hep::mm; - GenfitMsg::get()<<MSG::DEBUG<<m_name<<" addSpacePointMeasurement "<<hitID + GenfitMsg::get()<<MSG::DEBUG<<m_name<<" addSpacePointTrakerHit"<<hitID <<"pos "<<p[0]<<" "<<p[1]<<" "<<p[2]<<" cm"<<endmsg; /// New a SpacepointMeasurement double cov[6]; @@ -232,7 +232,7 @@ bool GenfitTrack::addSpacePointTrakerHit(edm4hep::ConstTrackerHit& hit, genfit::TrackPoint* trackPoint = new genfit::TrackPoint(sMeas,m_track); m_track->insertPoint(trackPoint); - GenfitMsg::get()<<MSG::DEBUG<<"end of addSpacePointMeasurement"<<endmsg; + GenfitMsg::get()<<MSG::DEBUG<<"end of addSpacePointTrakerHit"<<endmsg; return true; } @@ -248,22 +248,22 @@ bool GenfitTrack::addSpacePointMeasurement(const TVectorD& pos, pos_t(2)=pos(2)*dd4hep::mm; /// smear hit position with same weight - TVectorD pos_smeared(pos_t); + TVectorD pos_smeared(3); for (int i=0;i<3;i++){ - pos_smeared[i] += gRandom->Gaus(0, sigma/TMath::Sqrt(3.)); + pos_smeared[i] = pos_t(i)+gRandom->Gaus(0, sigma/TMath::Sqrt(3.)); } /// New a SpacepointMeasurement TMatrixDSym hitCov(3); - sigma=sigma*dd4hep::mm; - hitCov(0,0)=sigma*sigma; - hitCov(1,1)=sigma*sigma; - hitCov(2,2)=sigma*sigma; + 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; GenfitMsg::get()<< MSG::DEBUG<<m_name<<" addSpacePointMeasurement detID " <<detID<<" hitId "<<hitID<<" " <<pos_t[0]<<" "<<pos_t[1]<<" "<<pos_t[2] <<" cm smeared "<<pos_smeared[0]<<" "<<pos_smeared[1]<<" " - <<pos_smeared[2]<<" sigma "<<sigma<<" cm"<<endmsg; + <<pos_smeared[2]<<" sigma_t "<<sigma_t<<" cm"<<endmsg; genfit::SpacepointMeasurement* sMeas = new genfit::SpacepointMeasurement(pos_smeared,hitCov,detID,hitID,nullptr); @@ -648,7 +648,6 @@ double GenfitTrack::extrapolateToHit( TVector3& poca, TVector3& pocaDir, int GenfitTrack::addSimTrackerHits(const edm4hep::Track& track, const edm4hep::MCRecoTrackerAssociationCollection* assoHits, float sigma){ - //A TrakerHit collection std::vector<edm4hep::ConstSimTrackerHit> sortedDCTrackHitCol; @@ -665,18 +664,18 @@ int GenfitTrack::addSimTrackerHits(const edm4hep::Track& track, UTIL::BitField64 encoder(lcio::ILDCellID0::encoder_string); encoder.setValue(hit.getCellID()); int detID=encoder[lcio::ILDCellID0::subdet]; - //GenfitMsg::get()<<MSG::DEBUG<<m_name<<" "<<iHit<<" hit "<<hit - //<<" detID "<<detID<<endmsg; + GenfitMsg::get()<<MSG::DEBUG<<m_name<<" "<<iHit<<" hit "<<hit + <<" detID "<<detID<<endmsg; if(detID==lcio::ILDDetID::VXD || detID==lcio::ILDDetID::SIT || detID==lcio::ILDDetID::SET || detID==lcio::ILDDetID::FTD){ - //if(addSpacePointTrakerHit(hit,hitID)){ - // GenfitMsg::get()<<MSG::DEBUG<<"add slicon space point"<<endmsg; - // hitID++; - //}else{ - // GenfitMsg::get()<<MSG::ERROR<<"addSpacePointTrakerHit" - // <<detID<<" "<<hit.getCellID()<<" faieled"<<endmsg; - //} + if(addSpacePointTrakerHit(hit,hitID)){ + GenfitMsg::get()<<MSG::DEBUG<<"add slicon space point"<<endmsg; + hitID++; + }else{ + GenfitMsg::get()<<MSG::ERROR<<"silicon addSpacePointTrakerHit" + <<detID<<" "<<hit.getCellID()<<" faieled"<<endmsg; + } }else if(detID==7){ //if(addSpacePointMeasurement(p,sigma,hit.getCellID(),hitID)){ // GenfitMsg::get()<<MSG::DEBUG<<"add DC space point"<<endmsg; diff --git a/Reconstruction/RecGenfitAlg/src/RecGenfitAlgDC.cpp b/Reconstruction/RecGenfitAlg/src/RecGenfitAlgDC.cpp index 8f8445b8..478d88a5 100644 --- a/Reconstruction/RecGenfitAlg/src/RecGenfitAlgDC.cpp +++ b/Reconstruction/RecGenfitAlg/src/RecGenfitAlgDC.cpp @@ -339,7 +339,7 @@ void RecGenfitAlgDC::debugTrack(int pidType,const GenfitTrack* genfitTrack) TMatrixDSym fittedCov; TLorentzVector fittedPos; TVector3 fittedMom; - genfitTrack->getFittedState(fittedPos,fittedMom,fittedCov); + int fittedState=genfitTrack->getFittedState(fittedPos,fittedMom,fittedCov); HelixClass helix;//mm and GeV float pos[3]={float(fittedPos.X()/dd4hep::mm),float(fittedPos.Y()/dd4hep::mm), float(fittedPos.Z()/dd4hep::mm)}; @@ -347,6 +347,29 @@ void RecGenfitAlgDC::debugTrack(int pidType,const GenfitTrack* genfitTrack) helix.Initialize_VP(pos,mom,charge,m_genfitField->getBz(fittedPos.Vect())); m_pocaMomKalP[pidType]=fittedMom.Mag(); + if(m_debug>0){ + /// Get fit status + debug()<<"evt "<<m_evt<<" fit result: get status OK? pidType " + <<pidType<<" fittedState "<<fittedState<<" isFitted " + <<m_isFitted[pidType]<<" isConverged "<<m_isFitConverged[pidType] + <<" isFitConvergedFully "<<m_isFitConvergedFully[pidType] + <<" ndf "<<m_nDofKal[pidType] + <<" chi2 "<<m_chi2Kal[pidType]<<endmsg; + if((0!=fittedState)||(!m_isFitted[pidType])||(m_nDofKal[pidType]<m_ndfCut)){ + debug()<<"fitting failed"<<endmsg; + }else{ + debug()<<"evt "<<m_evt<<" fit result: Pos("<< + fittedPos.X()<<" "<< + fittedPos.Y()<<" "<< + fittedPos.Z()<<") mom("<< + fittedMom.X()<<" "<< + fittedMom.Y()<<" "<< + fittedMom.Z()<<") p_tot "<< + fittedMom.Mag()<<" pt "<< + fittedMom.Perp()<<endmsg; + } + } + } void RecGenfitAlgDC::debugEvent() diff --git a/Reconstruction/RecGenfitAlg/src/RecGenfitAlgSDT.cpp b/Reconstruction/RecGenfitAlg/src/RecGenfitAlgSDT.cpp index f55c7891..8aa61f18 100644 --- a/Reconstruction/RecGenfitAlg/src/RecGenfitAlgSDT.cpp +++ b/Reconstruction/RecGenfitAlg/src/RecGenfitAlgSDT.cpp @@ -336,7 +336,7 @@ void RecGenfitAlgSDT::debugTrack(int pidType,const GenfitTrack* genfitTrack) TMatrixDSym fittedCov; TLorentzVector fittedPos; TVector3 fittedMom; - genfitTrack->getFittedState(fittedPos,fittedMom,fittedCov); + int fittedState=genfitTrack->getFittedState(fittedPos,fittedMom,fittedCov); HelixClass helix;//mm and GeV float pos[3]={float(fittedPos.X()/dd4hep::mm),float(fittedPos.Y()/dd4hep::mm), float(fittedPos.Z()/dd4hep::mm)}; @@ -344,6 +344,28 @@ void RecGenfitAlgSDT::debugTrack(int pidType,const GenfitTrack* genfitTrack) helix.Initialize_VP(pos,mom,charge,m_genfitField->getBz(fittedPos.Vect())); m_pocaMomKalP[pidType]=fittedMom.Mag(); + if(m_debug>0){ + /// Get fit status + debug()<<"evt "<<m_evt<<" fit result: get status OK? pidType " + <<pidType<<" fittedState "<<fittedState<<" isFitted " + <<m_isFitted[pidType]<<" isConverged "<<m_isFitConverged[pidType] + <<" isFitConvergedFully "<<m_isFitConvergedFully[pidType] + <<" ndf "<<m_nDofKal[pidType] + <<" chi2 "<<m_chi2Kal[pidType]<<endmsg; + if((0!=fittedState)||(!m_isFitted[pidType])||(m_nDofKal[pidType]<m_ndfCut)){ + debug()<<"fitting failed"<<endmsg; + }else{ + debug()<<"evt "<<m_evt<<" fit result: Pos("<< + fittedPos.X()<<" "<< + fittedPos.Y()<<" "<< + fittedPos.Z()<<") mom("<< + fittedMom.X()<<" "<< + fittedMom.Y()<<" "<< + fittedMom.Z()<<") p_tot "<< + fittedMom.Mag()<<" pt "<< + fittedMom.Perp()<<endmsg; + } + } } void RecGenfitAlgSDT::debugEvent() -- GitLab