diff --git a/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.cxx b/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.cxx
index 44c12f519ca0bcbbf5b6f1dc0ad2a4c15f022db7..ffa8efd019498e87e006900a4acbeaaab89a6035 100644
--- a/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.cxx
+++ b/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.cxx
@@ -39,6 +39,14 @@ void CbmRecEventHeaderConverter::Init()
   RecEventHeaderBranch.AddField<float>("end_time", "End time of the event, ns");
   RecEventHeaderBranch.AddField<float>("match_weight", "");
 
+  ivtx_chi2_     = RecEventHeaderBranch.GetFieldId("vtx_chi2");
+  iEpsd_         = RecEventHeaderBranch.GetFieldId("Epsd");
+  iM_            = RecEventHeaderBranch.GetFieldId("M");
+  ievt_id_       = RecEventHeaderBranch.GetFieldId("evt_id");
+  istart_time_   = RecEventHeaderBranch.GetFieldId("start_time");
+  iend_time_     = RecEventHeaderBranch.GetFieldId("end_time");
+  imatch_weight_ = RecEventHeaderBranch.GetFieldId("match_weight");
+
   auto* man = AnalysisTree::TaskManager::GetInstance();
   man->AddBranch(rec_event_header_, RecEventHeaderBranch);
   rec_event_header_->Init(RecEventHeaderBranch);
@@ -54,12 +62,11 @@ void CbmRecEventHeaderConverter::ProcessData(CbmEvent* event)
   if (!cbm_prim_vertex_) { throw std::runtime_error("No fPrimVtx"); }
 
   rec_event_header_->SetVertexPosition3({cbm_prim_vertex_->GetX(), cbm_prim_vertex_->GetY(), cbm_prim_vertex_->GetZ()});
-  rec_event_header_->SetField(float(cbm_prim_vertex_->GetChi2() / cbm_prim_vertex_->GetNDF()),
-                              branch.GetFieldId("vtx_chi2"));
+  rec_event_header_->SetField(float(cbm_prim_vertex_->GetChi2() / cbm_prim_vertex_->GetNDF()), ivtx_chi2_);
 
   const int n_sts_tracks = event ? event->GetNofStsTracks() : cbm_sts_tracks_->GetEntries();
-  rec_event_header_->SetField(n_sts_tracks, branch.GetFieldId("M"));
-  rec_event_header_->SetField(GetPsdEnergy(event), branch.GetFieldId("Epsd"));
+  rec_event_header_->SetField(n_sts_tracks, iM_);
+  rec_event_header_->SetField(GetPsdEnergy(event), iEpsd_);
 
   int evt_id;
   float match_weight, start_time, end_time;
@@ -77,10 +84,10 @@ void CbmRecEventHeaderConverter::ProcessData(CbmEvent* event)
     end_time     = cbm_header_->GetT();
     match_weight = 1.;
   }
-  rec_event_header_->SetField(evt_id, branch.GetFieldId("evt_id"));
-  rec_event_header_->SetField(start_time, branch.GetFieldId("start_time"));
-  rec_event_header_->SetField(end_time, branch.GetFieldId("end_time"));
-  rec_event_header_->SetField(match_weight, branch.GetFieldId("match_weight"));
+  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(match_weight, imatch_weight_);
 }
 
 float CbmRecEventHeaderConverter::GetPsdEnergy(CbmEvent* event)
diff --git a/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.h b/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.h
index bf1e5d20e315c15e99a37cc111856af560ce6f88..2276e1ec8e2b29ed7ee5f7aa64ef834b827b6c64 100644
--- a/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.h
+++ b/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.h
@@ -34,6 +34,14 @@ private:
   FairMCEventHeader* cbm_header_ {nullptr};  ///< non-owning pointer
   CbmVertex* cbm_prim_vertex_ {nullptr};     ///< non-owning pointer
 
+  int ivtx_chi2_ {AnalysisTree::UndefValueInt};
+  int iEpsd_ {AnalysisTree::UndefValueInt};
+  int iM_ {AnalysisTree::UndefValueInt};
+  int ievt_id_ {AnalysisTree::UndefValueInt};
+  int istart_time_ {AnalysisTree::UndefValueInt};
+  int iend_time_ {AnalysisTree::UndefValueInt};
+  int imatch_weight_ {AnalysisTree::UndefValueInt};
+
   ClassDef(CbmRecEventHeaderConverter, 1)
 };
 
diff --git a/analysis/common/analysis_tree_converter/CbmRichRingsConverter.cxx b/analysis/common/analysis_tree_converter/CbmRichRingsConverter.cxx
index 1e9dcc737deaa04359e909007104dac807a72cf7..35f5c997aa19b26b7183154227add67d2d3b9cdf 100644
--- a/analysis/common/analysis_tree_converter/CbmRichRingsConverter.cxx
+++ b/analysis/common/analysis_tree_converter/CbmRichRingsConverter.cxx
@@ -39,6 +39,15 @@ void CbmRichRingsConverter::Init()
   rich_branch.AddField<float>("radial_pos", "sqrt(x**2+abs(y-110)**2)");
   rich_branch.AddField<float>("radial_angle", "(0||1||2)*pi +- atan( abs((+-100-y)/-x) )");
 
