diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/CMakeLists.txt index 73d2d45b9b18019677e1155a6f1bf1f7d995c377..e5d0234fd5031953fa7a614a38fdc7d0adb5d31a 100644 --- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/CMakeLists.txt @@ -11,8 +11,6 @@ atlas_depends_on_subdirs( PUBLIC Event/xAOD/xAODTracking GaudiKernel InnerDetector/InDetRecTools/InDetRecToolInterfaces - Reconstruction/Particle - Tracking/TrkVertexFitter/TrkVKalVrtFitter PRIVATE Tools/PathResolver DetectorDescription/GeoPrimitives @@ -23,7 +21,10 @@ atlas_depends_on_subdirs( PUBLIC Tracking/TrkEvent/VxSecVertex Tracking/TrkEvent/VxVertex Tracking/TrkTools/TrkToolInterfaces - Tracking/TrkVertexFitter/TrkVertexFitterInterfaces ) + Tracking/TrkVertexFitter/TrkVertexFitterInterfaces + Tracking/TrkVertexFitter/TrkVKalVrtFitter + Reconstruction/Particle + Reconstruction/MVAUtils ) #InnerDetector/InDetRecTools/InDetMaterialRejTool # External dependencies: @@ -37,7 +38,7 @@ find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread TMVA ) # PUBLIC_HEADERS InDetVKalVxInJetTool InDetTrkInJetType # INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} # LINK_LIBRARIES ${ROOT_LIBRARIES} ${Boost_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps xAODTracking GaudiKernel -# InDetRecToolInterfaces Particle TrkVKalVrtFitterLib GeoPrimitives AnalysisUtilsLib TrkNeutralParameters +# InDetRecToolInterfaces Particle TrkVKalVrtFitterLib GeoPrimitives AnalysisUtilsLib TrkNeutralParameters MVAUtils # TrkParticleBase TrkTrackSummary VxSecVertex VxVertex TrkToolInterfaces TrkVertexFitterInterfaces PathResolver ) # Component(s) in the package: @@ -45,7 +46,7 @@ atlas_add_component( InDetVKalVxInJetTool src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} LINK_LIBRARIES ${ROOT_LIBRARIES} ${Boost_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps xAODTracking PathResolver GaudiKernel - InDetRecToolInterfaces Particle TrkVKalVrtFitterLib GeoPrimitives AnalysisUtilsLib TrkNeutralParameters + InDetRecToolInterfaces Particle TrkVKalVrtFitterLib GeoPrimitives AnalysisUtilsLib TrkNeutralParameters MVAUtils TrkParticleBase TrkTrackSummary VxSecVertex VxVertex TrkToolInterfaces TrkVertexFitterInterfaces PathResolver ) # Install files from the package: diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/InDetVKalVxInJetTool/InDetTrkInJetType.h b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/InDetVKalVxInJetTool/InDetTrkInJetType.h index 3f947855d42c3b2c49b761dcbb504b8026c9aca7..51ad19ff5063d6e05df5c026751e5375ca282a86 100644 --- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/InDetVKalVxInJetTool/InDetTrkInJetType.h +++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/InDetVKalVxInJetTool/InDetTrkInJetType.h @@ -28,13 +28,10 @@ // class TLorentzVector; -namespace Rec{ - class TrackParticle; -} - -namespace Trk{ - class TrkVKalVrtFitter; -} +class IChronoStatSvc; +namespace Rec{ class TrackParticle; } +namespace MVAUtils { class BDT; } +namespace Trk { class TrkVKalVrtFitter; } namespace TMVA { class Reader; } namespace InDet { @@ -78,11 +75,16 @@ namespace InDet { private: - TMVA::Reader* m_tmvaReader; + TMVA::Reader* m_tmvaReader{}; + MVAUtils::BDT* m_localBDT{}; + IChronoStatSvc * m_timingProfile{}; + int m_trkSctHitsCut{}; int m_trkPixelHitsCut{}; float m_trkChi2Cut{}; float m_trkMinPtCut{}; + float m_jetMaxPtCut{}; + float m_jetMinPtCut{}; float m_d0_limLow{}; float m_d0_limUpp{}; float m_Z0_limLow{}; @@ -103,8 +105,9 @@ namespace InDet { float m_SigR{}; float m_ptjet{}; float m_etajet{}; - float m_ibl{}; - float m_bl{}; + float m_etatrk{}; + float m_ibl{}; + float m_bl{}; }; diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/InDetVKalVxInJetTool/InDetVKalVxInJetTool.h b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/InDetVKalVxInJetTool/InDetVKalVxInJetTool.h index e6da7b7d5b417d5653faf99813c4d0a46da699f4..896aa2b9a8c0453ef50d0ca7ff3c761b4fd4cd8a 100755 --- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/InDetVKalVxInJetTool/InDetVKalVxInJetTool.h +++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/InDetVKalVxInJetTool/InDetVKalVxInJetTool.h @@ -60,6 +60,7 @@ class TH2D; class TH1F; class TProfile; class TTree; +class IChronoStatSvc; namespace Trk{ class TrkVKalVrtFitter; @@ -238,6 +239,7 @@ namespace InDet { ToolHandle < Trk::IVertexFitter > m_fitterSvc; Trk::TrkVKalVrtFitter* m_fitSvc{}; + IChronoStatSvc * m_timingProfile{}; ToolHandle < IInDetTrkInJetType > m_trackClassificator; @@ -270,6 +272,7 @@ namespace InDet { float ptjet; float etajet; float phijet; + float etatrk[maxNTrk]; float p_prob[maxNTrk]; float s_prob[maxNTrk]; int idMC[maxNTrk]; diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/BTagVrtSec.cxx b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/BTagVrtSec.cxx index 104fb338a7223343bd1d62803a82f80142df04a5..9221419f12e526a666a554df9dcd77e1cc301a7a 100755 --- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/BTagVrtSec.cxx +++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/BTagVrtSec.cxx @@ -706,7 +706,6 @@ namespace InDet{ std::vector<double> Chi2PerTrk,VKPerigee,CovPerigee,closeVrtSig(0),closeVrtCh2(0); //TLorentzVector Momentum; std::vector<double> Impact,ImpactError; - double ImpactSignif=0; double Chi2, Signif3D, Dist2D, JetVrtDir; long int Charge; int i,j; @@ -745,10 +744,11 @@ namespace InDet{ m_hb_impactR->Fill( SignifR, m_w_1); m_hb_impactZ->Fill( SignifZ, m_w_1); m_hb_impactRZ->Fill(SignifR, SignifZ, m_w_1); - m_hb_impact->Fill( ImpactSignif, m_w_1); + m_hb_impact->Fill( TrkSig3D[i], m_w_1); if(i<DevTuple::maxNTrk && m_curTup){ + m_curTup->etatrk[i]=SelectedTracks[i]->eta(); m_curTup->p_prob[i]=RankBTrk(SelectedTracks[i]->pt(),JetDir.Pt(),0.); - m_curTup->s_prob[i]=RankBTrk(0.,0.,ImpactSignif); + m_curTup->s_prob[i]=RankBTrk(0.,0.,TrkSig3D[i]); m_curTup->SigR[i]=SignifR; m_curTup->SigZ[i]=SignifZ; m_curTup->d0[i]=Impact[0]; m_curTup->Z0[i]=Impact[1]; m_curTup->idMC[i]=getG4Inter(SelectedTracks[i]); @@ -768,7 +768,7 @@ namespace InDet{ } } } - if(m_fillHist){ m_curTup->ptjet=JetDir.Perp(); m_curTup->etajet=fabs(JetDir.Eta()); m_curTup->phijet=JetDir.Phi(); + if(m_fillHist){ m_curTup->ptjet=JetDir.Perp(); m_curTup->etajet=JetDir.Eta(); m_curTup->phijet=JetDir.Phi(); m_curTup->nTrkInJet=std::min(NTracks,DevTuple::maxNTrk); }; ListSecondTracks.reserve(2*NTracks); // Reserve memory for single vertex @@ -782,6 +782,8 @@ namespace InDet{ for (j=i+1; j<NTracks; j++) { if(trkScore[i][0]==0.)continue; if(trkScore[j][0]==0.)continue; + if(trkScore[i][2] > m_antiGarbageCut)continue; //---- Use classificator to remove Pileup+Interactions + if(trkScore[j][2] > m_antiGarbageCut)continue; //---- Use classificator to remove Pileup+Interactions if(!m_multiWithPrimary) { // Not used for multi-vertex with primary one search if( std::max(trkScore[i][1],trkScore[j][1]) > m_antiFragmentCut ) continue; // Remove definite fragmentation tracks bool goodPair=false; diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/CutTrk.cxx b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/CutTrk.cxx index 935a4abc3710720144ff3abd6252f09ab771d79c..7ee1f993d40eca9074622ec13153c8421a49b162 100755 --- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/CutTrk.cxx +++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/CutTrk.cxx @@ -183,12 +183,15 @@ namespace InDet{ //if( !((*i_ntrk)->summaryValue(InmOutlier,xAOD::numberOfInnermostOutliers)) ) InmOutlier=-1; //std::cout<<"NwInnerM="<<(long int)InmHits<<", "<<(long int)InmSharedH<<", "<<(long int)InmSplitH<<", "<<(long int)InmOutlier<<'\n'; - - m_fitSvc->VKalGetImpact((*i_ntrk), PrimVrt.position(), 1, Impact, ImpactError); - //double ImpactA0=VectPerig[0]; // Temporary - //double ImpactZ=VectPerig[1]-PrimVrt.position().z(); // Temporary - double ImpactA0=Impact[0]; - double ImpactZ=Impact[1]; + Amg::Vector3D perigeePos=mPer.position(); + double ImpactA0=sqrt( (perigeePos.x()-PrimVrt.x())*(perigeePos.x()-PrimVrt.x()) + +(perigeePos.y()-PrimVrt.y())*(perigeePos.y()-PrimVrt.y()) ); + double ImpactZ=perigeePos.z()-PrimVrt.z(); + double ImpactSignif=sqrt(ImpactA0*ImpactA0/CovTrkMtx11+ImpactZ*ImpactZ/CovTrkMtx22); + + //double ImpactSignif = m_fitSvc->VKalGetImpact((*i_ntrk), PrimVrt.position(), 1, Impact, ImpactError); + //double ImpactA0=Impact[0]; + //double ImpactZ=Impact[1]; if(m_fillHist){ m_hb_trkD0->Fill( ImpactA0, m_w_1); } //---- Improved cleaning ///// if(PixelHits<=2 && ( outPixHits || splPixHits )) continue; //VK Bad idea at high Pt! @@ -198,24 +201,21 @@ namespace InDet{ else {if(PixelHits)PixelHits -=1;} // 3-layer pixel detector } if(fabs((*i_ntrk)->eta())>1.65) if(SctHits)SctHits -=1; -//----Anti-pileup cut +//----Anti-pileup cut (in Sel2TrVrt now) // double SignifR = Impact[0]/ sqrt(ImpactError[0]); // if(fabs(SignifR) < m_AntiPileupSigRCut) { // cut against tracks from pileup vertices // double SignifZ = Impact[1]/ sqrt(ImpactError[2]); // if(SignifZ > 1.+m_AntiPileupSigZCut ) continue; // if(SignifZ < 1.-m_AntiPileupSigZCut ) continue; // } -//---- Use classificator to remove Pileup+Interactions - std::vector<float> trkRank=m_trackClassificator->trkTypeWgts(*i_ntrk, PrimVrt, JetDir); - if(trkRank[2] > m_antiGarbageCut)continue; //---- StatusCode sc = CutTrk( VectPerig[4] , VectPerig[3], ImpactA0 , ImpactZ, trkChi2, PixelHits, SctHits, SharedHits, BLayHits); if( sc.isFailure() ) continue; - //double rankBTrk=RankBTrk((*i_ntrk)->pt(),JetDir.Perp(),ImpactSignif); - if(trkRank[1]>0.5)NPrimTrk += 1; - orderedTrk.emplace(trkRank[0],*i_ntrk); + double rankBTrk=RankBTrk(0.,0.,ImpactSignif); + if(rankBTrk<0.7)NPrimTrk += 1; + orderedTrk.emplace(rankBTrk,*i_ntrk); } //---- Order tracks according to ranks std::map<double,const xAOD::TrackParticle*>::reverse_iterator rt=orderedTrk.rbegin(); diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/InDetTrkInJetType.cxx b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/InDetTrkInJetType.cxx index 3da8d5e80ab0c21570b7ea84ed1c6b15c0aa0c29..963807762c8c6dfe74977b7b07e7e192bcd48455 100644 --- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/InDetTrkInJetType.cxx +++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/InDetTrkInJetType.cxx @@ -3,13 +3,15 @@ */ #include "InDetVKalVxInJetTool/InDetTrkInJetType.h" -#include "TMVA/MethodBase.h" +#include "TMVA/MethodBDT.h" #include "TMVA/Reader.h" #include "PathResolver/PathResolver.h" #include "TLorentzVector.h" #include "TrkVKalVrtFitter/TrkVKalVrtFitter.h" -#include "Particle/TrackParticle.h" +#include "Particle/TrackParticle.h" +#include "MVAUtils/BDT.h" +#include "GaudiKernel/IChronoStatSvc.h" // //------------------------------------------------- namespace InDet { @@ -19,16 +21,19 @@ InDetTrkInJetType::InDetTrkInJetType(const std::string& type, const std::string& name, const IInterface* parent): AthAlgTool(type,name,parent), - m_tmvaReader(0), + m_tmvaReader(nullptr), + m_localBDT(nullptr), m_trkSctHitsCut(4), m_trkPixelHitsCut(1), m_trkChi2Cut(5.), m_trkMinPtCut(700.), + m_jetMaxPtCut(7000000.), + m_jetMinPtCut( 35000.), m_d0_limLow(-3.), m_d0_limUpp( 5.), m_Z0_limLow(-8.), m_Z0_limUpp(12.), - m_calibFileName("TrackClassif_3cl.v01.xml"), + m_calibFileName("TrackClassif_3cl.v02.xml"), m_fitterSvc("Trk::TrkVKalVrtFitter/VertexFitterTool",this) { declareInterface<IInDetTrkInJetType>(this); @@ -36,16 +41,20 @@ InDetTrkInJetType::InDetTrkInJetType(const std::string& type, declareProperty("trkPixelHits", m_trkPixelHitsCut , "Cut on track Pixel hits number" ); declareProperty("trkChi2", m_trkChi2Cut , "Cut on track Chi2/Ndf" ); declareProperty("trkMinPt", m_trkMinPtCut , "Minimal track Pt cut" ); + declareProperty("jetMaxPt", m_jetMaxPtCut , "Maximal jet Pt cut" ); + declareProperty("jetMinPt", m_jetMinPtCut , "Minimal jet Pt cut from training" ); declareProperty("d0_limLow", m_d0_limLow , "Low d0 impact cut" ); declareProperty("d0_limUpp", m_d0_limUpp , "Upper d0 impact cut" ); declareProperty("Z0_limLow", m_Z0_limLow , "Low Z0 impact cut" ); declareProperty("Z0_limUpp", m_Z0_limUpp , "Upper Z0 impact cut" ); + m_timingProfile=nullptr; } //Destructor--------------------------------------------------------------- InDetTrkInJetType::~InDetTrkInJetType(){ - delete m_tmvaReader; - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<< "InDetTrkInJetType destructor called" << endmsg; + if(m_tmvaReader)delete m_tmvaReader; + if(m_localBDT)delete m_localBDT; + ATH_MSG_DEBUG("InDetTrkInJetType destructor called"); } //Initialize--------------------------------------------------------------- @@ -53,48 +62,61 @@ InDetTrkInJetType::InDetTrkInJetType(const std::string& type, m_initialised = 0; m_tmvaReader = new TMVA::Reader(); //m_tmvaReader->AddVariable( "prbS", &m_prbS ); - m_tmvaReader->AddVariable( "Sig3D", &m_Sig3D ); - m_tmvaReader->AddVariable( "prbP", &m_prbP ); - m_tmvaReader->AddVariable( "pTvsJet", &m_pTvsJet ); + m_tmvaReader->AddVariable( "Sig3D", &m_Sig3D ); + m_tmvaReader->AddVariable( "prbP", &m_prbP ); + m_tmvaReader->AddVariable( "pTvsJet",&m_pTvsJet ); //m_tmvaReader->AddVariable( "prodTJ", &m_prodTJ ); - m_tmvaReader->AddVariable( "d0", &m_d0 ); - m_tmvaReader->AddVariable( "SigR", &m_SigR ); - m_tmvaReader->AddVariable( "SigZ", &m_SigZ ); - m_tmvaReader->AddVariable( "ptjet", &m_ptjet ); + m_tmvaReader->AddVariable( "d0", &m_d0 ); + m_tmvaReader->AddVariable( "SigR", &m_SigR ); + m_tmvaReader->AddVariable( "SigZ", &m_SigZ ); + m_tmvaReader->AddVariable( "ptjet", &m_ptjet ); m_tmvaReader->AddVariable( "ibl" , &m_ibl ); m_tmvaReader->AddVariable( "bl" , &m_bl ); - m_tmvaReader->AddVariable( "etajet", &m_etajet ); + m_tmvaReader->AddVariable( "etatrk", &m_etatrk ); // //-- Calibration file // -// std::string fullPathToFile = PathResolverFindCalibFile("InDetVKalVxInJetTool/TrackClassif_3cl.v01.xml"); std::string fullPathToFile = PathResolverFindCalibFile("InDetVKalVxInJetTool/"+m_calibFileName); if(fullPathToFile != ""){ if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG) <<"TrackClassification calibration file" << fullPathToFile << endmsg; m_tmvaReader->BookMVA("BDTG", fullPathToFile); + TMVA::MethodBDT* method_bdt = dynamic_cast<TMVA::MethodBDT*> (m_tmvaReader->FindMVA("BDTG")); + if(!method_bdt){ ATH_MSG_DEBUG("Error! No method_BDT for TrackClassification!"); + return StatusCode::SUCCESS; } + bool useYesNoLeaf = false; + bool isGrad = false; + if(method_bdt->GetOptions().Contains("UseYesNoLeaf=True")) useYesNoLeaf = true; + if(method_bdt->GetOptions().Contains("BoostType=Grad")) isGrad = true; + m_localBDT = new MVAUtils::BDT( method_bdt, isGrad, useYesNoLeaf); + if(!m_localBDT){ ATH_MSG_DEBUG("Error! No_BDT from MVAUtils created"); + return StatusCode::SUCCESS; } }else{ - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG) <<"Error! No calibration for TrackClassification found." << endmsg; + ATH_MSG_DEBUG("Error! No calibration for TrackClassification found."); return StatusCode::SUCCESS; } //------- if (m_fitterSvc.retrieve().isFailure()) { - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG) << "Could not find Trk::TrkVKalVrtFitter" << endmsg; + ATH_MSG_DEBUG("Could not find Trk::TrkVKalVrtFitter"); return StatusCode::SUCCESS; } else { - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG) << "InDetTrkInJetTool TrkVKalVrtFitter found" << endmsg; + ATH_MSG_DEBUG("InDetTrkInJetTool TrkVKalVrtFitter found"); } m_fitSvc = dynamic_cast<Trk::TrkVKalVrtFitter*>(&(*m_fitterSvc)); if(!m_fitSvc){ - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<" No implemented Trk::ITrkVKalVrtFitter interface" << endmsg; + ATH_MSG_DEBUG(" No implemented Trk::ITrkVKalVrtFitter interface"); return StatusCode::SUCCESS; } m_initialised = 1; // Tool is initialised successfully. +//----- + if(msgLvl(MSG::DEBUG)) ATH_CHECK(service("ChronoStatSvc", m_timingProfile)); +//----- return StatusCode::SUCCESS; } StatusCode InDetTrkInJetType::finalize() { - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG) <<"InDetTrkInJetType finalize()" << endmsg; + if(m_timingProfile)m_timingProfile->chronoPrint("InDet_TrkInJetType"); + ATH_MSG_DEBUG("InDetTrkInJetType finalize()"); return StatusCode::SUCCESS; } @@ -106,7 +128,7 @@ InDetTrkInJetType::InDetTrkInJetType(const std::string& type, //-- Track quality checks std::vector<float> safeReturn(3,0.); if( !m_initialised ) return safeReturn; - if(Jet.Perp() > 2500000.) return safeReturn; + if(Jet.Perp() > m_jetMaxPtCut)return safeReturn; if(Trk->pt() < m_trkMinPtCut) return safeReturn; if(Trk->pt() > Jet.Pt()) return safeReturn; if(Trk->numberDoF() == 0) return safeReturn; //Safety @@ -117,7 +139,6 @@ InDetTrkInJetType::InDetTrkInJetType(const std::string& type, if( PixelHits < m_trkPixelHitsCut ) return safeReturn; if( SctHits < m_trkSctHitsCut ) return safeReturn; - std::vector<double> Impact,ImpactError; m_Sig3D=m_fitSvc->VKalGetImpact(Trk, PV.position(), 1, Impact, ImpactError); AmgVector(5) tmpPerigee = Trk->perigeeParameters().parameters(); @@ -162,6 +183,7 @@ InDetTrkInJetType::InDetTrkInJetType(const std::string& type, double coeffPt=10.; double pfrac=(Trk->pt()-m_trkMinPtCut)/sqrt(Jet.Perp()); m_prbP= pfrac/(coeffPt+pfrac); + m_etatrk=Trk->eta(); //--- double coeffSig=1.0; if(trkSignif<coeffSig) return safeReturn; @@ -173,6 +195,7 @@ InDetTrkInJetType::InDetTrkInJetType(const std::string& type, m_SigR=SignifR; //--- m_ptjet=Jet.Perp(); + if(m_ptjet<m_jetMinPtCut)m_ptjet=m_jetMinPtCut; //Very low jet pt is replaced by Pt=35GeV m_etajet=fabs(Jet.Eta()); //--- m_ibl = (float)hitIBL; @@ -184,8 +207,15 @@ InDetTrkInJetType::InDetTrkInJetType(const std::string& type, //--- TLorentzVector normJ; normJ.SetPtEtaPhiM(1.,Jet.Eta(),Jet.Phi(),0.); m_prodTJ=sqrt(TLV.Dot(normJ)); - return m_tmvaReader->EvaluateMulticlass("BDTG"); - +//--- + if(m_timingProfile)m_timingProfile->chronoStart("InDet_TrkInJetType"); + //std::vector<float> weights=m_tmvaReader->EvaluateMulticlass("BDTG"); + //-----Use MVAUtils to save CPU + std::vector<float> bdt_vars={m_Sig3D, m_prbP, m_pTvsJet, m_d0, m_SigR, m_SigZ, m_ptjet, m_ibl, m_bl, m_etatrk}; + std::vector<float> weights=m_localBDT->GetMultiResponse(bdt_vars,3); + //----- + if(m_timingProfile)m_timingProfile->chronoStop("InDet_TrkInJetType"); + return weights; } }// close namespace diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/InDetVKalVxInJetTool.cxx b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/InDetVKalVxInJetTool.cxx index 4fd96f2179c2338dc6b008409aed5fc4ff822431..fa6a1452f1bc62e6c9b76ff4b0a80921e74987b7 100755 --- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/InDetVKalVxInJetTool.cxx +++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/InDetVKalVxInJetTool.cxx @@ -9,6 +9,7 @@ #include "TrkVKalVrtFitter/TrkVKalVrtFitter.h" #include "GaudiKernel/ITHistSvc.h" +#include "GaudiKernel/IChronoStatSvc.h" #include "TH1D.h" #include "TH2D.h" #include "TTree.h" @@ -50,9 +51,9 @@ InDetVKalVxInJetTool::InDetVKalVxInJetTool(const std::string& type, m_trkSigCut(2.0), m_a0TrkErrorCut(1.0), m_zTrkErrorCut(5.0), - m_cutHFClass(0.1), - m_antiGarbageCut(0.80), - m_antiFragmentCut(0.80), + m_cutHFClass(0.15), + m_antiGarbageCut(0.75), + m_antiFragmentCut(0.70), m_Vrt2TrMassLimit(4000.), m_fillHist(false), m_existIBL(true), @@ -145,6 +146,7 @@ InDetVKalVxInJetTool::InDetVKalVxInJetTool(const std::string& type, declareProperty("TrackDetachCut", m_trackDetachCut, "To allow track from vertex detachment for MultiVertex Finder" ); declareProperty("VertexFitterTool", m_fitterSvc); + declareProperty("TrackClassTool", m_trackClassificator); // declareProperty("MaterialMap", m_materialMap); // declareProperty("TrkVKalVrtFitter", m_fitSvc); // @@ -164,18 +166,14 @@ InDetVKalVxInJetTool::InDetVKalVxInJetTool(const std::string& type, //Destructor--------------------------------------------------------------- InDetVKalVxInJetTool::~InDetVKalVxInJetTool(){ - //MsgStream log( msgSvc(), name() ) ; - //log << MSG::DEBUG << "InDetVKalVxInJetTool destructor called" << endmsg; if(m_WorkArray) delete m_WorkArray; if(m_compatibilityGraph)delete m_compatibilityGraph; - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<< "InDetVKalVxInJetTool destructor called" << endmsg; + ATH_MSG_DEBUG("InDetVKalVxInJetTool destructor called"); } //Initialize--------------------------------------------------------------- StatusCode InDetVKalVxInJetTool::initialize(){ - //MsgStream log( msgSvc(), name() ) ; - //log << MSG::DEBUG << "InDetVKalVxInJetTool initialize() called" << endmsg; - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<< "InDetVKalVxInJetTool initialize() called" << endmsg; + ATH_MSG_DEBUG("InDetVKalVxInJetTool initialize() called"); m_WorkArray = new VKalVxInJetTemp; m_compatibilityGraph = new boost::adjacency_list<boost::listS, boost::vecS, boost::undirectedS>(); @@ -214,6 +212,8 @@ InDetVKalVxInJetTool::InDetVKalVxInJetTool(const std::string& type, // if(!m_fitSvc)log<<MSG::DEBUG<<" No Trk::TrkVKalVrtFitter" << endmsg; // } +//------------------------------------------ + if(msgLvl(MSG::DEBUG)) ATH_CHECK(service("ChronoStatSvc", m_timingProfile)); //------------------------------------------ // Chose whether IBL is installed if(m_existIBL){ // 4-layer pixel detector @@ -352,6 +352,7 @@ InDetVKalVxInJetTool::InDetVKalVxInJetTool(const std::string& type, m_tuple->Branch("etajet", &m_curTup->etajet, "etajet/F"); m_tuple->Branch("phijet", &m_curTup->phijet, "phijet/F"); m_tuple->Branch("ntrk", &m_curTup->nTrkInJet, "ntrk/I"); + m_tuple->Branch("etatrk", &m_curTup->etatrk, "etatrk[ntrk]/F"); m_tuple->Branch("prbS", &m_curTup->s_prob, "prbS[ntrk]/F"); m_tuple->Branch("prbP", &m_curTup->p_prob, "prbP[ntrk]/F"); m_tuple->Branch("wgtB", &m_curTup->wgtB, "wgtB[ntrk]/F"); @@ -424,7 +425,8 @@ InDetVKalVxInJetTool::InDetVKalVxInJetTool(const std::string& type, StatusCode InDetVKalVxInJetTool::finalize() { //MsgStream log( msgSvc(), name() ); - if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG) <<"InDetVKalVxInJetTool finalize()" << endmsg; + if(m_timingProfile)m_timingProfile->chronoPrint("InDetVKalVxInJetTool"); + ATH_MSG_DEBUG("InDetVKalVxInJetTool finalize()"); return StatusCode::SUCCESS; } @@ -435,6 +437,7 @@ InDetVKalVxInJetTool::InDetVKalVxInJetTool(const std::string& type, const TLorentzVector & JetDir, const std::vector<const xAOD::IParticle*> & IInpTrk) const { + if(m_timingProfile)m_timingProfile->chronoStart("InDetVKalVxInJetTool"); std::vector<double> Results; std::vector<const xAOD::TrackParticle*> InpTrk; std::vector<const xAOD::TrackParticle*> SelSecTrk; @@ -500,6 +503,7 @@ InDetVKalVxInJetTool::InDetVKalVxInJetTool(const std::string& type, m_compatibilityGraph->clear(); std::vector<int> zytmp(1000); m_WorkArray->m_Incomp.swap(zytmp); // Deallocate memory std::vector<int> zwtmp(0); m_WorkArray->m_Prmtrack.swap(zwtmp); // + if(m_timingProfile)m_timingProfile->chronoStop("InDetVKalVxInJetTool"); return res; } @@ -509,6 +513,7 @@ InDetVKalVxInJetTool::InDetVKalVxInJetTool(const std::string& type, const TLorentzVector & JetDir, const std::vector<const Trk::TrackParticleBase*> & InpTrkBase) const { + if(m_timingProfile)m_timingProfile->chronoStart("InDetVKalVxInJetTool"); std::vector<double> Results; std::vector<const Rec::TrackParticle*> SelSecTrk; std::vector< std::vector<const Rec::TrackParticle*> > SelSecTrkPerVrt; @@ -557,6 +562,7 @@ InDetVKalVxInJetTool::InDetVKalVxInJetTool(const std::string& type, m_compatibilityGraph->clear(); std::vector<int> zytmp(1000); m_WorkArray->m_Incomp.swap(zytmp); // Deallocate memory std::vector<int> zwtmp(0); m_WorkArray->m_Prmtrack.swap(zwtmp); // + if(m_timingProfile)m_timingProfile->chronoStop("InDetVKalVxInJetTool"); return res; // return new Trk::VxSecVertexInfo(listVrtSec);