FairRoot/PandaRoot
eta_c/run_reco_tpc_evt.C
Go to the documentation of this file.
1 {
2  // ========================================================================
3  // Verbosity level (0=quiet, 1=event level, 2=track level, 3=debug)
4  Int_t iVerbose = 0;
5 
6  // Input file
7  TString inDigiFile = "evt_digi_tpc.root";
8  TString inSimFile = "evt_points_tpc.root";
9 
10  // Parameter file
11  TString parFile = "evt_params_tpc.root";
12 
13  // Output file
14  TString outFile = "evt_reco_tpc.root";
15 
16  // Number of events to process
17  Int_t nEvents = 0;
18 
19  // ---- Load libraries -------------------------------------------------
20  gROOT->LoadMacro("$VMCWORKDIR/gconfig/rootlogon.C");
21  rootlogon();
22  TString sysFile = gSystem->Getenv("VMCWORKDIR");
23  // ------------------------------------------------------------------------
24  // In general, the following parts need not be touched
25  // ========================================================================
26 
27  // ----- Timer --------------------------------------------------------
28  TStopwatch timer;
29  timer.Start();
30  // ------------------------------------------------------------------------
31 
32  // ----- Digitization run -------------------------------------------
33  FairRunAna *fRun= new FairRunAna();
34  fRun->SetInputFile(inDigiFile);
35  fRun->AddFriend(inSimFile);
36  fRun->SetOutputFile(outFile);
37  FairGeane *Geane = new FairGeane();
38  fRun->AddTask(Geane);
39  // ------------------------------------------------------------------------
40 
41  // ----- Parameter database --------------------------------------------
42  TString allDigiFile = sysFile+"/macro/params/all.par";
43 
44  FairRuntimeDb* rtdb = fRun->GetRuntimeDb();
45  FairParRootFileIo* parInput1 = new FairParRootFileIo();
46  parInput1->open(parFile.Data());
47 
48  FairParAsciiFileIo* parIo1 = new FairParAsciiFileIo();
49  parIo1->open(allDigiFile.Data(),"in");
50 
51  rtdb->setFirstInput(parInput1);
52  rtdb->setSecondInput(parIo1);
54  // ------------------------------------------------------------------------
55 
56  // ------- RECO procedure ------------------------------------------------
57 
58  //correct for unfortunate shift in TPC digi
59  //PndTpcRoughAlignmentTask* align = new PndTpcRoughAlignmentTask();
60  //align->SetShift(TVector3(0.,0.,-3.71357e-01)); //old PSA
61  //align->SetShift(TVector3(0.,0.,5.6E-2)); //new PSA
62  //fRun->AddTask(align);
63 
64  //find PndTpcRiemannTracks in the TPC alone
65  PndTpcRiemannTrackingTask* tpcSPR = new PndTpcRiemannTrackingTask();
66  //tpcSPR->SetPersistence();
67  //tpcSPR->SetVerbose(1);
68  fRun->AddTask(tpcSPR);
69 
70  //build GFTracks from PndTpcRiemannTracks
71  PndTpcTrackInitTask* trackInit=new PndTpcTrackInitTask();
72  trackInit->SetPersistence();
73  //trackInit->SetVerbose(1);
74  trackInit->SetMCPid(); // use ideal particle identification
75  //trackInit->SetPDG(211);
76  //trackInit->useGeane(); // uses RKTrackrep and GeaneTrackrep
77  trackInit->SetSmoothing(true);
78  fRun->AddTask(trackInit);
79 
80  KalmanTask* kalman =new KalmanTask();
81  kalman->SetPersistence();
82  kalman->SetNumIterations(3); // number of fitting iterations (back and forth)
83  fRun->AddTask(kalman); // creates TrackPostFit branch
84 
85  //correlate fitted track with MVD pixels and strips
86  PndTpcMVDCorrelatorTask* corr = new PndTpcMVDCorrelatorTask();
87  corr->SetMatchDistance(0.18); //cm
88  corr->SetMinMVDHits(1);
89  corr->SetOutTrackBranchName("TrackPreFitMVD");
90  corr->SetPersistence(true);
91  fRun->AddTask(corr);
92 
93 
94  //fit after MVD corr
95  KalmanTask* kalman2 =new KalmanTask();
96  kalman2->SetPersistence();
97  kalman2->SetNumIterations(3); // number of fitting iterations (back and forth)
98  kalman2->SetTrackBranchName("TrackPreFitMVD");
99  kalman2->SetOutBranchName("TrackPostFitMVD");
100  fRun->AddTask(kalman2);
101 
102  PndTpcGEMCorrelatorTask* corrG = new PndTpcGEMCorrelatorTask();
103  corrG->SetMatchDistance(0.5); //cm
104  corrG->SetMinGEMHits(2);
105  corrG->SetTrackBranchName("TrackPostFitMVD");
106  corrG->SetOutTrackBranchName("TrackPreFitGEM");
107  corrG->SetPersistence(true);
108  fRun->AddTask(corrG);
109 
110  //final fit
111  KalmanTask* kalman3 =new KalmanTask();
112  kalman3->SetPersistence();
113  kalman3->SetNumIterations(3); // number of fitting iterations (back and forth)
114  kalman3->SetTrackBranchName("TrackPreFitGEM");
115  kalman3->SetOutBranchName("TrackPostFitComplete");
116  fRun->AddTask(kalman3);
117 
118  PndGFTrackToPndTrackConvertorTask* converter =new PndGFTrackToPndTrackConvertorTask();
119  converter->SetTrackInBranchName("TrackPostFitComplete");
120  converter->SetTrackOutBranchName("PndTrackPostFitComplete");
121  fRun->AddTask(converter);
122 
123  PndMCTrackAssociator* trackMC = new PndMCTrackAssociator();
124  trackMC->SetTrackInBranchName("PndTrackPostFitComplete");
125  trackMC->SetTrackOutBranchName("TrackPostFitCompleteID");
126  fRun->AddTask(trackMC);
127 
128  // ----- Intialise and run --------------------------------------------
130  fRun->Init();
131  fRun->Run(0, nEvents);
132 
133  rtdb->saveOutput();
134  rtdb->print();
135 
136  corr->WriteHistograms("MVDRes.root");
137  corrG->WriteHistograms("GEMRes.root");
138 
139  // ------------------------------------------------------------------------
140 
141  // ----- Finish -------------------------------------------------------
142 
143  timer.Stop();
144  Double_t rtime = timer.RealTime();
145  Double_t ctime = timer.CpuTime();
146  cout << endl << endl;
147  cout << "Macro finished succesfully." << endl;
148  cout << "Output file is " << outFile << endl;
149  cout << "Parameter file is " << parFile << endl;
150  cout << "Real time " << rtime << " s, CPU time " << ctime << " s" << endl;
151  cout << endl;
152  // ------------------------------------------------------------------------
153 
154 
155 }
PndPidCorrelator * corr
TString outFile
Definition: hit_dirc.C:17
KalmanTask * kalman
PndGFTrackToPndTrackConvertorTask * converter
KalmanTask * kalman2
TString allDigiFile
Definition: hit_muo.C:36
FairGeane * Geane
FairRunAna * fRun
Definition: hit_dirc.C:58
Class to access the naming information of the MVD.
PndTpcTrackInitTask * trackInit
PndTpcGEMCorrelatorTask * corrG
TString sysFile
TString inSimFile
Double_t
TString parFile
Definition: hit_dirc.C:14
Int_t nEvents
Definition: hit_dirc.C:11
TStopwatch timer
Definition: hit_dirc.C:51
static void Init(Int_t MapVersion)
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
PndTpcRiemannTrackingTask * tpcSPR
static PndGeoHandling * Instance()
TString inDigiFile
FairParRootFileIo * parInput1
Definition: hit_dirc.C:67
PndMCTrackAssociator * trackMC
Double_t ctime
Definition: hit_dirc.C:114
FairParAsciiFileIo * parIo1
Definition: bump_emc.C:53
KalmanTask * kalman3
PndGeoHandling * geoH
Int_t iVerbose
Double_t rtime
Definition: hit_dirc.C:113