+  i_r_            = rich_branch.GetFieldId("radius");
+  i_n_hits_       = rich_branch.GetFieldId("n_hits");
+  i_axis_         = rich_branch.GetFieldId("axis_a");
+  i_center_       = rich_branch.GetFieldId("center_x");
+  i_chi2_         = rich_branch.GetFieldId("chi2_ov_ndf");
+  i_radial_angle_ = rich_branch.GetFieldId("radial_angle");
+  i_radial_pos_   = rich_branch.GetFieldId("radial_pos");
+  i_phi_ellipse_  = rich_branch.GetFieldId("phi_ellipse");
+
   auto* man = AnalysisTree::TaskManager::GetInstance();
   man->AddBranch(rich_rings_, rich_branch);
   man->AddMatching(match_to_, out_branch_, vtx_tracks_2_rich_);
@@ -53,17 +62,8 @@ void CbmRichRingsConverter::ProcessData(CbmEvent* event)
   auto* out_config_  = AnalysisTree::TaskManager::GetInstance()->GetConfig();
   const auto& branch = out_config_->GetBranchConfig(out_branch_);
 
-  const int i_r            = branch.GetFieldId("radius");
-  const int i_n_hits       = branch.GetFieldId("n_hits");
-  const int i_axis         = branch.GetFieldId("axis_a");
-  const int i_center       = branch.GetFieldId("center_x");
-  const int i_chi2         = branch.GetFieldId("chi2_ov_ndf");
-  const int i_radial_angle = branch.GetFieldId("radial_angle");
-  const int i_radial_pos   = branch.GetFieldId("radial_pos");
-  const int i_phi_ellipse  = branch.GetFieldId("phi_ellipse");
-
   const auto it = indexes_map_->find(match_to_);
-  if (it == indexes_map_->end()) { throw std::runtime_error(match_to_ + " is not found to match with TOF hits"); }
+  if (it == indexes_map_->end()) { throw std::runtime_error(match_to_ + " is not found to match with RICH rings"); }
   auto rec_tracks_map = it->second;
 
   const int n_tracks = event ? event->GetNofData(ECbmDataType::kGlobalTrack) : cbm_global_tracks_->GetEntriesFast();
@@ -87,17 +87,17 @@ void CbmRichRingsConverter::ProcessData(CbmEvent* event)
 
     auto& ring = rich_rings_->AddChannel(branch);
     ring.SetPosition(rich_ring->GetCenterX(), rich_ring->GetCenterY(), 0.f);
-    ring.SetField(int(rich_ring->GetNofHits()), i_n_hits);
-    ring.SetField(int(rich_ring->GetNofHitsOnRing()), i_n_hits + 1);
-    ring.SetField(float(rich_ring->GetAaxis()), i_axis);
-    ring.SetField(float(rich_ring->GetBaxis()), i_axis + 1);
-    ring.SetField(float(rich_ring->GetCenterX()), i_center);
-    ring.SetField(float(rich_ring->GetCenterY()), i_center + 1);
-    ring.SetField(float(rich_ring->GetRadius()), i_r);
-    ring.SetField(float(rich_ring->GetNDF() > 0. ? rich_ring->GetChi2() / rich_ring->GetNDF() : -999.), i_chi2);
-    ring.SetField(float(rich_ring->GetRadialAngle()), i_radial_angle);
-    ring.SetField(float(rich_ring->GetRadialPosition()), i_radial_pos);
-    ring.SetField(float(rich_ring->GetPhi()), i_phi_ellipse);
+    ring.SetField(int(rich_ring->GetNofHits()), i_n_hits_);
+    ring.SetField(int(rich_ring->GetNofHitsOnRing()), i_n_hits_ + 1);
+    ring.SetField(float(rich_ring->GetAaxis()), i_axis_);
+    ring.SetField(float(rich_ring->GetBaxis()), i_axis_ + 1);
+    ring.SetField(float(rich_ring->GetCenterX()), i_center_);
+    ring.SetField(float(rich_ring->GetCenterY()), i_center_ + 1);
+    ring.SetField(float(rich_ring->GetRadius()), i_r_);
+    ring.SetField(float(rich_ring->GetNDF() > 0. ? rich_ring->GetChi2() / rich_ring->GetNDF() : -999.), i_chi2_);
+    ring.SetField(float(rich_ring->GetRadialAngle()), i_radial_angle_);
+    ring.SetField(float(rich_ring->GetRadialPosition()), i_radial_pos_);
+    ring.SetField(float(rich_ring->GetPhi()), i_phi_ellipse_);
 
     if (rec_tracks_map.empty()) { continue; }
     const Int_t stsTrackIndex = global_track->GetStsTrackIndex();
