FairRoot/PandaRoot
QA/lmd/reco_LMD.C
Go to the documentation of this file.
1 // reco macro for lmd
2 // hit reco
3 // hit merge
4 // track search with Trk-Following
5 // track fit with "broken-lines" method
6 // track filter (erase double track-candidates, aply X&Y cuts)
7 // back-propagation with GEANE
8 // created 23/07/2015 by A.Karavdina
9 #include "../auxi.C"
10 
11 int reco_LMD(const int nEvents=1000, const int startEvent=0, TString storePath="", const int verboseLevel=0, const double mom=1.5)
12 {
13  // parameters ================================================================
14  bool misalign=false; //no misalignment is expected: important for hit reco and track search
15  bool missPl=true; // switch on "missing plane" in track reconstruction
16  bool mergedHits=true;
17  int nplanes = 4;
18  int nsensors = 100;
19  double radlen=0.31;
20  TString inHits = "LMDHitsMerged";//"LMDHitsPixel";
21  TString inClusters = "LMDPixelClusterCand";
22  TString inDigis = "LMDPixelDigis";
23  TString inTrks="LMDTrackCand";
24  //=========================================================================
25 
26 
27  // ========================================================================
28  // Input file (MC events)
29  TString MCFile = storePath+"Lumi_MC_";
30  MCFile += startEvent;
31  MCFile += ".root";
32  TString DigiFile = storePath+"Lumi_digi_";
33  DigiFile += startEvent;
34  DigiFile += ".root";
35  // Parameter file
36  TString parFile = storePath+"Lumi_Params_";
37  parFile += startEvent;
38  parFile += ".root";
39 
40  // Output file
41  TString outFile = storePath + "Lumi_Geane_";
42  outFile += startEvent;
43  outFile += ".root";
44 
45 
46  std::cout << "MCFile : " << MCFile.Data()<< std::endl;
47  std::cout << "DigiFile: " << DigiFile.Data()<< std::endl;
48  std::cout << "RecoFile: " << outFile.Data()<< std::endl;
49 
50  // ----- Timer --------------------------------------------------------
51  TStopwatch timer;
52  timer.Start();
53  // ------------------------------------------------------------------------
54 
55 
56 
57  // ----- Reconstruction run -------------------------------------------
58  FairRunAna *fRun= new FairRunAna();
59  fRun->SetInputFile(MCFile);
60  fRun->AddFriend(DigiFile);
61  // fRun->SetInputFile(DigiFile);
62  // fRun->AddFriend(MCFile);
63  fRun->SetOutputFile(outFile);
64  // ------------------------------------------------------------------------
65 
66 
67 
68  // ----- Parameter database --------------------------------------------
69  FairRuntimeDb* rtdb = fRun->GetRuntimeDb();
70  FairParRootFileIo* parInput1 = new FairParRootFileIo(kTRUE);
71  parInput1->open(parFile.Data(),"UPDATE");
72  rtdb->setFirstInput(parInput1);
73 
74  // alignment parameter file
75  //TString alignparFile = "LMD_alignment/lumi.align_pixel_ideal.par";//perfect
76 TString alignparFile = TString(gSystem->Getenv("VMCWORKDIR"))+"/macro/params/lumi.align_pixel_ideal.par";//perfect
77 
78  FairParAsciiFileIo* parInput2 = new FairParAsciiFileIo();
79  parInput2->open(alignparFile.Data(),"in");
80  rtdb->setSecondInput(parInput2);
81 
82  // ------------------------------------------------------------------------
83 
84  // ----- LMD hit reco --------------------------------------------
85 
87  lmdhitrec->SetVerbose(verboseLevel);
88  // lmdhitrec->SetMSflag(useMSerr);//switch on\off error calculation due to multiple scaterring
89  lmdhitrec->SetAlignFlag(misalign);
90  if(misalign) lmdhitrec->SetMtxPath(storePath);
91  fRun->AddTask(lmdhitrec);
92 
93  PndLmdHitMergeTask* lmdhitmg = new PndLmdHitMergeTask();
94  lmdhitmg->SetVerbose(verboseLevel);
95  lmdhitmg->SetAlignFlag(misalign);
96  if(misalign) lmdhitmg->SetMtxPath(storePath);
97  fRun->AddTask(lmdhitmg);
98 
99  // ===== End of HitProducers =======
100 
101  // ----- LMD trk reco -------------------------------------------------
102 
103  // ====== Track Finder ======
104  PndLmdTrackFinderTask* lmdfinder = new PndLmdTrackFinderTask(missPl,inHits,inClusters,inDigis, nsensors);
105  lmdfinder->SetInaccuracy(1e-2);
106  lmdfinder->SetSensPixelFlag(true);
107  lmdfinder->SetVerbose(verboseLevel);
108  fRun->AddTask(lmdfinder);
109  // =========================================================================
110 
111  // ====== Track Fitter ======
112  PndLmdLinFitTask* lmdfit = new PndLmdLinFitTask(inTrks,inHits);
113  lmdfit->SetRadLen(1e-2*radlen);
114  lmdfit->SetVerbose(verboseLevel);
115  fRun->AddTask(lmdfit);
116  // =========================================================================
117 
118  //===== Track Fillter ======
120  lmdfilt->SetSkipKinFilt(false);
121  lmdfilt->SetXThFilt(true);
122  lmdfilt->SetDX(0.);
123  lmdfilt->SetYPhFilt(true);
124  lmdfilt->SetDY(0.);
125  lmdfilt->SetVerbose(verboseLevel);
126  fRun->AddTask(lmdfilt);
127  // =========================================================================
128 
129  // ====== Back-Propagating ======
130  FairGeane *Geane = new FairGeane();
131  fRun->AddTask(Geane);
132  TVector3 IP(0., 0., 0.);
133  PndLmdGeaneTask* lmdgeane = new PndLmdGeaneTask(mom, IP);
134  lmdgeane->SetVerbose(verboseLevel);
135  fRun->AddTask(lmdgeane);
136  // =========================================================================
137 
138  rtdb->setOutput(parInput1);
139  rtdb->print();
140 
141  // =========================================================================
142 
143  // ----- Intialise and run --------------------------------------------
144  fRun->Init();
145 
146  fRun->Run(0,nEvents);
147  // ------------------------------------------------------------------------
148 
149  rtdb->saveOutput();
150  rtdb->print();
151  // ----- Finish -------------------------------------------------------
152  timer.Stop();
153  Double_t rtime = timer.RealTime();
154  Double_t ctime = timer.CpuTime();
155  cout << endl << endl;
156  cout << "Macro finished succesfully." << endl;
157  cout << "Output file is " << outFile << endl;
158  cout << "Parameter file is " << parFile << endl;
159  cout << "Real time " << rtime << " s, CPU time " << ctime << " s" << endl;
160  cout << endl;
161  // ------------------------------------------------------------------------
162  cout << " Test passed" << endl;
163  cout << " All ok " << endl;
164  CloseGeoManager();
165  return 0;
166 
167 }
const int nplanes(120)
int verboseLevel
Definition: Lars/runMvdSim.C:7
TString outFile
Definition: hit_dirc.C:17
virtual InitStatus Init()
Int_t startEvent
TString storePath
Double_t mom
Definition: plot_dirc.C:14
void SetRadLen(double x)
void CloseGeoManager()
Definition: QA/auxi.C:11
FairGeane * Geane
FairRunAna * fRun
Definition: hit_dirc.C:58
TString DigiFile
void SetInaccuracy(Double_t accu)
Double_t
TString parFile
Definition: hit_dirc.C:14
Int_t nEvents
Definition: hit_dirc.C:11
TStopwatch timer
Definition: hit_dirc.C:51
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
FairParAsciiFileIo * parInput2
Definition: conMvdDigi.C:26
FairParRootFileIo * parInput1
Definition: hit_dirc.C:67
Double_t ctime
Definition: hit_dirc.C:114
void SetVerbose(Int_t verbose)
TString MCFile
PndLmdLinFitTask * lmdfit
Double_t rtime
Definition: hit_dirc.C:113
int reco_LMD(const int nEvents=1000, const int startEvent=0, TString storePath="", const int verboseLevel=0, const double mom=1.5)