Просмотр исходного кода

Small addition for CreateExtendedAT.C (24)

PeterParfenov 1 год назад
Родитель
Сommit
98009b6ef1
2 измененных файлов с 63 добавлено и 0 удалено
  1. 59 0
      preprocessing/UserTaskWrite.cpp
  2. 4 0
      preprocessing/UserTaskWrite.hpp

+ 59 - 0
preprocessing/UserTaskWrite.cpp

@@ -24,6 +24,10 @@ void UserTaskWrite::Init() {
   particles_ = chain->GetBranch("McTracks");
   particles_.Freeze();
 
+  AddInputBranch("FHCalModules");
+  fhcal_mods_ = chain->GetBranch("FHCalModules");
+  fhcal_mods_.Freeze();
+
   match_ = chain->GetMatching("TpcTracks", "McTracks");
 
   auto br_conf_reco_evt = chain->GetConfiguration()->GetBranchConfig("RecoEvent");
@@ -41,16 +45,23 @@ void UserTaskWrite::Init() {
   new_conf_particles.AddFields<bool>({"is_charged"}, "Extended parameter");
   new_conf_particles.AddFields<int>({"eta_sign"}, "Extended parameter");
 
+  auto br_conf_fhcal_mods = chain->GetConfiguration()->GetBranchConfig("FHCalModules");
+  auto new_conf_fhcal_mods = br_conf_fhcal_mods.Clone("FHCalModulesExt", DetType::kModule);
+  new_fhcal_mods_.AddFields<float>({"phi", "signal_eta_signed"}, "Extended parameter");
+
   new_reco_evt_ = Branch(new_conf_reco_evt);
   new_reco_evt_.SetMutable();
   new_tracks_ = Branch(new_conf_tracks);
   new_tracks_.SetMutable();
   new_particles_ = Branch(new_conf_particles);
   new_particles_.SetMutable();
+  new_fhcal_mods_ = Branch(new_conf_fhcal_mods);
+  new_fhcal_mods_.SetMutable();
 
   man->AddBranch(&new_reco_evt_);
   man->AddBranch(&new_tracks_);
   man->AddBranch(&new_particles_);
+  man->AddBranch(&new_fhcal_mods_);
 }
 
 void UserTaskWrite::Exec() {
@@ -85,6 +96,12 @@ void UserTaskWrite::Exec() {
   auto imc_pid       = particles_.GetField("pid");
   auto imc_mother_id = particles_.GetField("mother_id");
 
+  auto ifhcal_mods_phi = new_fhcal_mods_.GetField("phi");
+  auto ifhcal_mods_signal_eta_signed = new_fhcal_mods_.GetField("signal_eta_signed");
+
+  auto ifhcal_signal = fhcal_mods_.GetField("signal");
+  auto ifhcal_number = fhcal_mods_.GetField("number");
+
   // Processing reco & mc event
   for(size_t i=0; i<1; ++i){
     auto mc_evt_var = mc_evt_[i];
@@ -137,12 +154,27 @@ void UserTaskWrite::Exec() {
     new_particle.SetValue(imc_particle_eta_sign, mc_eta_sign);
     new_particle.SetValue(imc_particle_is_charged, is_charged);
   }
+
+  // Loop over FHCal modules
+  new_fhcal_mods_.ClearChannels();
+  for(size_t i=0; i<fhcal_mods_.size(); ++i){
+    auto fhcal_mod = fhcal_mods_[i];
+    auto new_fhcal_mod = new_fhcal_mods_.NewChannel();
+    new_fhcal_mod.CopyContent(fhcal_mod);
+
+    double phi_mod = GetFHCalPhi((int)fhcal_mod.Value(ifhcal_number));
+    out_fhcal_mod.SetValue(ifhcal_mods_phi, phi_mod);
+
+    float fhcal_sign = ((int)fhcal_mod.Value(ifhcal_number) < 45) ? -1. : 1.;
+    out_fhcal_mod.SetValue(ifhcal_mods_signal_eta_signed, fhcal_sign*fhcal_mod.Value(ifhcal_signal));
+  }
 }
 
 UserTaskWrite::~UserTaskWrite() {
   delete new_reco_evt_ptr_;
   delete new_particles_ptr_;
   delete new_tracks_ptr_;
+  delete new_fhcal_mods_ptr_;
 }
 
 bool UserTaskWrite::IsCharged(Int_t pdg) {
@@ -182,3 +214,30 @@ float UserTaskWrite::GetBCent(Float_t bimp) {
   }
   return cent;
 }
+
+float UserTaskWrite::GetFHCalPhi(int iModule)
+{
+  const int Nmodules = 45;
+  int xAxisSwitch = (iModule < Nmodules) ? 1 : -1;
+  int module = (iModule < Nmodules) ? iModule : iModule - Nmodules;
+  float x, y, phi = -999.;
+  if (module >= 0 && module <= 4)
+  {
+    y = 45.;
+    x = (module - 2) * 15.;
+    phi = TMath::ATan2(y, x * xAxisSwitch);
+  }
+  else if ((module >= 5) && (module <= 39))
+  {
+    y = (3 - (module + 2) / 7) * 15.;
+    x = (3 - (module + 2) % 7) * 15.;
+    phi = TMath::ATan2(y, x * xAxisSwitch);
+  }
+  else if ((module >= 40) && (module <= 44))
+  {
+    y = -45.;
+    x = (module - 42) * 15.;
+    phi = TMath::ATan2(y, x * xAxisSwitch);
+  }
+  return phi;
+}

+ 4 - 0
preprocessing/UserTaskWrite.hpp

@@ -28,15 +28,19 @@ class UserTaskWrite : public AnalysisTree::Task {
   AnalysisTree::Branch new_particles_;
   AnalysisTree::Branch tracks_;
   AnalysisTree::Branch new_tracks_;
+  AnalysisTree::Branch fhcal_mods_;
+  AnalysisTree::Branch new_fhcal_mods_;
 
   AnalysisTree::EventHeader* new_reco_evt_{nullptr};
   AnalysisTree::Particles* new_particles_ptr_{nullptr};
   AnalysisTree::Track* new_tracks_ptr_{nullptr};
+  AnalysisTree::Track* new_fhcal_mods_ptr_{nullptr};
 
   AnalysisTree::Matching* match_{nullptr};
 
   bool  IsCharged(Int_t pdg);
   float GetRapidityPDG(Float_t p, Float_t pz, Int_t pdg);
   float GetBCent(Float_t bimp);
+  float GetFHCalPhi(int iModule);
 };
 #endif//ANALYSISTREE_EXAMPLES_USERTASKWRITE_HPP_