diff --git a/analysis/common/analysis_tree_converter/CbmRichRingsConverter.h b/analysis/common/analysis_tree_converter/CbmRichRingsConverter.h
index 5e6c22dd272e6f22a4f5f84ab4abaddaaf089d42..88d98658847ab1f44c64bed115c0c06a121d85a3 100644
--- a/analysis/common/analysis_tree_converter/CbmRichRingsConverter.h
+++ b/analysis/common/analysis_tree_converter/CbmRichRingsConverter.h
@@ -34,6 +34,15 @@ private:
   AnalysisTree::HitDetector* rich_rings_ {nullptr};
   AnalysisTree::Matching* vtx_tracks_2_rich_ {nullptr};
 
+  int i_r_ {AnalysisTree::UndefValueInt};
+  int i_n_hits_ {AnalysisTree::UndefValueInt};
+  int i_axis_ {AnalysisTree::UndefValueInt};
+  int i_center_ {AnalysisTree::UndefValueInt};
+  int i_chi2_ {AnalysisTree::UndefValueInt};
+  int i_radial_angle_ {AnalysisTree::UndefValueInt};
+  int i_radial_pos_ {AnalysisTree::UndefValueInt};
+  int i_phi_ellipse_ {AnalysisTree::UndefValueInt};
+
   ClassDef(CbmRichRingsConverter, 1)
 };
 
diff --git a/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.cxx b/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.cxx
index a62f2d2254dc645fa2958770eedf86ef21aac5b7..a244b01467e9d1473686303717e3b296c901f5f3 100644
--- a/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.cxx
+++ b/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.cxx
@@ -38,6 +38,13 @@ void CbmSimEventHeaderConverter::Init()
   SimEventHeaderBranch.AddField<int>("run_id", "run identifier");
   SimEventHeaderBranch.AddField<int>("event_id", "event identifier");
 
+  ipsi_RP_     = SimEventHeaderBranch.GetFieldId("psi_RP");
+  ib_          = SimEventHeaderBranch.GetFieldId("b");
+  istart_time_ = SimEventHeaderBranch.GetFieldId("start_time");
+  iend_time_   = SimEventHeaderBranch.GetFieldId("end_time");
+  irun_id_     = SimEventHeaderBranch.GetFieldId("run_id");
+  ievent_id_   = SimEventHeaderBranch.GetFieldId("event_id");
+
   auto* man = AnalysisTree::TaskManager::GetInstance();
   man->AddBranch(sim_event_header_, SimEventHeaderBranch);
   sim_event_header_->Init(SimEventHeaderBranch);
@@ -68,14 +75,14 @@ void CbmSimEventHeaderConverter::ProcessData(CbmEvent* event)
   TVector3 pos {cbm_header->GetX(), cbm_header->GetY(), cbm_header->GetZ()};
   sim_event_header_->SetVertexPosition3(pos);
 
-  sim_event_header_->SetField(float(cbm_header->GetRotZ()), branch.GetFieldId("psi_RP"));
-  sim_event_header_->SetField(float(cbm_header->GetB()), branch.GetFieldId("b"));
-  sim_event_header_->SetField(int(cbm_header->GetEventID()), branch.GetFieldId("event_id"));
-  sim_event_header_->SetField(int(cbm_header->GetRunID()), branch.GetFieldId("run_id"));
+  sim_event_header_->SetField(float(cbm_header->GetRotZ()), ipsi_RP_);
+  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_);
 
   if (event) {
     LOG(info) << "TIME: " << event->GetStartTime() << "  " << event->GetEndTime();
-    sim_event_header_->SetField(float(event->GetStartTime()), branch.GetFieldId("start_time"));
-    sim_event_header_->SetField(float(event->GetEndTime()), branch.GetFieldId("end_time"));
+    sim_event_header_->SetField(float(event->GetStartTime()), istart_time_);
+    sim_event_header_->SetField(float(event->GetEndTime()), iend_time_);
   }
 }
diff --git a/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.h b/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.h
index f994f0e663f05550c3c9ab59dd5d5b686af39aa1..7061742bdaa005f30e8272dd6b9fa2602c66d9e3 100644
--- a/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.h
+++ b/analysis/common/analysis_tree_converter/CbmSimEventHeaderConverter.h
@@ -30,6 +30,13 @@ private:
   CbmMCDataManager* cbm_mc_manager_ {nullptr};
   CbmMCDataObject* cbm_header_obj_ {nullptr};
 
+  int ipsi_RP_ {AnalysisTree::UndefValueInt};
+  int ib_ {AnalysisTree::UndefValueInt};
+  int istart_time_ {AnalysisTree::UndefValueInt};
+  int iend_time_ {AnalysisTree::UndefValueInt};
+  int irun_id_ {AnalysisTree::UndefValueInt};
+  int ievent_id_ {AnalysisTree::UndefValueInt};
+
   ClassDef(CbmSimEventHeaderConverter, 1)
 };
 
diff --git a/analysis/common/analysis_tree_converter/CbmSimTracksConverter.cxx b/analysis/common/analysis_tree_converter/CbmSimTracksConverter.cxx
index f3e24e37ce322596e5355bf691e58cfd372f57c6..9d130fa47986cc9afd74f9c29093b8b7a0cdc635 100644
--- a/analysis/common/analysis_tree_converter/CbmSimTracksConverter.cxx
+++ b/analysis/common/analysis_tree_converter/CbmSimTracksConverter.cxx
@@ -80,6 +80,12 @@ void CbmSimTracksConverter::Init()
   sim_particles_branch.AddFields<float>({"start_x", "start_y", "start_z"}, "Start position, cm");
   sim_particles_branch.AddField<float>("start_t", "t freezout coordinate fm/c");
 
