From caa3df2278fcc5c2dec089ac7dc5864511650f8e Mon Sep 17 00:00:00 2001 From: Frederic Julian Linz <f.linz@gsi.de> Date: Mon, 20 Feb 2023 11:00:55 +0000 Subject: [PATCH] T0 introduced to AT converter Check cbm_header init before using it. Added runtime error for MCEventList. --- .../CbmRecEventHeaderConverter.cxx | 7 ++++++- .../CbmRecEventHeaderConverter.h | 1 + .../CbmSimEventHeaderConverter.cxx | 13 +++++++++++-- .../CbmSimEventHeaderConverter.h | 3 +++ .../analysis_tree_converter/CbmTofHitsConverter.cxx | 4 ++-- 5 files changed, 23 insertions(+), 5 deletions(-) diff --git a/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.cxx b/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.cxx index 496c622975..f0bd85f816 100644 --- a/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.cxx +++ b/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.cxx @@ -38,6 +38,7 @@ void CbmRecEventHeaderConverter::Init() RecEventHeaderBranch.AddField<float>("start_time", "Start time of the event, ns"); RecEventHeaderBranch.AddField<float>("end_time", "End time of the event, ns"); RecEventHeaderBranch.AddField<float>("match_weight", ""); + RecEventHeaderBranch.AddField<float>("T0", "Reconstructed T0, ns"); ivtx_chi2_ = RecEventHeaderBranch.GetFieldId("vtx_chi2"); iEpsd_ = RecEventHeaderBranch.GetFieldId("Epsd"); @@ -46,6 +47,7 @@ void CbmRecEventHeaderConverter::Init() istart_time_ = RecEventHeaderBranch.GetFieldId("start_time"); iend_time_ = RecEventHeaderBranch.GetFieldId("end_time"); imatch_weight_ = RecEventHeaderBranch.GetFieldId("match_weight"); + iT0_ = RecEventHeaderBranch.GetFieldId("T0"); auto* man = AnalysisTree::TaskManager::GetInstance(); man->AddBranch(rec_event_header_, RecEventHeaderBranch); @@ -66,11 +68,12 @@ void CbmRecEventHeaderConverter::ProcessData(CbmEvent* event) rec_event_header_->SetField(GetPsdEnergy(event), iEpsd_); int evt_id; - float match_weight, start_time, end_time; + float match_weight, start_time, end_time, T0; if (event) { evt_id = event->GetUniqueID(); start_time = event->GetStartTime(); end_time = event->GetEndTime(); + T0 = event->GetTzero(); if (event->GetMatch()) match_weight = float(event->GetMatch()->GetMatchedLink().GetWeight()); else match_weight = 0.; @@ -79,11 +82,13 @@ void CbmRecEventHeaderConverter::ProcessData(CbmEvent* event) evt_id = cbm_header_->GetEventID(); start_time = cbm_header_->GetT(); end_time = cbm_header_->GetT(); + T0 = -999999.; match_weight = 1.; } rec_event_header_->SetField(evt_id, ievt_id_); rec_event_header_->SetField(start_time, istart_time_); rec_event_header_->SetField(end_time, iend_time_); + rec_event_header_->SetField(T0, iT0_); rec_event_header_->SetField(match_weight, imatch_weight_); } diff --git a/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.h b/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.h index 2276e1ec8e..ae61c45c20 100644 --- a/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.h +++ b/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.h @@ -41,6 +41,7 @@ private: int istart_time_ {AnalysisTree::UndefValueInt}; int iend_time_ {AnalysisTree::UndefValueInt}; int imatch_weight_ {AnalysisTree::UndefValueInt}; + int iT0_ {AnalysisTree::UndefValueInt}; ClassDef(CbmRecEventHeaderConverter, 1) }; diff --git a/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.cxx b/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.cxx index 9e704094fe..cf8120b2c7 100644 --- a/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.cxx +++ b/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.cxx @@ -29,6 +29,8 @@ void CbmSimEventHeaderConverter::Init() 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!"); } // ***** SimEventHeader ******* AnalysisTree::BranchConfig SimEventHeaderBranch("SimEventHeader", AnalysisTree::DetType::kEventHeader); @@ -37,6 +39,7 @@ void CbmSimEventHeaderConverter::Init() SimEventHeaderBranch.AddFields<float>({"start_time", "end_time"}, "ns (?), event time"); SimEventHeaderBranch.AddField<int>("run_id", "run identifier"); SimEventHeaderBranch.AddField<int>("event_id", "event identifier"); + SimEventHeaderBranch.AddField<float>("T0", "MC event time, ns"); ipsi_RP_ = SimEventHeaderBranch.GetFieldId("psi_RP"); ib_ = SimEventHeaderBranch.GetFieldId("b"); @@ -44,6 +47,7 @@ void CbmSimEventHeaderConverter::Init() iend_time_ = SimEventHeaderBranch.GetFieldId("end_time"); irun_id_ = SimEventHeaderBranch.GetFieldId("run_id"); ievent_id_ = SimEventHeaderBranch.GetFieldId("event_id"); + iT0_ = SimEventHeaderBranch.GetFieldId("T0"); auto* man = AnalysisTree::TaskManager::GetInstance(); man->AddBranch(sim_event_header_, SimEventHeaderBranch); @@ -53,6 +57,7 @@ void CbmSimEventHeaderConverter::Init() void CbmSimEventHeaderConverter::ProcessData(CbmEvent* event) { FairMCEventHeader* cbm_header {nullptr}; + int file_id {0}, event_id {0}; if (event) { if (!event->GetMatch()) { @@ -60,16 +65,19 @@ void CbmSimEventHeaderConverter::ProcessData(CbmEvent* event) return; } const auto& link = event->GetMatch()->GetMatchedLink(); + file_id = event->GetMatch()->GetMatchedLink().GetFile(); + event_id = event->GetMatch()->GetMatchedLink().GetEntry(); cbm_header = (FairMCEventHeader*) (cbm_header_obj_->Get(link)); } else { cbm_header = (FairMCEventHeader*) (cbm_header_obj_->Get(0, FairRootManager::Instance()->GetEntryNr())); } - LOG(info) << "MCEvent " << cbm_header->GetEventID() << " " << cbm_header->GetT(); - if (!cbm_header) { throw std::runtime_error("CbmSimEventHeaderConverter::Exec - ERROR! No fHeader!"); } + LOG(info) << "MCEvent " << cbm_header->GetEventID() << " with T0 " + << cbm_mc_event_list_->GetEventTime(event_id, file_id); + TVector3 pos {cbm_header->GetX(), cbm_header->GetY(), cbm_header->GetZ()}; sim_event_header_->SetVertexPosition3(pos); @@ -77,6 +85,7 @@ void CbmSimEventHeaderConverter::ProcessData(CbmEvent* event) sim_event_header_->SetField(float(cbm_header->GetB()), ib_); sim_event_header_->SetField(int(cbm_header->GetEventID()), ievent_id_); sim_event_header_->SetField(int(cbm_header->GetRunID()), irun_id_); + sim_event_header_->SetField(float(cbm_mc_event_list_->GetEventTime(event_id, file_id)), iT0_); if (event) { LOG(info) << "TIME: " << event->GetStartTime() << " " << event->GetEndTime(); diff --git a/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.h b/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.h index 7061742bda..f43eff6c3e 100644 --- a/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.h +++ b/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.h @@ -6,6 +6,7 @@ #define ANALYSIS_TREE_SIMEVENTHEADERCONVERTER_H_ #include "CbmConverterTask.h" +#include "CbmMCEventList.h" #include "AnalysisTree/EventHeader.hpp" @@ -29,6 +30,7 @@ private: FairMCEventHeader* cbm_header_ {nullptr}; CbmMCDataManager* cbm_mc_manager_ {nullptr}; CbmMCDataObject* cbm_header_obj_ {nullptr}; + CbmMCEventList* cbm_mc_event_list_ {nullptr}; int ipsi_RP_ {AnalysisTree::UndefValueInt}; int ib_ {AnalysisTree::UndefValueInt}; @@ -36,6 +38,7 @@ private: int iend_time_ {AnalysisTree::UndefValueInt}; int irun_id_ {AnalysisTree::UndefValueInt}; int ievent_id_ {AnalysisTree::UndefValueInt}; + int iT0_ {AnalysisTree::UndefValueInt}; ClassDef(CbmSimEventHeaderConverter, 1) }; diff --git a/analysis/common/analysis_tree_converter/CbmTofHitsConverter.cxx b/analysis/common/analysis_tree_converter/CbmTofHitsConverter.cxx index 5426a09dba..8169f29309 100644 --- a/analysis/common/analysis_tree_converter/CbmTofHitsConverter.cxx +++ b/analysis/common/analysis_tree_converter/CbmTofHitsConverter.cxx @@ -120,8 +120,8 @@ void CbmTofHitsConverter::ProcessData(CbmEvent* event) const Int_t q = param_last.GetQp() > 0 ? 1 : -1; const Float_t l = globalTrack->GetLength(); // l is calculated by global tracking const Float_t time = tofHit->GetTime(); - const Float_t beta = l / (time * 29.9792458); - const Float_t m2 = p * p * (1. / (beta * beta) - 1.); + const Float_t beta = event ? l / ((time - event->GetTzero()) * 29.9792458) : 0; + const Float_t m2 = event ? p * p * (1. / (beta * beta) - 1.) : -1.; const Float_t hitX = tofHit->GetX(); const Float_t hitY = tofHit->GetY(); -- GitLab