FairRoot/PandaRoot
PndMasterMultiPidTask.cxx
Go to the documentation of this file.
1 // --------------------------------------------------------------------------------
2 // ----- PndMasterMultiPidTask source file -----
3 // ----- Created 07/05/18 by W. Ikegami Andersson -----
4 // ----- Wrapper for pid tasks when running multikalman -----
5 // --------------------------------------------------------------------------------
6 
8 #include "PndMasterTask.h"
9 
10 #include "PndPidCorrelator.h"
11 #include "PndPidBremCorrector.h"
12 #include "PndMcCloner.h"
13 #include "PndMcCloner2.h"
24 
25 #include <array>
31 // ----- Default constructor -------------------------------------------
33  PndMasterTask("Master Pid Task"), fOptions(options)
34 {
35  std::array<Int_t,5> hypoPdg= {11,13,211,321,2212};
36  std::array<TString,5> hypoName= {"Electron","Muon","Pion","Kaon","Proton"};
37 
38  unsigned int nfits = 0;
39  if (fOptions.Contains("electron")) {
40  nfits++;
41  fHypoFlag[0] = true;
42  }
43  if (fOptions.Contains("muon")) {
44  nfits++;
45  fHypoFlag[1] = true;
46  }
47  if (fOptions.Contains("pion")) {
48  nfits++;
49  fHypoFlag[2] = true;
50  }
51  if (fOptions.Contains("kaon")) {
52  nfits++;
53  fHypoFlag[3] = true;
54  }
55  if (fOptions.Contains("proton")) {
56  nfits++;
57  fHypoFlag[4] = true;
58  }
59  if (nfits == 0) {
60  std::cout<<" -I- PndMasterMultiPidTask: No hypotheses given, running pid with all 5 hypothesis" << std::endl;
61  fHypoFlag[0] = true;
62  fHypoFlag[1] = true;
63  fHypoFlag[2] = true;
64  fHypoFlag[3] = true;
65  fHypoFlag[4] = true;
66  }
67 
68  for (int iHyp=0; iHyp<5; iHyp++)
69  {
70  fPidTasks[iHyp] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
71 
72  // ----- Correlation ---------------------------------
73  PndPidCorrelator* correlator = new PndPidCorrelator();
74  correlator->SetPidHyp(hypoPdg[iHyp]);
75  correlator->SetOutputBranch(hypoName[iHyp]); // suffixes for branches
76  //correlator->SetFlagCut(kFALSE);
77 
78  this->Add(correlator); // Adding to task list
79  fPidTasks[iHyp].kPndPidCorrelator = GetListOfTasks()->GetSize()-1;
80 
81  TString brlbranchname="SttMvdGemGenTrack"+hypoName[iHyp];
82  if (fOptions.Contains("nogem")||fOptions.Contains("gem0")) {
83  brlbranchname="SttMvdGenTrack"+hypoName[iHyp];
84  }
85  if (fOptions.Contains("filtered")) brlbranchname+="_filtered";
86  if (fOptions.Contains("fakeonline")) brlbranchname+="_fakeonline";
87  //if ( (!fOptions.Contains("day1")) || (fOptions.Contains("gem")) )
88  //{
89  //} else
90 
91  // TODO: Go over day1 and PID!
92  correlator->SetBarrelTrackBranch(brlbranchname);
93 
94  TString fwdbranchname="FtsIdealGenTrack"+hypoName[iHyp];
95  if (fOptions.Contains("fakeonline")) fwdbranchname+="_fakeonline";
96  correlator->SetForwardTrackBranch(fwdbranchname);
97 
98  if (fOptions.Contains("piddebug")) correlator->SetDebugMode(kTRUE);
99  if (fOptions.Contains("pidfast")) correlator->SetFast(kTRUE);
100  if (fOptions.Contains("pidnoswim")) correlator->SetBackPropagate(kFALSE);
101 
102  // ----- Bremsstrahlung Correction ----------------------
103  PndPidBremCorrector *PidBrem = new PndPidBremCorrector();
104  PidBrem->SetOutputBranch(hypoName[iHyp]);
105  this->Add(PidBrem); // 2
106  fPidTasks[iHyp].kPndPidBremCorrector = GetListOfTasks()->GetSize()-1;
107 
108  // // ----- MC Cloner ------------------------------------
109  // PndMcCloner *clone = new PndMcCloner();
110  // clone->SetOutputBranch(hypoName[iHyp]);
111  // this->Add(clone); // 3
112  // fPidTasks[iHyp].kPndMcCloner = GetListOfTasks()->GetSize()-1;
113  // // Option to clean the MCTrack TClonesArray from particles which were not interacting with sensitive detectors
114  // clone->SetCleanMc();
115 
116  // // ----- Classifiers ----------------------------------
117  // PndPidIdealAssociatorTask *PidIdeal = new PndPidIdealAssociatorTask();
118  // PidIdeal->SetOutputBranch(hypoName[iHyp]);
119  // this->Add(PidIdeal); // 4
120  // fPidTasks[iHyp].kPndPidIdealAssociatorTask = GetListOfTasks()->GetSize()-1;
121 
123  PidMvd->SetOutputBranch(hypoName[iHyp]);
124  this->Add(PidMvd); // 5
125  fPidTasks[iHyp].kPndPidMvdAssociatorTask = GetListOfTasks()->GetSize()-1;
126 
128  PidMdt->SetOutputBranch(hypoName[iHyp]);
129  this->Add(PidMdt); // 6
130  fPidTasks[iHyp].kPndPidMdtHCAssociatorTask = GetListOfTasks()->GetSize()-1;
131 
133  PidDrc->SetOutputBranch(hypoName[iHyp]);
134  this->Add(PidDrc); // 7
135  fPidTasks[iHyp].kPndPidDrcAssociatorTask = GetListOfTasks()->GetSize()-1;
136 
137  if ( !fOptions.Contains("day1") && !fOptions.Contains("phase1") )
138  {
140  PidDisc->SetOutputBranch(hypoName[iHyp]);
141  this->Add(PidDisc); // 8
142  fPidTasks[iHyp].kPndPidDiscAssociatorTask = GetListOfTasks()->GetSize()-1;
143  }
144 
146  PidStt->SetOutputBranch(hypoName[iHyp]);
147  this->Add(PidStt); // 9
148  fPidTasks[iHyp].kPndPidSttAssociatorTask = GetListOfTasks()->GetSize()-1;
149 
151  PidEmcBayes->SetOutputBranch(hypoName[iHyp]);
152  this->Add(PidEmcBayes); // 10
153  fPidTasks[iHyp].kPndPidEmcBayesAssociatorTask = GetListOfTasks()->GetSize()-1;
154 
156  PidSciT->SetOutputBranch(hypoName[iHyp]);
157  this->Add(PidSciT); // 11
158  fPidTasks[iHyp].kPndPidSciTAssociatorTask = GetListOfTasks()->GetSize()-1;
159 
161  PidFtof->SetOutputBranch(hypoName[iHyp]);
162  this->Add(PidFtof); // 12
163  fPidTasks[iHyp].kPndPidFtofAssociatorTask = GetListOfTasks()->GetSize()-1;
164 
165  if ( !fOptions.Contains("day1") && !fOptions.Contains("phase1") )
166  {
168  PidRich->SetOutputBranch(hypoName[iHyp]);
169  this->Add(PidRich); // 13
170  fPidTasks[iHyp].kPndPidRichAssociatorTask = GetListOfTasks()->GetSize()-1;
171  }
172  }
173 
174  // ----- MC Cloner ------------------------------------
175  //cloner that goes through all candidates. Run only once, and after all correlators
176  PndMcCloner2 *clone = new PndMcCloner2();
177  this->Add(clone); // 3
178  // Option to clean the MCTrack TClonesArray from particles which were not interacting with sensitive detectors
179  clone->SetCleanMc();
180 
181 
182  for (int iHyp=0; iHyp<5; iHyp++)
183  {
185  PidIdeal->SetOutputBranch(hypoName[iHyp]);
186  this->Add(PidIdeal); // 4
187  fPidTasks[iHyp].kPndPidIdealAssociatorTask = GetListOfTasks()->GetSize()-1;
188 
189  }
190 
191  SetVerbose(0);
192 }
193 // -------------------------------------------------------------------------
194 
197 {
198  if (!pers) LOG(INFO) << "It makes no sense to have pid persistency switched OFF!" << FairLogger::endl;
199  if (!pers) LOG(INFO) << "Or, if you prefer... this functionality has not been implemented yet" << FairLogger::endl;
200 
201  return;
202 }
203 
204 // ----- Destructor ----------------------------------------------------
206 {
207 }
208 // -------------------------------------------------------------------------
209 
void SetOutputBranch(TString branch)
void SetOutputBranch(TString branch)
mychain Add("run.root")
The default pid tasks.
void SetOutputBranch(TString branch)
void SetVerbose(Int_t iVerbose=1)
Set the Verbosity to all the tasks.
void SetBarrelTrackBranch(TString branch)
void SetOutputBranch(TString branch)
PndMasterMultiPidTask(TString options="")
Default constructor with options This string can be: &quot;&quot; -&gt; default settings full setup &quot;day1&quot; -&gt; Set...
void SetPidHyp(Int_t pid)
void SetOutputBranch(TString branch)
void SetOutputBranch(TString branch)
Abstract class for all the master task list classes.
Definition: PndMasterTask.h:21
virtual void SetPersistency(Bool_t pers=kTRUE)
Set the persistency of all the tasks.
void SetDebugMode(Bool_t debug)
std::array< pidTaskList, 5 > fPidTasks
void SetOutputBranch(TString branch)
TString fOptions
Options parsed to the pid.
void SetCleanMc(Bool_t opt=kTRUE)
Definition: PndMcCloner2.h:33
void SetBackPropagate(Bool_t opt=kTRUE)
ClassImp(PndAnaContFact)
void SetOutputBranch(TString branch)
void SetOutputBranch(TString branch)
void SetForwardTrackBranch(TString branch)
virtual ~PndMasterMultiPidTask()
Destructor.
void SetFast(Bool_t fast)
std::array< Bool_t, 5 > fHypoFlag
void SetOutputBranch(TString branch)
void SetOutputBranch(TString branch)