+  imother_id_ = sim_particles_branch.GetFieldId("mother_id");
+  igeant_id_  = sim_particles_branch.GetFieldId("geant_process_id");
+  in_hits_    = sim_particles_branch.GetFieldId("n_hits_mvd");
+  icbm_id_    = sim_particles_branch.GetFieldId("cbmroot_id");
+  istart_x_   = sim_particles_branch.GetFieldId("start_x");
+
   auto* man = AnalysisTree::TaskManager::GetInstance();
   man->AddBranch(sim_tracks_, sim_particles_branch);
 }
@@ -120,11 +126,6 @@ void CbmSimTracksConverter::ProcessData(CbmEvent* event)
     LOG(warn) << "No MC tracks!";
     return;
   }
-  const int imother_id = branch.GetFieldId("mother_id");
-  const int igeant_id  = branch.GetFieldId("geant_process_id");
-  const int in_hits    = branch.GetFieldId("n_hits_mvd");
-  const int icbm_id    = branch.GetFieldId("cbmroot_id");
-  const int istart_x   = branch.GetFieldId("start_x");
 
   sim_tracks_->Reserve(nMcTracks);
 
@@ -143,17 +144,17 @@ void CbmSimTracksConverter::ProcessData(CbmEvent* event)
     track.SetMomentum(mctrack->GetPx(), mctrack->GetPy(), mctrack->GetPz());
     track.SetMass(float(mctrack->GetMass()));
     track.SetPid(int(mctrack->GetPdgCode()));
-    track.SetField(int(mctrack->GetGeantProcessId()), igeant_id);
-    track.SetField(int(mctrack->GetNPoints(ECbmModuleId::kMvd)), in_hits);
-    track.SetField(int(mctrack->GetNPoints(ECbmModuleId::kSts)), in_hits + 1);
-    track.SetField(int(mctrack->GetNPoints(ECbmModuleId::kTrd)), in_hits + 2);
-    track.SetField(int(mctrack->GetUniqueID()), icbm_id);
+    track.SetField(int(mctrack->GetGeantProcessId()), igeant_id_);
+    track.SetField(int(mctrack->GetNPoints(ECbmModuleId::kMvd)), in_hits_);
+    track.SetField(int(mctrack->GetNPoints(ECbmModuleId::kSts)), in_hits_ + 1);
+    track.SetField(int(mctrack->GetNPoints(ECbmModuleId::kTrd)), in_hits_ + 2);
+    track.SetField(int(mctrack->GetUniqueID()), icbm_id_);
 
     if (mctrack->GetMotherId() >= 0) {  // secondary
-      track.SetField(float(mctrack->GetStartX() - cbm_header_->GetX()), istart_x);
-      track.SetField(float(mctrack->GetStartY() - cbm_header_->GetY()), istart_x + 1);
-      track.SetField(float(mctrack->GetStartZ() - cbm_header_->GetZ()), istart_x + 2);
-      track.SetField(float(nsTofmc * (mctrack->GetStartT() - cbm_header_->GetT())), istart_x + 3);
+      track.SetField(float(mctrack->GetStartX() - cbm_header_->GetX()), istart_x_);
+      track.SetField(float(mctrack->GetStartY() - cbm_header_->GetY()), istart_x_ + 1);
+      track.SetField(float(mctrack->GetStartZ() - cbm_header_->GetZ()), istart_x_ + 2);
+      track.SetField(float(nsTofmc * (mctrack->GetStartT() - cbm_header_->GetT())), istart_x_ + 3);
     }
     else {  // primary
       if (use_unigen_ && trackIndex < unigen_event_->GetNpa()) {
@@ -161,27 +162,27 @@ void CbmSimTracksConverter::ProcessData(CbmEvent* event)
         TLorentzVector boostedX = p->GetPosition();
         boostedX.Boost(0, 0, -beta_cm_);
         boostedX.RotateZ(delta_phi);
-        track.SetField(float(boostedX.X() * 1e-13), istart_x);
-        track.SetField(float(boostedX.Y() * 1e-13), istart_x + 1);
-        track.SetField(float(boostedX.Z() * 1e-13), istart_x + 2);
-        track.SetField(float(boostedX.T()), istart_x + 3);
+        track.SetField(float(boostedX.X() * 1e-13), istart_x_);
+        track.SetField(float(boostedX.Y() * 1e-13), istart_x_ + 1);
+        track.SetField(float(boostedX.Z() * 1e-13), istart_x_ + 2);
+        track.SetField(float(boostedX.T()), istart_x_ + 3);
       }
       else {
-        track.SetField(0.f, istart_x);
-        track.SetField(0.f, istart_x + 1);
-        track.SetField(0.f, istart_x + 2);
-        track.SetField(0.f, istart_x + 3);
+        track.SetField(0.f, istart_x_);
+        track.SetField(0.f, istart_x_ + 1);
+        track.SetField(0.f, istart_x_ + 2);
+        track.SetField(0.f, istart_x_ + 3);
       }
     }
 
     // mother id should < than track id, so we can do it here
