FairRoot/PandaRoot
PndMasterRecoTask.cxx
Go to the documentation of this file.
1 // -------------------------------------------------------------------------
2 // ----- PndMasterRecoTask source file -----
3 // ----- Created 31/01/16 by S. Spataro -----
4 // ----- Wrapper for recotizing tasks -----
5 // -------------------------------------------------------------------------
6 
7 
8 #include <PndIdealTrackFinder.h>
9 #include "PndMasterRecoTask.h"
10 #include "PndMasterTask.h"
11 
12 #include "PndTrkTracking2.h"
13 #include "PndSttMvdGemTracking.h"
14 #include "PndRecoKalmanTask.h"
15 #include "PndRecoKalmanTask2.h"
16 #include "PndRecoMultiKalmanTask.h"
18 
20 //#include "PndFtsTrackerIdeal.h"
21 #include "PndTrackSmearTask.h"
22 
23 #include <array>
24 
30 // ----- Default constructor -------------------------------------------
32  PndMasterTask("Master Reconstruction Task"), fOptions(options)
33 {
34 
35  std::array<TString,5> hypoName= {"Electron","Muon","Pion","Kaon","Proton"};
36  // ----- MVD + STT Pattern Recognition -----------------------------------
37  // use the constructor with input :
38  // printout flag (int) , plotting flag (bool), MC comparison flag (bool), SciTil.
39  PndTrkTracking2* tracking = NULL;
40  fBranchTasks.push_back(tracking = new PndTrkTracking2(0, false, false, true));
41  tracking->SetInputBranchName("STTHit", "MVDHitsPixel", "MVDHitsStrip");
42  // tracking->SetInputBranchName("STTHitMix","MVDHitsPixelMix","MVDHitsStripMix");
43  // don't do the Pattern Recognition second part, starting from the Mvd;
44  tracking->NoMvdAloneTracking();
45  // do Cleanup only when there is Mixing;
46  // tracking->Cleanup();
47  fFixedPersistency[tracking] = kFALSE;
48 
49  // ----- MVD + STT + GEM Pattern Recognition --------------
50  if ((!fOptions.Contains("nogem")) && (!fOptions.Contains("gem0"))) {
52  fBranchTasks.push_back(SttMvdGemTracking = new PndSttMvdGemTracking(0));
54  }
55 
56  // ----- Barrel Kalman Task ----------------------------
57  if (!fOptions.Contains("multikalman"))
58  { //no multikalman
60  fBranchTasks.push_back(recoKalman = new PndRecoKalmanTask());
61  if ((!fOptions.Contains("nogem")) && (!fOptions.Contains("gem0"))) {
62  recoKalman->SetTrackInBranchName("SttMvdGemTrack");
63  // recoKalman->SetTrackInIDBranchName("SttMvdGemTrackID");
64  recoKalman->SetTrackOutBranchName("SttMvdGemGenTrack"); // PID appendix follows;
65  } else {
66  recoKalman->SetTrackInBranchName("SttMvdTrack");
67  // recoKalman->SetTrackInIDBranchName("SttMvdTrackID");
68  recoKalman->SetTrackOutBranchName("SttMvdGenTrack"); // PID appendix follows
69  }
70  recoKalman->SetBusyCut(50); // CHECK to be tuned
71  //recoKalman->SetIdealHyp(kTRUE);
72  //recoKalman->SetNumIterations(3);
73  recoKalman->SetTrackRep(0); // 0 Geane (default), 1 RK
74  //recoKalman->SetPropagateToIP(kFALSE);
75  }
76  else //yes, multikalman
77  {
79  fBranchTasks.push_back(recoKalman = new PndRecoMultiKalmanTask());
80  recoKalman->SetFitHypotheses(fOptions); //Walter added
81  if ((!fOptions.Contains("nogem")) && (!fOptions.Contains("gem0"))) {
82  //if ((!fOptions.Contains("day1")) || (fOptions.Contains("gem"))) {
83  recoKalman->SetTrackInBranchName("SttMvdGemTrack");
84  // recoKalman->SetTrackInIDBranchName("SttMvdGemTrackID");
85  recoKalman->SetTrackOutBranchName("SttMvdGemGenTrack"); // PID appendix follows
86  } else {
87  recoKalman->SetTrackInBranchName("SttMvdTrack");
88  // recoKalman->SetTrackInIDBranchName("SttMvdTrackID");
89  recoKalman->SetTrackOutBranchName("SttMvdGenTrack"); // PID appendix follows
90  }
91  recoKalman->SetBusyCut(50); // CHECK to be tuned
92  //recoKalman->SetIdealHyp(kTRUE);
93  //recoKalman->SetNumIterations(3);
94  recoKalman->SetTrackRep(0); // 0 Geane (default), 1 RK
95  //recoKalman->SetPropagateToIP(kFALSE);
96  }
97 
98  if (fOptions.Contains("filtered")) {
99  PndMissingPzCleanerTask* cleaner = NULL;
100  fBranchTasks.push_back(cleaner = new PndMissingPzCleanerTask());
101  if ((!fOptions.Contains("nogem")) && (!fOptions.Contains("gem0"))) {
102  cleaner->SetInputTrackBranch("SttMvdGemGenTrack"); // _filtered appendix follows
103  } else {
104  cleaner->SetInputTrackBranch("SttMvdGenTrack");// _filtered appendix follows
105  }
106  cleaner->SetRemoveTrack(kTRUE);
107  }
108 
109 
110  // ----- FTS Ideal Tracking ----------------------------
111  TString ftstrkname="FtsIdealTrack", ftstrkgenname="FtsIdealGenTrack";
112  if(fOptions.Contains("ftsca")) {
113  ftstrkname="FtsCaTrack";
114  ftstrkgenname="FtsCaGenTrack";
115  }
117  fBranchTasks.push_back(trackFts = new PndIdealTrackFinder());
118  trackFts->SetTrackSelector("FtsTrackFunctor");
119  trackFts->AddBranchName("FTSHit");
120  trackFts->AddBranchName("MVDHitsPixel");
121  trackFts->AddBranchName("MVDHitsStrip");
122  trackFts->SetRelativeMomentumSmearing(0.05);
123  trackFts->SetVertexSmearing(0.05, 0.05, 0.05);
124  trackFts->SetTrackingEfficiency(1.);
125  trackFts->SetOutputBranchName("FtsIdealTrack");
126  fFixedPersistency[trackFts] = kFALSE;
127 
128  // ----- Forward Kalman Task ---------------------------
129  if (!fOptions.Contains("multikalman")) { // no multikalman
130  if(fOptions.Contains("genfit2")) {
132  fBranchTasks.push_back(recoKalman = new PndRecoKalmanTask2());
133  recoKalman->SetTrackInBranchName(ftstrkname);
134  recoKalman->SetTrackOutBranchName(ftstrkgenname);
135  } else {
137  fBranchTasks.push_back(recoKalman = new PndRecoKalmanTask());
138 
139  recoKalman->SetTrackInBranchName(ftstrkname);
140  recoKalman->SetTrackOutBranchName(ftstrkgenname);
141  }
142  } else { //yes, multikalman!
143  if(fOptions.Contains("genfit2")) {
145  fBranchTasks.push_back(recoKalman = new PndRecoMultiKalmanTask2());
146  recoKalman->SetTrackInBranchName(ftstrkname);
147  recoKalman->SetTrackOutBranchName(ftstrkgenname);
148  } else {
150  fBranchTasks.push_back(recoKalman = new PndRecoMultiKalmanTask());
151  recoKalman->SetTrackInBranchName(ftstrkname);
152  recoKalman->SetTrackOutBranchName(ftstrkgenname);
153  }
154  }
155 
156  // --- Online Emulator smearing
157  if(fOptions.Contains("fakeonline"))
158  {
159  PndTrackSmearTask* smearer=NULL;
160  fBranchTasks.push_back(smearer=new PndTrackSmearTask());
161  TString barrelbranchname="SttMvdGemGenTrack";
162  TString ftsbranchname="FtsIdealGenTrack";
163  if (fOptions.Contains("nogem")||fOptions.Contains("gem0")) {
164  barrelbranchname="SttMvdGenTrack";
165  }
166 
167  if(fOptions.Contains("filtered")) barrelbranchname+="_filtered";
168 
169  if(fOptions.Contains("multikalman")) { //yes, multikalman
170  for(int k=0; k<5; ++k) {
171  smearer->AddInputTrackBranch(Form("%s%s",barrelbranchname.Data(),hypoName[k].Data()));
172  smearer->AddInputTrackBranch(Form("%s%s",ftsbranchname.Data(),hypoName[k].Data()));
173  }
174  } else { // no multikalman
175  smearer->AddInputTrackBranch(barrelbranchname);
176  smearer->AddInputTrackBranch(ftsbranchname);
177  }
178  }
179 
180  std::for_each(fBranchTasks.begin(), fBranchTasks.end(),
181  [this](const FairTask* task) {
182  Add((TTask*)task);
183  });
184 
185  SetVerbose(0);
186 }
187 // -------------------------------------------------------------------------
188 
189 // ----- Destructor ----------------------------------------------------
191 }
192 // -------------------------------------------------------------------------
193 
mychain Add("run.root")
void SetVerbose(Int_t iVerbose=1)
Set the Verbosity to all the tasks.
void SetTrackingEfficiency(Double_t eff=1.)
void SetTrackInBranchName(const TString &name)
Ideal track finder for all types of tracking detectors The PndIdealTrackFinder combines all hits in ...
virtual void SetOutputBranchName(TString name)
TString fOptions
Options parsed to the reconstruction.
void SetTrackOutBranchName(const TString &name)
Abstract class for all the master task list classes.
Definition: PndMasterTask.h:21
void SetTrackOutBranchName(const TString &name)
std::vector< PndPersistencyTask * > fBranchTasks
Definition: PndMasterTask.h:80
void SetTrackOutBranchName(const TString &name)
void SetTrackSelector(TString selector)
void AddInputTrackBranch(const TString &name)
virtual ~PndMasterRecoTask()
Destructor.
void SetTrackOutBranchName(const TString &name)
PndTrkTracking * tracking
PndFtsTrackerIdeal * trackFts
void SetInputBranchName(const char *string1, const char *string2, const char *string3)
void SetTrackRep(Short_t num)
void SetTrackInBranchName(const TString &name)
void SetVertexSmearing(Double_t sigmax=-1., Double_t sigmay=-1., Double_t sigmaz=-1.)
std::map< PndPersistencyTask *, bool > fFixedPersistency
Definition: PndMasterTask.h:82
void NoMvdAloneTracking()
void SetBusyCut(Int_t b)
void SetTrackInBranchName(const TString &name)
void SetTrackInBranchName(const TString &name)
PndSttMvdGemTracking * SttMvdGemTracking
PndMasterRecoTask(TString fOptions="")
Default constructor with options This string can be: &quot;&quot; -&gt; default settings full setup &quot;day1&quot; -&gt; Set...
void SetInputTrackBranch(const TString &name)
void SetRemoveTrack(const Bool_t &remove)
void SetFitHypotheses(const TString &name)
ClassImp(PndAnaContFact)
PndRecoKalmanTask * recoKalman
The default reconstruction tasks.
virtual void AddBranchName(TString name)
Search for tracks only in given branches. If no BranchName is given all tracking detectors are taken...
void SetRelativeMomentumSmearing(Double_t dpop=-1.)