FairRoot/PandaRoot
runStreamDisplay.C
Go to the documentation of this file.
1 #include "TStopwatch.h"
2 #include "TTree.h"
3 #include "TFile.h"
4 #include "TClonesArray.h"
5 #include "basefunctions.hxx"
6 #include "basefunctions_skew.hxx"
7 //#include "FairRunAna.h"
8 //#include "FairParRootFileIo.h"
9 //#include "FairRuntimeDb.h"
10 //#include "PndSttTrackFinderReal.h"
11 //#include "PndMCTrack.h"
12 //#include "PndSttHit.h"
13 //#include "PndTrack.h"
14 
15 // xy-projection of time-based MVD and STT Hits
16 // m.mertens@fz-juelich.de
17 
19  gROOT->Reset();
20  // Verbosity level (0=quiet, 1=event level, 2=track level, 3=debug)
21  Int_t iVerbose = 0;
22 
23  TStopwatch timer;
24  timer.Start();
25  gROOT->LoadMacro("$VMCWORKDIR/gconfig/rootlogon.C");
26  rootlogon();
27  //gSystem->Load("libSttMvdTracking");
28 
29  TString simFileName = "Sim_Dpm_500.root";
30  TString parFileName = "Sim_Dpm_500_params.root";
31  TString digiFileName = "Sim_Dpm_500_digi.root";
32  TString recoFileName = "Sim_Dpm_500_reco.root";
33  TString outFileName = "Sim_Dpm_500_streamdisplay.root";
34 
35  TFile filedigi(digiFileName.Data());
36  TFile filereco(recoFileName.Data());
37  TFile filerecopixel(recoFileName.Data());
38 
39  TTree *treedigi = (TTree*) filedigi.Get("pndsim");
40  TClonesArray *sttsortedhits = new TClonesArray("PndSttHit");
41  treedigi->SetBranchAddress("STTSortedHits",&sttsortedhits);
42 
43  TTree *mvdstriprecotree = (TTree*) filereco.Get("pndsim");
44  TClonesArray *mvdstripreco = new TClonesArray("PndSdsHit");
45  mvdstriprecotree->SetBranchAddress("MVDHitsStrip",&mvdstripreco);
46 
47  TTree *mvdpixelrecotree = (TTree*) filereco.Get("pndsim");
48  TClonesArray *mvdpixelreco = new TClonesArray("PndSdsHit");
49  mvdpixelrecotree->SetBranchAddress("MVDHitsPixel",&mvdpixelreco);
50 
51  FairRunAna *fRun= new FairRunAna();
52  fRun->SetInputFile(simFileName.Data());
53  //fRun->AddFriend(recoFile.Data());
54  fRun->AddFriend(digiFileName.Data());
55  //fRun->AddFriend(trackF.Data());
56  fRun->SetOutputFile(outFileName.Data());
57  //fRun->RunWithTimeStamps();
58  FairRuntimeDb* rtdb = fRun->GetRuntimeDb();
59  FairParRootFileIo* parInput1 = new FairParRootFileIo();
60  parInput1->open(parFileName.Data());
61  rtdb->setFirstInput(parInput1);
62 
63  //works around the "geometry not supported by map" error
65  PndSttFindTracks* sttFindTracks = new PndSttFindTracks("Track Finder", "FairTask", sttTrackFinder, iVerbose);
66  sttFindTracks->AddHitCollectionName("STTHit", "STTPoint");
67  //sttFindTracks->SetPersistence(kFALSE);
68  fRun->AddTask(sttFindTracks);
69  fRun->Init();
70  PndGeoSttPar* fSttParameters = (PndGeoSttPar*) rtdb->getContainer("PndGeoSttPar");
71  PndSttMapCreator* mapper = new PndSttMapCreator(fSttParameters);
72  TClonesArray* tubearray = mapper->FillTubeArray();
73 
74  TCanvas* rzcanvas = new TCanvas("rzcanvas");
75  rzcanvas->Range(-54,-42,114,42);
76  rzcanvas->SetCanvasSize(1200, 600);
77  rzcanvas->cd();
78 
79  TCanvas* c2 = new TCanvas("c2");
80  c2->Range(-54,-42,114,42);
81  c2->SetCanvasSize(1200, 600);
82  c2->cd();
83 
84  TCanvas* c1 = new TCanvas("c1");
85  c1->Range(-42, -42, 42, 42);
86  c1->SetCanvasSize(1200, 1200);
87  c1->cd();
88 
89  Int_t starttime = 0;
90  Int_t timelimit = 2200;
91  Int_t timewindow = 245;
92  Int_t revtimewindow = 10;
93  Int_t mvdtimewindow = 20;
94  Int_t mvdrevtimewindow = 5;
95  Int_t nexttime = 0;
96  Int_t evpos = 0;
97  Int_t clonespos = 0;
98  Int_t stripnexttime = 0;
99  Int_t stripevpos = 0;
100  Int_t stripclonespos = 0;
101  Int_t pixelnexttime = 0;
102  Int_t pixelevpos = 0;
103  Int_t pixelclonespos = 0;
104  TObjArray *drawstackhits = new TObjArray();
105  drawstackhits->SetName("drawstackhits");
106  drawstackhits->SetOwner(kTRUE);
107  TObjArray *drawstackstriphits = new TObjArray();
108  drawstackstriphits->SetName("drawstackstriphits");
109  drawstackstriphits->SetOwner(kTRUE);
110  TObjArray *drawstackpixelhits = new TObjArray();
111  drawstackpixelhits->SetName("drawstackpixelhits");
112  drawstackpixelhits->SetOwner(kTRUE);
113 
114  TObjArray* innertriplets = new TObjArray();
115  innertriplets->SetName("innertriplets");
116  TObjArray* midtriplets = new TObjArray();
117  midtriplets->SetName("midtriplets");
118  TObjArray* outertriplets = new TObjArray();
119  outertriplets->SetName("outertriplets");
120  TObjArray* innerskewlets = new TObjArray();
121  innerskewlets->SetName("innerskewlets");
122  TObjArray* outerskewlets = new TObjArray();
123  outerskewlets->SetName("outerskewlets");
124 
125 
126  TText* mytext = new TText();
127 
128  treedigi->GetEntry(0);
129  mvdstriprecotree->GetEntry(0);
130  mvdpixelrecotree->GetEntry(0);
131 
132  for (Int_t currenttime = starttime; currenttime < timelimit; currenttime+=5) {
133  //Get events up to mytime + timewindow
134  GetHitsInTime(currenttime, timewindow, drawstackhits, nexttime, evpos, clonespos, treedigi, sttsortedhits);
135  GetHitsInTime(currenttime, mvdtimewindow, drawstackstriphits, stripnexttime, stripevpos, stripclonespos, mvdstriprecotree, mvdstripreco);
136  GetHitsInTime(currenttime, mvdtimewindow, drawstackpixelhits, pixelnexttime, pixelevpos, pixelclonespos, mvdpixelrecotree, mvdpixelreco);
137 
138  cout << "STT Hits active: " << drawstackhits->GetEntriesFast() << endl;
139  cout << "MVD Strip Hits active: " << drawstackstriphits->GetEntriesFast() << endl;
140  cout << "MVD Pixel Hits active: " << drawstackpixelhits->GetEntriesFast() << endl;
141  if ((drawstackhits->IsEmpty()) && (drawstackstriphits->IsEmpty()) && (drawstackpixelhits->IsEmpty())) continue;
142 
143  //Discard events < mytime
144  RemoveOldHits(currenttime, revtimewindow, drawstackhits);
145  RemoveOldHits(currenttime, mvdrevtimewindow, drawstackstriphits);
146  RemoveOldHits(currenttime, mvdrevtimewindow, drawstackpixelhits);
147 
148  //Calculate Isochrones and Triplets
149  innertriplets->Clear();
150  midtriplets->Clear();
151  outertriplets->Clear();
152  innerskewlets->Clear();
153  outerskewlets->Clear();
154  //FindTriplets(drawstackhits, tubearray, innertriplets, 104, 215);
155  //FindTriplets(drawstackhits, tubearray, midtriplets, 714, 855);
156  //FindTriplets(drawstackhits, tubearray, outertriplets, 2956, 3175);
157  FindSkewlets(drawstackhits, tubearray, innerskewlets, 1000, 1395, 1394, 1813);
158 
159  //Draw the results in YZ
160  c2->Clear();
161  c2->cd();
162  DrawDetectorYZ();
163  DrawFairHitsYZ(currenttime-mvdrevtimewindow, drawstackstriphits, mvdtimewindow+mvdrevtimewindow);
164  DrawFairHitsYZ(currenttime-mvdrevtimewindow, drawstackpixelhits, mvdtimewindow+mvdrevtimewindow);
165  DrawVector3YZ(innerskewlets);
166  mytext->DrawText(-54, -42, TString::Format("%d ns",currenttime));
167 
168  //Draw the results in RZ
169  rzcanvas->Clear();
170  rzcanvas->cd();
171  DrawDetectorRZ();
172  DrawFairHitsRZ(currenttime-mvdrevtimewindow, drawstackstriphits, mvdtimewindow+mvdrevtimewindow);
173  DrawFairHitsRZ(currenttime-mvdrevtimewindow, drawstackpixelhits, mvdtimewindow+mvdrevtimewindow);
174  DrawVector3RZ(innerskewlets);
175  mytext->DrawText(-54, -42, TString::Format("%d ns",currenttime));
176 
177 
178  //Draw the results in XY
179  c1->Clear();
180  c1->cd();
181  DrawDetector();
182  cout << " Drawing stuff " << endl;
183  DrawIsochrones(currenttime, drawstackhits, tubearray);
184  DrawFairHits(currenttime-mvdrevtimewindow, drawstackstriphits, mvdtimewindow+mvdrevtimewindow);
185  DrawFairHits(currenttime-mvdrevtimewindow, drawstackpixelhits, mvdtimewindow+mvdrevtimewindow);
186  DrawTripletTracks(innertriplets, midtriplets, 10);
187  DrawTripletTracks(innertriplets, outertriplets, 45);
188  DrawTripletTracks(midtriplets, outertriplets, 25);
189  DrawVector3(innerskewlets);
190 
191  mytext->DrawText(-42, -42, TString::Format("%d ns",currenttime));
192 C
193  c2->Update();
194  c2->Print("hitstreamyz.gif+15");
195  rzcanvas->Update();
196  rzcanvas->Print("hitstreamrz.gif+15");
197  }
198  //c1->Print("hitstream.gif++");
199  return 0;
200 }
TFile filereco("MvdStt_Test_reco.root")
c2
Definition: plot_dirc.C:39
PndSttTrackFinderReal * sttTrackFinder
FairRunAna * fRun
Definition: hit_dirc.C:58
int Pic_FED Eff_lEE C()
void DrawIsochrones(Int_t currenttime, TObjArray *stthits, TObjArray *stttubes, Int_t *timeviolationcount)
TTree * treedigi
TStopwatch timer
Definition: hit_dirc.C:51
TFile filedigi("testdigi.root")
PndSttFindTracks * sttFindTracks
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
TClonesArray * FillTubeArray()
c1
Definition: plot_dirc.C:35
FairParRootFileIo * parInput1
Definition: hit_dirc.C:67
Int_t iVerbose
void AddHitCollectionName(char *hitCollectionName, char *pointCollectionName)
int runStreamDisplay()