-    if (mctrack->GetMotherId() == -1) { track.SetField(int(-1), imother_id); }
+    if (mctrack->GetMotherId() == -1) { track.SetField(int(-1), imother_id_); }
     else {
       auto p = out_indexes_map_.find(mctrack->GetMotherId());
       if (p == out_indexes_map_.end())  // match is not found
-        track.SetField(int(-999), imother_id);
+        track.SetField(int(-999), imother_id_);
       else {
-        track.SetField(int(p->second), imother_id);
+        track.SetField(int(p->second), imother_id_);
       }
     }
   }
diff --git a/analysis/common/analysis_tree_converter/CbmSimTracksConverter.h b/analysis/common/analysis_tree_converter/CbmSimTracksConverter.h
index 1f27dbf76bb8fcbbc0123396367a4dc0391ca81e..97adcaab3ba6a96fe1c2d4c40be8d395d566c925 100644
--- a/analysis/common/analysis_tree_converter/CbmSimTracksConverter.h
+++ b/analysis/common/analysis_tree_converter/CbmSimTracksConverter.h
@@ -55,6 +55,12 @@ private:
   Double_t beta_cm_ {0};  ///< CM velocity in the lab frame
   Bool_t use_unigen_ {false};
 
+  int imother_id_ {AnalysisTree::UndefValueInt};
+  int igeant_id_ {AnalysisTree::UndefValueInt};
+  int in_hits_ {AnalysisTree::UndefValueInt};
+  int icbm_id_ {AnalysisTree::UndefValueInt};
+  int istart_x_ {AnalysisTree::UndefValueInt};
+
   ClassDef(CbmSimTracksConverter, 1)
 };
 
diff --git a/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx b/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx
index 719b634438521665dd23c96cc6c005f2bcd46449..6f7a3f180ac3e5c88dad966d6f3274c17b143c7e 100644
--- a/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx
+++ b/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx
@@ -72,6 +72,17 @@ void CbmStsTracksConverter::Init()
   vtx_tracks_config.AddField<int>("nhits", "number of hits (total MVD+STS)");
   vtx_tracks_config.AddField<int>("nhits_mvd", "number of hits in MVD");
   vtx_tracks_config.AddField<float>("match_weight", "true over all hits ratio for a matched MC-track");
+  vtx_tracks_config.AddField<float>("dE_over_dx");
+
+  iq_            = vtx_tracks_config.GetFieldId("q");
+  indf_          = vtx_tracks_config.GetFieldId("ndf");
+  ichi2_         = vtx_tracks_config.GetFieldId("chi2");
+  inhits_        = vtx_tracks_config.GetFieldId("nhits");
+  inhits_mvd_    = vtx_tracks_config.GetFieldId("nhits_mvd");
+  idcax_         = vtx_tracks_config.GetFieldId("dcax");
+  ivtx_chi2_     = vtx_tracks_config.GetFieldId("vtx_chi2");
+  ide_dx_        = vtx_tracks_config.GetFieldId("dE_over_dx");
+  imatch_weight_ = vtx_tracks_config.GetFieldId("match_weight");
 
   if (is_write_kfinfo_) {
     vtx_tracks_config.AddFields<float>({"x", "y", "z", "tx", "ty", "qp"}, "track parameters");
@@ -81,8 +92,6 @@ void CbmStsTracksConverter::Init()
                                         "cov11", "cov12", "cov13", "cov14", "cov15"},
                                        "covarience matrix");
 
-    vtx_tracks_config.AddField<float>("dE_over_dx");
-
     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");
@@ -131,15 +140,6 @@ void CbmStsTracksConverter::ReadVertexTracks(CbmEvent* event)
   auto* out_config_  = AnalysisTree::TaskManager::GetInstance()->GetConfig();
   const auto& branch = out_config_->GetBranchConfig(out_branch_);
 
