11 TTree *
treemc = (TTree*) filerun.Get(
"pndsim");
12 TClonesArray *
pnt =
new TClonesArray(
"PndSttPoint");
13 treemc->SetBranchAddress(
"STTPoint",&pnt);
14 TClonesArray *
mctrack =
new TClonesArray(
"PndMCTrack");
15 treemc->SetBranchAddress(
"MCTrack",&mctrack);
20 TClonesArray *
digi =
new TClonesArray(
"PndSttHit");
21 treedigi->SetBranchAddress(
"STTHit",&digi);
26 TClonesArray *
hh =
new TClonesArray(
"PndSttHelixHit");
27 treereco->SetBranchAddress(
"SttHelixHit",&hh);
30 TClonesArray *
track =
new TClonesArray(
"PndSttTrack");
31 treereco->SetBranchAddress(
"STTTrack",&track);
32 TClonesArray *
matchtrack =
new TClonesArray(
"PndSttTrackMatch");
33 treereco->SetBranchAddress(
"STTTrackMatch",&matchtrack);
35 TCanvas *
c =
new TCanvas(
"c",
"c", 0, 0, 600, 600);
37 TH1F *
samplenum =
new TH1F(
"samplenum",
"number of sampling",50,0.,50.);
38 TH2F *
hdedxvsp =
new TH2F(
"hdedxvsp",
"dedx vs p",100,0.,1.5, 100,0.,40.);
40 TCanvas *
c1 =
new TCanvas(
"c1",
"c1", 0, 0, 600, 600);
42 TH2F *
hdedxvsp_p =
new TH2F(
"hdedxvsp_p",
"dedx vs p for p",100,0.,1.5, 100,0.,40.);
43 TH2F *
hdedxvsp_pi =
new TH2F(
"hdedxvsp_pi",
"dedx vs p for #pi",100,0.,1.5, 100,0.,40.);
44 TH2F *
hdedxvsp_e =
new TH2F(
"hdedxvsp_e",
"dedx vs p for e",100,0.,1.5, 100,0.,40.);
45 TH2F *
hdedxvsp_k =
new TH2F(
"hdedxvsp_k",
"dedx vs p for K",100,0.,1.5, 100,0.,40.);
46 TH2F *
hdedxvsp_mu =
new TH2F(
"hdedxvsp_mu",
"dedx vs p for #mu",100,0.,1.5, 100,0.,40.);
48 TCanvas *
c2 =
new TCanvas(
"c2",
"c2", 0, 0, 600, 600);
49 TH2F *
hdedxvsp_reco =
new TH2F(
"hdedxvsp_reco",
"dedx vs reco p",100,0.,1.5, 100,0.,40.);
51 cout << treereco->GetEntriesFast() <<
" events" << endl;
54 for(Int_t
evt = 0;
evt < treereco->GetEntriesFast();
evt++) {
55 if(
evt%100 == 0) cout <<
evt << endl;
57 treemc->GetEntry(
evt);
58 treedigi->GetEntry(
evt);
59 treereco->GetEntry(
evt);
62 for (Int_t k = 0; k < track->GetEntriesFast(); k++) {
65 if(!stttrack)
continue;
69 if(!MCtrack)
continue;
87 std::vector<double> dedxvec;
91 for (Int_t j = 0; j < hitcounter; j++) {
94 if(!helixhit)
continue;
100 if(helixhit->
GetdEdx() != 0) dedxvec.push_back(helixhit->
GetdEdx());
104 hitcounter -= losthit;
110 std::sort(dedxvec.begin(), dedxvec.end());
114 Int_t endnum = floor(hitcounter * perc);
117 for(Int_t
m = 0;
m < endnum;
m++) sum += dedxvec[
m];
121 hdedxvsp->Fill(momentum->Mag(), tmean);
122 hdedxvsp_reco->Fill(ptot, tmean);
124 samplenum->Fill(hitcounter);
126 if(abs(PDGcode) == 11) { hdedxvsp_e->Fill(momentum->Mag(), tmean);}
127 else if(abs(PDGcode) == 13) { hdedxvsp_mu->Fill(momentum->Mag(), tmean);}
128 else if(abs(PDGcode) == 211) { hdedxvsp_pi->Fill(momentum->Mag(), tmean);}
129 else if(abs(PDGcode) == 321) { hdedxvsp_k->Fill(momentum->Mag(), tmean); }
130 else if(abs(PDGcode) == 2212){ hdedxvsp_p->Fill(momentum->Mag(), tmean);}
143 hdedxvsp_e->SetMarkerColor(2);
146 hdedxvsp_k->SetMarkerColor(3);
149 hdedxvsp_pi->SetMarkerColor(4);
150 hdedxvsp_mu->SetMarkerColor(7);
152 hdedxvsp_mu->Draw(
"SAME");
154 hdedxvsp_p->SetMarkerColor(5);
158 hdedxvsp_reco->Draw();
160 TFile *
out_dedx =
new TFile(
"out_dedx_helixhit.root",
"RECREATE");
163 hdedxvsp_mu->Write();
164 hdedxvsp_pi->Write();
167 hdedxvsp_reco->Write();
friend F32vec4 cos(const F32vec4 &a)
Int_t GetNofHelixHits() const
friend F32vec4 sqrt(const F32vec4 &a)
friend F32vec4 sin(const F32vec4 &a)
TVector3 GetMomentum() const
TFile filedigi("testdigi.root")
TFile filerun("testrun.root")
Int_t GetHelixHitIndex(Int_t iHit) const
TFile filehelix("testreco.root")
TClonesArray * matchtrack