FairRoot/PandaRoot
checkhelixhit.C
Go to the documentation of this file.
1 {
2  gROOT->Reset();
3  TStopwatch timer;
4  timer.Start();
5 // gROOT->LoadMacro("$VMCWORKDIR/gconfig/rootlogon.C");
6 // rootlogon();
7 
8  // MCpoints
9  TFile filerun("testrun.root");
10  TTree *treepnt = (TTree*) filerun.Get("pndsim");
11  TClonesArray *pnt = new TClonesArray("PndSttPoint");
12  treepnt->SetBranchAddress("STTPoint",&pnt);
13 
14 
15  // Hits
16  TFile filedigi("testdigi.root");
17  TTree *treedigi = (TTree*) filedigi.Get("pndsim");
18  TClonesArray *digi = new TClonesArray("PndSttHit");
19  treedigi->SetBranchAddress("STTHit",&digi);
20 
21  // HelixHits
22  TFile filehelix("testreco.root");
23  TTree *treereco = (TTree*) filehelix.Get("pndsim");
24  TClonesArray *hh = new TClonesArray("PndSttHelixHit");
25  treereco->SetBranchAddress("SttHelixHit",&hh);
26 
27  // Helix Tracks
28  TClonesArray *track = new TClonesArray("PndSttTrack");
29  treereco->SetBranchAddress("STTTrack",&track);
30 
31  TCanvas *c = new TCanvas("c", "c", 0, 0, 600, 600);
32  c->Divide(1,2);
33  TH2F *hxy = new TH2F("hxy","hxy",100,-42,42, 100,-42,42);
34  TH2F *hyz = new TH2F("hyz","hyz",100,0,50, 100,-40,110);
35 
36  int evt = 0;
37 
38  treepnt->GetEntry(evt);
39  treedigi->GetEntry(evt);
40  treereco->GetEntry(evt);
41 
42  c->cd(1);
43  hxy->Draw();
44  c->cd(2);
45  hyz->Draw();
46 
47  // cout << "num tracks " << track->GetEntriesFast() << endl;
48 
49  cout << "blue = Monte Carlo " << endl;
50  cout << "red = Helix Hit " << endl;
51  cout << "green = Center Of Tubes " << endl;
52 
53  // tracks loop
54  for (Int_t k = 0; k < track->GetEntriesFast(); k++) {
55 
56  PndSttTrack *stttrack = (PndSttTrack*) track->At(k);
57  if(!stttrack) continue;
58 
59  Double_t d0 = stttrack->GetDist();
60  Double_t phi0 = stttrack->GetPhi();
61  Double_t R = stttrack->GetRad();
62  Double_t z0 = stttrack->GetZ();
63  Double_t tanl = stttrack->GetTanL();
64  Double_t h = -(Int_t) stttrack->GetCharge();
65  Double_t ptran = 0.003 * 2 * R;
66 
67  Double_t plong = ptran * tanl;
68  Double_t ptot = sqrt(plong*plong + ptran*ptran);
69 
70  Double_t x0 = (d0 + R) * cos(phi0);
71  Double_t y0 = (d0 + R) * sin(phi0);
72 
73  cout << "evt" << evt << " track " << k << " num hits " << stttrack->GetNofHelixHits() << " flag " << stttrack->GetFlag() << " ptran " << ptran << " plong "<< plong << " ptot " << ptot << endl;
74 
75  c->cd(1);
76  // track
77  TArc *circ = new TArc(x0, y0, R, 0, 360);
78  circ->SetLineColor(k+1);
79  circ->SetFillStyle(0);
80  circ->Draw("SAME");
81  c->cd(2);
82  // track
83  Double_t x1 = d0 * cos(phi0);
84  Double_t y1 = d0 * sin(phi0);
85  Double_t scoslT = stttrack->CalculateScosl(x1, y1);
86 
87  TLine* line = new TLine(scoslT, scoslT*tanl+ z0, 50, 50*tanl + z0);
88  line->SetLineColor(k+1);
89  line->Draw("SAME");
90 
91 
92  for (Int_t j = 0; j < stttrack->GetNofHelixHits() ; j++) {
93  Int_t iHHit = stttrack->GetHelixHitIndex(j);
94  PndSttHelixHit *helixhit = (PndSttHelixHit*) hh->At(iHHit);
95 
96  Int_t hitindex = helixhit->GetHitIndex();
97  PndSttHit* hit = (PndSttHit*) digi->At(hitindex);
98  PndSttPoint *mcpoint = (PndSttPoint*) pnt->At(hit->GetRefIndex());
99 
100  c->cd(1);
101 
102  // points/hits
103  TMarker *mrkpnt = new TMarker(mcpoint->GetXtot(), mcpoint->GetYtot(), 2);
104  mrkpnt->SetMarkerColor(4);
105  mrkpnt->Draw("SAME");
106  TMarker *mrkdigi = new TMarker(hit->GetX(), hit->GetY(), 6);
107  mrkdigi->SetMarkerColor(3);
108  mrkdigi->Draw("SAME");
109  TMarker *mrkhh = new TMarker(helixhit->GetX(), helixhit->GetY(), 5);
110  mrkhh->SetMarkerColor(2);
111  mrkhh->Draw("SAME");
112 
113  c->cd(2);
114 
127  // cout << "MC " << mcpoint->GetXtot()
128  // << " " << mcpoint->GetYtot()
129  // << " " << mcpoint->GetZtot() << endl;
130 
131  // cout << "helixhit " << helixhit->GetX()
132  // << " " << helixhit->GetY()
133  // << " " << helixhit->GetZ() << endl;
134 
135 
136 
137  Double_t scoslMC = stttrack->CalculateScosl(mcpoint->GetXtot(), mcpoint->GetYtot());
138  TMarker *mrkpnt = new TMarker(scoslMC, mcpoint->GetZtot(), 2);
139  mrkpnt->SetMarkerColor(4);
140  mrkpnt->Draw("SAME");
141 
142  Double_t scoslH = stttrack->CalculateScosl(hit->GetX(), hit->GetY());
143  TMarker *mrkdigi = new TMarker(scoslH, hit->GetZ(), 6);
144  mrkdigi->SetMarkerColor(3);
145  // mrkdigi->Draw("SAME");
146 
147  Double_t scoslHH = stttrack->CalculateScosl(helixhit->GetX(), helixhit->GetY());
148  TMarker *mrkhh = new TMarker(scoslHH, helixhit->GetZ(), 5);
149  mrkhh->SetMarkerColor(2);
150  mrkhh->Draw("SAME");
151 
152  // cout << scoslMC<< " " << mcpoint->GetZtot() << endl;
153  }
154 
155  }
156 }
Double_t tanl
Definition: checkhelixhit.C:63
Double_t z0
Definition: checkhelixhit.C:62
Double_t x0
Definition: checkhelixhit.C:70
friend F32vec4 cos(const F32vec4 &a)
Definition: P4_F32vec4.h:112
TFile filerun("testrun.root")
Double_t GetTanL()
Definition: PndSttTrack.h:60
Int_t GetHitIndex()
TFile filedigi("testdigi.root")
Int_t GetNofHelixHits() const
Definition: PndSttTrack.h:48
Double_t GetZ()
Definition: PndSttTrack.h:61
TCanvas * c
Definition: checkhelixhit.C:31
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
TClonesArray * pnt
Definition: checkhelixhit.C:11
friend F32vec4 sin(const F32vec4 &a)
Definition: P4_F32vec4.h:111
TTree * treedigi
Definition: checkhelixhit.C:17
Double_t ptot
Definition: checkhelixhit.C:68
TTree * treepnt
Definition: checkhelixhit.C:10
int evt
Definition: checkhelixhit.C:36
TClonesArray * hh
Definition: checkhelixhit.C:24
TTree * treereco
Definition: checkhelixhit.C:23
Double_t GetDist()
Definition: PndSttTrack.h:57
Double_t d0
Definition: checkhelixhit.C:59
Double_t GetRad()
Definition: PndSttTrack.h:59
Double_t GetYtot() const
Definition: PndSttPoint.h:55
Double_t GetPhi()
Definition: PndSttTrack.h:58
Double_t GetZtot() const
Definition: PndSttPoint.h:56
Double_t
Double_t phi0
Definition: checkhelixhit.C:60
Double_t y0
Definition: checkhelixhit.C:71
Int_t GetCharge()
Definition: PndSttTrack.h:63
Double_t ptran
Definition: checkhelixhit.C:65
TH2F * hxy
Definition: checkhelixhit.C:33
int hit(Int_t nEvents=0, TString inFile="sim.root", TString parFile="par.root", TString inDigi="digi.root", TString outFile="hit.root", Int_t timeBased=0)
Definition: hit.C:1
Int_t GetHelixHitIndex(Int_t iHit) const
Definition: PndSttTrack.h:49
Double_t CalculateScosl(Double_t x, Double_t y)
TStopwatch timer
Definition: checkhelixhit.C:1
Double_t GetXtot() const
Definition: PndSttPoint.h:54
TFile filehelix("testreco.root")
TH2F * hyz
Definition: checkhelixhit.C:34
TClonesArray * digi
Definition: checkhelixhit.C:18
Double_t h
Definition: checkhelixhit.C:64
Int_t GetFlag() const
Definition: PndSttTrack.h:51
Double_t R
Definition: checkhelixhit.C:61
Double_t plong
Definition: checkhelixhit.C:67
TClonesArray * track
Definition: checkhelixhit.C:28