-  const int iq         = branch.GetFieldId("q");
-  const int indf       = branch.GetFieldId("ndf");
-  const int ichi2      = branch.GetFieldId("chi2");
-  const int inhits     = branch.GetFieldId("nhits");
-  const int inhits_mvd = branch.GetFieldId("nhits_mvd");
-  const int idcax      = branch.GetFieldId("dcax");
-  const int ivtx_chi2  = branch.GetFieldId("vtx_chi2");
-  const int ide_dx     = branch.GetFieldId("dE_over_dx");
-
   const int n_sts_tracks = event ? event->GetNofStsTracks() : cbm_sts_tracks_->GetEntries();
   if (n_sts_tracks <= 0) {
     LOG(warn) << "No STS tracks!";
@@ -164,16 +164,16 @@ void CbmStsTracksConverter::ReadVertexTracks(CbmEvent* event)
     const Int_t q = trackParamFirst->GetQp() > 0 ? 1 : -1;
 
     track.SetMomentum3(momRec);
-    track.SetField(int(q), iq);
-    track.SetField(int(sts_track->GetNDF()), indf);
-    track.SetField(float(sts_track->GetChiSq()), ichi2);
-    track.SetField(int(sts_track->GetNofHits()), inhits);
-    track.SetField(float(trackParamFirst->GetX() - cbm_prim_vertex_->GetX()), idcax);
-    track.SetField(float(trackParamFirst->GetY() - cbm_prim_vertex_->GetY()), idcax + 1);
-    track.SetField(float(trackParamFirst->GetZ() - cbm_prim_vertex_->GetZ()), idcax + 2);
-    track.SetField(int(sts_track->GetNofMvdHits()), inhits_mvd);
-    track.SetField(float(chi2_vertex), ivtx_chi2);
-    track.SetField(float(sts_track->GetELoss()), ide_dx);
+    track.SetField(int(q), iq_);
+    track.SetField(int(sts_track->GetNDF()), indf_);
+    track.SetField(float(sts_track->GetChiSq()), ichi2_);
+    track.SetField(int(sts_track->GetNofHits()), inhits_);
+    track.SetField(float(trackParamFirst->GetX() - cbm_prim_vertex_->GetX()), idcax_);
+    track.SetField(float(trackParamFirst->GetY() - cbm_prim_vertex_->GetY()), idcax_ + 1);
+    track.SetField(float(trackParamFirst->GetZ() - cbm_prim_vertex_->GetZ()), idcax_ + 2);
+    track.SetField(int(sts_track->GetNofMvdHits()), inhits_mvd_);
+    track.SetField(float(chi2_vertex), ivtx_chi2_);
+    track.SetField(float(sts_track->GetELoss()), ide_dx_);
 
     out_indexes_map_.insert(std::make_pair(track_index, track.GetId()));
 
@@ -253,7 +253,6 @@ void CbmStsTracksConverter::MapTracks(CbmEvent* event)
   else {
     event_id = FairRootManager::Instance()->GetEntryNr();
   }
-  auto weight_id = config_->GetBranchConfig(out_branch_).GetFieldId("match_weight");
 
   for (const auto& track_id : out_indexes_map_) {
     const int cbm_id = track_id.first;
@@ -278,7 +277,7 @@ void CbmStsTracksConverter::MapTracks(CbmEvent* event)
 
       //      LOG(info) << match->GetTrueOverAllHitsRatio();
 
-      track.SetField(float(match->GetTrueOverAllHitsRatio()), weight_id);
+      track.SetField(float(match->GetTrueOverAllHitsRatio()), imatch_weight_);
       vtx_tracks_2_sim_->AddMatch(out_id, p->second);
     }
   }
diff --git a/analysis/common/analysis_tree_converter/CbmStsTracksConverter.h b/analysis/common/analysis_tree_converter/CbmStsTracksConverter.h
index 98b5400bf49a829518e2d994220fe0c43d13e2d6..9370a9479807a4929103243a79026183ed2f5e39 100644
--- a/analysis/common/analysis_tree_converter/CbmStsTracksConverter.h
+++ b/analysis/common/analysis_tree_converter/CbmStsTracksConverter.h
@@ -63,12 +63,22 @@ private:
   bool is_write_kfinfo_ {true};
   bool is_reproduce_cbmkfpf_ {true};
 
-  int ipar_ {-1};
-  int imf_ {-1};
-  int icov_ {-1};
-  int imc_pdg_ {-1};
-  int imother_pdg_ {-1};
-  int ipasscuts_ {-1};
+  int iq_ {AnalysisTree::UndefValueInt};
+  int indf_ {AnalysisTree::UndefValueInt};
+  int ichi2_ {AnalysisTree::UndefValueInt};
+  int inhits_ {AnalysisTree::UndefValueInt};
+  int inhits_mvd_ {AnalysisTree::UndefValueInt};
+  int idcax_ {AnalysisTree::UndefValueInt};
+  int ivtx_chi2_ {AnalysisTree::UndefValueInt};
+  int ide_dx_ {AnalysisTree::UndefValueInt};
+  int imatch_weight_ {AnalysisTree::UndefValueInt};
+
+  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};
 
   ClassDef(CbmStsTracksConverter, 1)
 };
diff --git a/analysis/common/analysis_tree_converter/CbmTofHitsConverter.cxx b/analysis/common/analysis_tree_converter/CbmTofHitsConverter.cxx
index 1a373d987bc49585d36ea5b7abecc0d748ad34d1..5426a09dbac0f8b4afb765d2592ae18b95c81e9f 100644
--- a/analysis/common/analysis_tree_converter/CbmTofHitsConverter.cxx
+++ b/analysis/common/analysis_tree_converter/CbmTofHitsConverter.cxx
@@ -45,7 +45,12 @@ void CbmTofHitsConverter::Init()
   tof_branch.AddField<float>("t", "ps(?), Measured time ");
   tof_branch.AddField<float>("qp_tof", "charge * momentum extrapoleted to TOF");
   tof_branch.AddFields<float>({"dx", "dy", "dz"}, "Distance between TOF hit and extrapolated global track, cm");
