diff --git a/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.cxx b/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.cxx index 497adf858ed18738a5bfdee2cde43b628fde5956..21222d01a92968c3e4380cd8c99999ecd36d921c 100644 --- a/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.cxx +++ b/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.cxx @@ -27,8 +27,8 @@ void CbmSimEventHeaderConverter::Init() auto* ioman = FairRootManager::Instance(); assert(ioman != nullptr); - cbm_mc_manager_ = dynamic_cast<CbmMCDataManager*>(ioman->GetObject("MCDataManager")); - cbm_header_obj_ = cbm_mc_manager_->GetObject("MCEventHeader."); + cbm_mc_manager_ = dynamic_cast<CbmMCDataManager*>(ioman->GetObject("MCDataManager")); + cbm_header_obj_ = cbm_mc_manager_->GetObject("MCEventHeader."); cbm_mc_event_list_ = (CbmMCEventList*) ioman->GetObject("MCEventList."); if (!cbm_mc_event_list_) { throw std::runtime_error("CbmSimEventHeaderConverter::Init - ERROR! No fMCEventList!"); } diff --git a/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx b/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx index 580d08a72230f563aa83d4c4702016427b25bb70..f6454d037c9f3499840b9b6f8c453016154b3bc2 100644 --- a/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx +++ b/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx @@ -30,7 +30,7 @@ ClassImp(CbmStsTracksConverter); void CbmStsTracksConverter::ProcessData(CbmEvent* event) { - assert(cbm_sts_tracks_ != nullptr && cbm_mc_tracks_new_ != nullptr); + assert(cbm_sts_tracks_ != nullptr); vtx_tracks_2_sim_->Clear(); out_indexes_map_.clear(); @@ -51,11 +51,9 @@ void CbmStsTracksConverter::InitInput() cbm_prim_vertex_ = (CbmVertex*) ioman->GetObject("PrimaryVertex."); cbm_sts_tracks_ = (TClonesArray*) ioman->GetObject("StsTrack"); - // cbm_mc_tracks_ = (TClonesArray*) ioman->GetObject("MCTrack"); - cbm_sts_match_ = (TClonesArray*) ioman->GetObject("StsTrackMatch"); + cbm_sts_match_ = (TClonesArray*) ioman->GetObject("StsTrackMatch"); - cbm_mc_manager_ = dynamic_cast<CbmMCDataManager*>(ioman->GetObject("MCDataManager")); - cbm_mc_tracks_new_ = cbm_mc_manager_->InitBranch("MCTrack"); + cbm_mc_manager_ = dynamic_cast<CbmMCDataManager*>(ioman->GetObject("MCDataManager")); } void CbmStsTracksConverter::Init() @@ -93,13 +91,11 @@ void CbmStsTracksConverter::Init() "covarience matrix"); vtx_tracks_config.AddField<int>("mother_pdg", "PDG code of mother particle"); - vtx_tracks_config.AddField<int>("mc_pdg", "MC-true PDG code"); vtx_tracks_config.AddField<bool>("pass_cuts", "ask Oleksii"); ipar_ = vtx_tracks_config.GetFieldId("x"); imf_ = vtx_tracks_config.GetFieldId("cx0"); icov_ = vtx_tracks_config.GetFieldId("cov1"); - imc_pdg_ = vtx_tracks_config.GetFieldId("mc_pdg"); imother_pdg_ = vtx_tracks_config.GetFieldId("mother_pdg"); ipasscuts_ = vtx_tracks_config.GetFieldId("pass_cuts"); } @@ -282,48 +278,3 @@ void CbmStsTracksConverter::MapTracks(CbmEvent* event) } } } - -//int CbmStsTracksConverter::GetMcPid(const CbmTrackMatchNew* match, AnalysisTree::Track& track) const -//{ -// -// if (!is_write_kfinfo_) { return -2; } -// //-----------PID as in MZ's -// //CbmKFPF---------------------------------------------------------- -// Int_t nMCTracks = cbm_mc_tracks_->GetEntriesFast(); -// -// int pdgCode = -2; -// if (match->GetNofLinks() > 0) { // there is at least one matched MC-track -// Float_t bestWeight = 0.f; -// Float_t totalWeight = 0.f; -// Int_t mcTrackId = -1; -// -// for (int iLink = 0; iLink < match->GetNofLinks(); iLink++) { -// totalWeight += match->GetLink(iLink).GetWeight(); -// if (match->GetLink(iLink).GetWeight() > bestWeight) { -// bestWeight = match->GetLink(iLink).GetWeight(); -// mcTrackId = match->GetLink(iLink).GetIndex(); -// } -// } -// -// if (!((bestWeight / totalWeight < 0.7) || (mcTrackId >= nMCTracks || mcTrackId < 0))) { -// auto* mctrack = static_cast<CbmMCTrack*>(cbm_mc_tracks_->At(mcTrackId)); -// -// if (!(TMath::Abs(mctrack->GetPdgCode()) == 11 || TMath::Abs(mctrack->GetPdgCode()) == 13 -// || TMath::Abs(mctrack->GetPdgCode()) == 211 || TMath::Abs(mctrack->GetPdgCode()) == 321 -// || TMath::Abs(mctrack->GetPdgCode()) == 2212 || TMath::Abs(mctrack->GetPdgCode()) == 1000010020 -// || TMath::Abs(mctrack->GetPdgCode()) == 1000010030 || TMath::Abs(mctrack->GetPdgCode()) == 1000020030 -// || TMath::Abs(mctrack->GetPdgCode()) == 1000020040)) { -// pdgCode = -1; -// } -// else { -// pdgCode = mctrack->GetPdgCode(); -// } -// if (mctrack->GetMotherId() > -1) { -// track.SetField(int(((CbmMCTrack*) cbm_mc_tracks_->At(mctrack->GetMotherId()))->GetPdgCode()), imother_pdg_); -// } -// } -// } -// track.SetField(pdgCode, imc_pdg_); -// -// return pdgCode; -//} diff --git a/analysis/common/analysis_tree_converter/CbmStsTracksConverter.h b/analysis/common/analysis_tree_converter/CbmStsTracksConverter.h index 9370a9479807a4929103243a79026183ed2f5e39..58673f763fb7d31fbd23e9daa9088f8f9497d1b1 100644 --- a/analysis/common/analysis_tree_converter/CbmStsTracksConverter.h +++ b/analysis/common/analysis_tree_converter/CbmStsTracksConverter.h @@ -53,12 +53,10 @@ private: AnalysisTree::Matching* vtx_tracks_2_sim_ {nullptr}; ///< raw pointers are needed for TTree::Branch CbmVertex* cbm_prim_vertex_ {nullptr}; ///< non-owning pointer - // TClonesArray* cbm_mc_tracks_ {nullptr}; ///< non-owning pointer TClonesArray* cbm_sts_tracks_ {nullptr}; ///< non-owning pointer TClonesArray* cbm_sts_match_ {nullptr}; ///< non-owning pointer CbmMCDataManager* cbm_mc_manager_ {nullptr}; - CbmMCDataArray* cbm_mc_tracks_new_ {nullptr}; bool is_write_kfinfo_ {true}; bool is_reproduce_cbmkfpf_ {true}; @@ -76,7 +74,6 @@ private: int ipar_ {AnalysisTree::UndefValueInt}; int imf_ {AnalysisTree::UndefValueInt}; int icov_ {AnalysisTree::UndefValueInt}; - int imc_pdg_ {AnalysisTree::UndefValueInt}; int imother_pdg_ {AnalysisTree::UndefValueInt}; int ipasscuts_ {AnalysisTree::UndefValueInt}; diff --git a/analysis/common/at_kfpf_interface/ATKFParticleFinder.cxx b/analysis/common/at_kfpf_interface/ATKFParticleFinder.cxx index d91e3babe73dc85949dc7b3e5caa4b9e0f6fd960..94b4db1a0e0f6349cd6cba055a3d114f30274281 100644 --- a/analysis/common/at_kfpf_interface/ATKFParticleFinder.cxx +++ b/analysis/common/at_kfpf_interface/ATKFParticleFinder.cxx @@ -4,6 +4,7 @@ #include "ATKFParticleFinder.h" +#include "AnalysisTree/Matching.hpp" #include "KFParticleTopoReconstructor.h" void ATKFParticleFinder::InitInput(const std::string& file_name, const std::string& tree_name) @@ -22,6 +23,19 @@ void ATKFParticleFinder::InitInput(const std::string& file_name, const std::stri else if (in_chain_->CheckBranchExistence("RecEventHeader") == 2) { in_chain_->SetBranchAddress("RecEventHeader.", &rec_event_header_); } + if (in_chain_->CheckBranchExistence("SimParticles") == 1) { + in_chain_->SetBranchAddress("SimParticles", &sim_particles_); + } + else if (in_chain_->CheckBranchExistence("SimParticles") == 2) { + in_chain_->SetBranchAddress("SimParticles.", &sim_particles_); + } + std::string kf2sim_tracks_name = in_chain_->GetConfiguration()->GetMatchName("VtxTracks", "SimParticles"); + if (in_chain_->CheckBranchExistence(kf2sim_tracks_name) == 1) { + in_chain_->SetBranchAddress(kf2sim_tracks_name.c_str(), &kf2sim_tracks_); + } + else if (in_chain_->CheckBranchExistence(kf2sim_tracks_name) == 2) { + in_chain_->SetBranchAddress((kf2sim_tracks_name + ".").c_str(), &kf2sim_tracks_); + } auto branch_conf_kftr = in_chain_->GetConfiguration()->GetBranchConfig("VtxTracks"); q_field_id_ = branch_conf_kftr.GetFieldId("q"); @@ -31,7 +45,6 @@ void ATKFParticleFinder::InitInput(const std::string& file_name, const std::stri cov_field_id_ = branch_conf_kftr.GetFieldId("cov1"); // cov matrix 0 passcuts_field_id_ = branch_conf_kftr.GetFieldId("pass_cuts"); - pdg_field_id_ = branch_conf_kftr.GetFieldId("mc_pdg"); nhits_field_id_ = branch_conf_kftr.GetFieldId("nhits"); nhits_mvd_field_id_ = branch_conf_kftr.GetFieldId("nhits_mvd"); vtx_chi2_field_id_ = branch_conf_kftr.GetFieldId("vtx_chi2"); @@ -116,7 +129,6 @@ void ATKFParticleFinder::InitTopoReconstructor() for (unsigned int i_track = 0; i_track < kf_tracks_->GetNumberOfChannels(); i_track++) { const AnalysisTree::Track& rec_track = kf_tracks_->GetChannel(i_track); if (rec_track.GetField<bool>(passcuts_field_id_) == 0) continue; - if (rec_track.GetField<int>(pdg_field_id_) == -2 && pid_mode_ == 1) continue; n_good_tracks++; } @@ -129,7 +141,6 @@ void ATKFParticleFinder::InitTopoReconstructor() const AnalysisTree::Track& rec_track = kf_tracks_->GetChannel(i_track); if (rec_track.GetField<bool>(passcuts_field_id_) == 0) continue; - if (rec_track.GetField<int>(pdg_field_id_) == -2 && pid_mode_ == 1) continue; for (Int_t iP = 0; iP < 3; iP++) track_vector1.SetParameter(rec_track.GetField<float>(par_field_id_ + iP), iP, j_track); @@ -142,8 +153,12 @@ void ATKFParticleFinder::InitTopoReconstructor() for (Int_t iF = 0; iF < 10; iF++) track_vector1.SetFieldCoefficient(rec_track.GetField<float>(mf_field_id_ + iF), iF, j_track); if (pid_mode_ == 0) track_vector1.SetPDG(-1, j_track); - else if (pid_mode_ == 1) - track_vector1.SetPDG(rec_track.GetField<int>(pdg_field_id_), j_track); + else if (pid_mode_ == 1) { + int pdg {-999}; + const int sim_id = kf2sim_tracks_->GetMatch(rec_track.GetId()); + if (sim_id > 0) pdg = sim_particles_->GetChannel(sim_id).GetPid(); + track_vector1.SetPDG(pdg, j_track); + } track_vector1.SetQ(rec_track.GetField<int>(q_field_id_), j_track); if (rec_track.GetField<float>(vtx_chi2_field_id_) < 3.) track_vector1.SetPVIndex(0, j_track); else diff --git a/analysis/common/at_kfpf_interface/ATKFParticleFinder.h b/analysis/common/at_kfpf_interface/ATKFParticleFinder.h index 697aa727e957c8612ee9ae55c0a19a0740e027d3..b01bb2cfba83a94b42e64e5ffc9b2f795e4a7639 100644 --- a/analysis/common/at_kfpf_interface/ATKFParticleFinder.h +++ b/analysis/common/at_kfpf_interface/ATKFParticleFinder.h @@ -18,6 +18,7 @@ #include "CutsContainer.h" class KFParticleTopoReconstructor; +class Matching; class ATKFParticleFinder { public: @@ -38,6 +39,8 @@ private: AnalysisTree::Chain* in_chain_ {nullptr}; AnalysisTree::EventHeader* rec_event_header_ {nullptr}; AnalysisTree::TrackDetector* kf_tracks_ {nullptr}; + AnalysisTree::Particles* sim_particles_ {nullptr}; + AnalysisTree::Matching* kf2sim_tracks_ {nullptr}; TFile* out_file_ {nullptr}; TTree* out_tree_ {nullptr}; @@ -49,7 +52,6 @@ private: int mf_field_id_ {-999}; int cov_field_id_ {-999}; int passcuts_field_id_ {-999}; - int pdg_field_id_ {-999}; int vtx_chi2_field_id_ {-999}; int nhits_field_id_ {-999}; int nhits_mvd_field_id_ {-999};