-  tof_branch.AddField<int>("mc_pdg", "MC-true PDG code of particle with highest contribution to TOF hit");
+
+  i_mass2_ = tof_branch.GetFieldId("mass2");
+  i_qp_    = tof_branch.GetFieldId("qp_tof");
+  i_dx_    = tof_branch.GetFieldId("dx");
+  i_t_     = tof_branch.GetFieldId("t");
+  i_l_     = tof_branch.GetFieldId("l");
 
   auto* man = AnalysisTree::TaskManager::GetInstance();
   man->AddBranch(tof_hits_, tof_branch);
@@ -76,12 +81,6 @@ void CbmTofHitsConverter::ProcessData(CbmEvent* event)
   auto* out_config_  = AnalysisTree::TaskManager::GetInstance()->GetConfig();
   const auto& branch = out_config_->GetBranchConfig(out_branch_);
 
-  const int i_mass2 = branch.GetFieldId("mass2");
-  const int i_qp    = branch.GetFieldId("qp_tof");
-  const int i_dx    = branch.GetFieldId("dx");
-  const int i_t     = branch.GetFieldId("t");
-  const int i_l     = branch.GetFieldId("l");
-
   auto rec_tracks_map = GetMatchMap(match_to_);
   auto sim_tracks_map = GetMatchMap(mc_tracks_);
 
@@ -133,13 +132,13 @@ void CbmTofHitsConverter::ProcessData(CbmEvent* event)
     auto& hit = tof_hits_->AddChannel(branch);
     hit.SetPosition(hitX, hitY, hitZ);
     hit.SetSignal(time);
-    hit.SetField(m2, i_mass2);
-    hit.SetField(float(q * p_tof.Mag()), i_qp);
-    hit.SetField(float(param_last.GetX() - hitX), i_dx);
-    hit.SetField(float(param_last.GetY() - hitY), i_dx + 1);
-    hit.SetField(float(param_last.GetZ() - hitZ), i_dx + 2);
-    hit.SetField(l, i_l);
-    hit.SetField(time, i_t);
+    hit.SetField(m2, i_mass2_);
+    hit.SetField(float(q * p_tof.Mag()), i_qp_);
+    hit.SetField(float(param_last.GetX() - hitX), i_dx_);
+    hit.SetField(float(param_last.GetY() - hitY), i_dx_ + 1);
+    hit.SetField(float(param_last.GetZ() - hitZ), i_dx_ + 2);
+    hit.SetField(l, i_l_);
+    hit.SetField(time, i_t_);
 
     if (rec_tracks_map.empty()) { continue; }
     const Int_t stsTrackIndex = globalTrack->GetStsTrackIndex();
diff --git a/analysis/common/analysis_tree_converter/CbmTofHitsConverter.h b/analysis/common/analysis_tree_converter/CbmTofHitsConverter.h
index cd7dd733e388eb45a063ebb22722f3fa71761b9e..d55cb66d2a66bc9ba726565bbfc5777670aaffa1 100644
--- a/analysis/common/analysis_tree_converter/CbmTofHitsConverter.h
+++ b/analysis/common/analysis_tree_converter/CbmTofHitsConverter.h
@@ -56,6 +56,12 @@ private:
   AnalysisTree::Matching* vtx_tracks_2_tof_ {nullptr};
   AnalysisTree::Matching* tof_hits_2_mc_tracks_ {nullptr};
 
+  int i_mass2_ {AnalysisTree::UndefValueInt};
+  int i_qp_ {AnalysisTree::UndefValueInt};
+  int i_dx_ {AnalysisTree::UndefValueInt};
+  int i_t_ {AnalysisTree::UndefValueInt};
+  int i_l_ {AnalysisTree::UndefValueInt};
+
   ClassDef(CbmTofHitsConverter, 1)
 };
 
diff --git a/analysis/common/analysis_tree_converter/CbmTrdTracksConverter.cxx b/analysis/common/analysis_tree_converter/CbmTrdTracksConverter.cxx
index a29ea1c8a6038b37ffe5910c4a6a647ae1c71584..ebe5ee75293823dd6557eaaa282504c80a2a3c34 100644
--- a/analysis/common/analysis_tree_converter/CbmTrdTracksConverter.cxx
+++ b/analysis/common/analysis_tree_converter/CbmTrdTracksConverter.cxx
@@ -41,6 +41,12 @@ void CbmTrdTracksConverter::Init()
   trd_branch.AddFields<float>({"pT_out", "p_out"}, "Momentum at last point (?)");
   trd_branch.AddField<int>("n_hits", "Number of hits");
 
+  i_e_loss_i_    = trd_branch.GetFieldId("energy_loss_0");
+  i_pid_like_    = trd_branch.GetFieldId("pid_like_e");
+  i_chi2_ov_ndf_ = trd_branch.GetFieldId("chi2_ov_ndf");
+  i_pT_out_      = trd_branch.GetFieldId("pT_out");
+  i_n_hits_      = trd_branch.GetFieldId("n_hits");
+
   auto* man = AnalysisTree::TaskManager::GetInstance();
   man->AddBranch(trd_tracks_, trd_branch);
   man->AddMatching(match_to_, out_branch_, vtx_tracks_2_trd_);
@@ -55,14 +61,8 @@ void CbmTrdTracksConverter::ProcessData(CbmEvent* event)
   auto* out_config_  = AnalysisTree::TaskManager::GetInstance()->GetConfig();
   const auto& branch = out_config_->GetBranchConfig(out_branch_);
 
-  const int i_e_loss_i    = branch.GetFieldId("energy_loss_0");
-  const int i_pid_like    = branch.GetFieldId("pid_like_e");
-  const int i_chi2_ov_ndf = branch.GetFieldId("chi2_ov_ndf");
-  const int i_pT_out      = branch.GetFieldId("pT_out");
-  const int i_n_hits      = branch.GetFieldId("n_hits");
-
   const auto it = indexes_map_->find(match_to_);
-  if (it == indexes_map_->end()) { throw std::runtime_error(match_to_ + " is not found to match with TOF hits"); }
+  if (it == indexes_map_->end()) { throw std::runtime_error(match_to_ + " is not found to match with TRD tracks"); }
   auto rec_tracks_map = it->second;
 
   const int n_tracks = event ? event->GetNofData(ECbmDataType::kGlobalTrack) : cbm_global_tracks_->GetEntriesFast();
@@ -92,21 +92,21 @@ void CbmTrdTracksConverter::ProcessData(CbmEvent* event)
     trd_track->GetParamLast()->Momentum(mom_last);
 
     track.SetMomentum3(mom);
-    track.SetField(int(trd_track->GetNofHits()), i_n_hits);
+    track.SetField(int(trd_track->GetNofHits()), i_n_hits_);
 
-    track.SetField(float(trd_track->GetPidLikeEL()), i_pid_like);
-    track.SetField(float(trd_track->GetPidLikePI()), i_pid_like + 1);
-    track.SetField(float(trd_track->GetPidLikeKA()), i_pid_like + 2);
-    track.SetField(float(trd_track->GetPidLikePR()), i_pid_like + 3);
+    track.SetField(float(trd_track->GetPidLikeEL()), i_pid_like_);
+    track.SetField(float(trd_track->GetPidLikePI()), i_pid_like_ + 1);
+    track.SetField(float(trd_track->GetPidLikeKA()), i_pid_like_ + 2);
+    track.SetField(float(trd_track->GetPidLikePR()), i_pid_like_ + 3);
 
     track.SetField(float(trd_track->GetNDF() > 0. ? trd_track->GetChiSq() / trd_track->GetNDF() : -999.),
-                   i_chi2_ov_ndf);
+                   i_chi2_ov_ndf_);
 
-    track.SetField(float(mom_last.Pt()), i_pT_out);
-    track.SetField(float(mom_last.Mag()), i_pT_out + 1);
+    track.SetField(float(mom_last.Pt()), i_pT_out_);
+    track.SetField(float(mom_last.Mag()), i_pT_out_ + 1);
 
     for (int i = 0; i < 4; ++i) {
-      track.SetField(0.f, i_e_loss_i + i);
+      track.SetField(0.f, i_e_loss_i_ + i);
     }
 
     for (Int_t ihit = 0; ihit < trd_track->GetNofHits(); ihit++) {
@@ -114,7 +114,7 @@ void CbmTrdTracksConverter::ProcessData(CbmEvent* event)
       auto* hit = (CbmTrdHit*) cbm_trd_hits_->At(idx);
       if (hit) {
         //        std::cout << hit->GetELoss()*1e6 << "  " << hit->GetPlaneId() << std::endl;
-        track.SetField(float(hit->GetELoss() * 1e6), i_e_loss_i + hit->GetPlaneId());
+        track.SetField(float(hit->GetELoss() * 1e6), i_e_loss_i_ + hit->GetPlaneId());
       }
     }
 
diff --git a/analysis/common/analysis_tree_converter/CbmTrdTracksConverter.h b/analysis/common/analysis_tree_converter/CbmTrdTracksConverter.h
index 4a54d052cb789dd1f2b1cbad30f13f2b95fa8c5d..435d2e079b423d0f6677c316f8543f3340fb4c64 100644
--- a/analysis/common/analysis_tree_converter/CbmTrdTracksConverter.h
+++ b/analysis/common/analysis_tree_converter/CbmTrdTracksConverter.h
@@ -38,6 +38,12 @@ private:
   AnalysisTree::TrackDetector* trd_tracks_ {nullptr};
   AnalysisTree::Matching* vtx_tracks_2_trd_ {nullptr};
 
+  int i_e_loss_i_ {AnalysisTree::UndefValueInt};
+  int i_pid_like_ {AnalysisTree::UndefValueInt};
+  int i_chi2_ov_ndf_ {AnalysisTree::UndefValueInt};
+  int i_pT_out_ {AnalysisTree::UndefValueInt};
+  int i_n_hits_ {AnalysisTree::UndefValueInt};
+
   ClassDef(CbmTrdTracksConverter, 1)
 };