3 TFile*
simFile = TFile::Open(
"Gem_MvdStt_3Stations_DPM_n10000.root");
4 TTree* simTree = (TTree*)simFile->Get(
"pndsim");
5 TFile* digFile = TFile::Open(
"Gem_MvdStt_3Stations_DPM_n10000_digiSorted_a10000_c1000x10.root");
6 TTree* digTree = (TTree*)digFile->Get(
"pndsim");
7 TFile* cluFile = TFile::Open(
"Gem_MvdStt_3Stations_DPM_n10000_CluHi_a10000_c1000x10.root");
8 TTree* cluTree = (TTree*)cluFile->Get(
"pndsim");
10 cout <<
"FILES FETCHED" << endl;
12 FairEventHeader* evHeader = NULL;
13 TClonesArray* mcTrackArray =
new TClonesArray(
"PndMCTrack");
14 TClonesArray* gemPointArray =
new TClonesArray(
"PndGemMCPoint");
15 TClonesArray* gemHitArray =
new TClonesArray(
"PndGemHit");
17 simTree->SetBranchAddress(
"MCTrack",&mcTrackArray);
18 simTree->SetBranchAddress(
"GEMPoint",&gemPointArray);
19 digTree->SetBranchAddress(
"EventHeader.",&evHeader);
20 cluTree->SetBranchAddress(
"GEMHit",&gemHitArray);
22 cout <<
"GOT ALL THE BRANCHES" << endl;
24 TH2F* hist_YT =
new TH2F(
"hist_YT",
"hist_YT",200,-10,10,200,-75,125);
25 TH2F* hist_XT =
new TH2F(
"hist_XT",
"hist_XT",200,-10,10,200,-75,125);
26 TH2F* hist_XY =
new TH2F(
"hist_XY",
"hist_XY",200,-10,10,200,-10,10);
27 TH1F* hist_T =
new TH1F(
"hist_T",
"hist_T", 500,-200,300);
28 TH1F* hist_Y =
new TH1F(
"hist_Y",
"hist_Y", 500,-25,25);
29 TH1F* hist_X =
new TH1F(
"hist_X",
"hist_X", 500,-25,25);
30 TH1F* hist_N =
new TH1F(
"hist_N",
"Nof of matched hits",101,-0.5,100.5);
32 const Int_t kNofStat = 3;
34 const Int_t kNofEvents = 10000;
35 const Int_t kMaxNofHits = 10000;
37 Bool_t hitAssignedToPoint[kNofEvents][kMaxNofHits];
39 for ( Int_t iev = 0 ; iev < kNofEvents ; iev++ ) {
40 for ( Int_t ihit = 0 ; ihit < kMaxNofHits ; ihit++ ) {
41 hitAssignedToPoint[iev][ihit] = kFALSE;
44 cout <<
"DONE" << endl;
46 Double_t statZPos[kNofStat] = {117.,153.,189.};
48 TH1F* fhPointRadNof [kNofStat][2];
49 TH1F* fhPointRadReco [kNofStat][2];
50 TH1F* fhPointRadRecoEff[kNofStat][2];
51 TH2F* fhPointNof [kNofStat][2];
52 TH2F* fhPointReco [kNofStat][2];
53 TH2F* fhPointRecoEff [kNofStat][2];
55 TH1F* fhHitRadNof [kNofStat][2];
56 TH1F* fhHitRadFake [kNofStat][2];
57 TH1F* fhHitRadFakeProb[kNofStat][2];
58 TH2F* fhHitNof [kNofStat][2];
59 TH2F* fhHitFake [kNofStat][2];
60 TH2F* fhHitFakeProb [kNofStat][2];
62 for ( Int_t istat = 0 ; istat < kNofStat ; istat++ ) {
63 for ( Int_t isens = 0 ; isens < 2 ; isens++ ) {
64 fhPointRadNof [istat][isens] =
new TH1F(Form(
"fhPointRadNof_s%d_s%d",istat,isens),
65 Form(
"Number of points, station %d, sensor %d",istat,isens),
67 fhPointRadReco [istat][isens] =
new TH1F(Form(
"fhPointRadReco_s%d_s%d",istat,isens),
68 Form(
"Number of reconstructed points (point-hit %.2f cm), station %d, sensor %d",pntHitDist,istat,isens),
70 fhPointRadRecoEff [istat][isens] =
new TH1F(Form(
"fhPointRadRecoEff_s%d_s%d",istat,isens),
71 Form(
"Hit finding efficiency (point-hit %.2f cm), station %d, sensor %d",pntHitDist,istat,isens),
73 fhPointNof [istat][isens] =
new TH2F(Form(
"fhPointNof_s%d_s%d",istat,isens),
74 Form(
"Number of points, station %d, sensor %d",istat,isens),
77 fhPointReco [istat][isens] =
new TH2F(Form(
"fhPointReco_s%d_s%d",istat,isens),
78 Form(
"Number of reconstructed points (point-hit %.2f cm), station %d, sensor %d",pntHitDist,istat,isens),
81 fhPointRecoEff [istat][isens] =
new TH2F(Form(
"fhPointRecoEff_s%d_s%d",istat,isens),
82 Form(
"Hit finding efficiency (point-hit %.2f cm), station %d, sensor %d",pntHitDist,istat,isens),
85 fhHitRadNof [istat][isens] =
new TH1F(Form(
"fhHitRadNof_s%d_s%d",istat,isens),
86 Form(
"Number of hits, station %d, sensor %d",istat,isens),
88 fhHitRadFake [istat][isens] =
new TH1F(Form(
"fhHitRadFake_s%d_s%d",istat,isens),
89 Form(
"Number of fake hits (point-hit %.2f cm), station %d, sensor %d",pntHitDist,istat,isens),
91 fhHitRadFakeProb [istat][isens] =
new TH1F(Form(
"fhHitRadFakeProb_s%d_s%d",istat,isens),
92 Form(
"Fake hit probability (point-hit %.2f cm), station %d, sensor %d",pntHitDist,istat,isens),
94 fhHitNof [istat][isens] =
new TH2F(Form(
"fhHitNof_s%d_s%d",istat,isens),
95 Form(
"Number of hits, station %d, sensor %d",istat,isens),
98 fhHitFake [istat][isens] =
new TH2F(Form(
"fhHitFake_s%d_s%d",istat,isens),
99 Form(
"Number of fake hits (point-hit %.2f cm), station %d, sensor %d",pntHitDist,istat,isens),
102 fhHitFakeProb [istat][isens] =
new TH2F(Form(
"fhHitFakeProb_s%d_s%d",istat,isens),
103 Form(
"Fake hit probability (point-hit %.2f cm), station %d, sensor %d",pntHitDist,istat,isens),
114 for ( Int_t imev = 0 ; imev < simTree->GetEntries() ; imev++ ) {
116 simTree->GetEntry(imev);
117 digTree->GetEntry(imev);
118 cout <<
"\r MC EVENT " << imev << flush;
120 for ( Int_t ipoint = 0 ; ipoint < gemPointArray->GetEntries() ; ipoint++ ) {
125 for ( Int_t istat = 0 ; istat < kNofStat ; istat++ ) {
126 if (
TMath::Abs(statZPos[istat]-tempPoint->GetZ()) < 5. ) {
130 if ( pntStat == -1 ) cout <<
"Station at " << tempPoint->GetZ() <<
" not identified" << endl;
132 Int_t pntSens = (tempPoint->GetZ()>=statZPos[pntStat]?1:0);
140 Int_t nofMatchedHits = 0;
142 for ( irev = startRev ; irev < cluTree->GetEntries() ; irev++ ) {
147 Int_t nofUsableHits = 0;
149 cluTree->GetEntry(irev);
151 if ( gemHitArray->GetEntries() > 0 ) {
152 tempHit = (
PndGemHit*)gemHitArray->At(0);
153 if ( tempHit->GetTimeStamp() > evHeader->GetEventTime()+tempPoint->GetTime() + 200. )
157 if ( gemHitArray->GetEntries() > kMaxNofHits )
158 cout <<
"THERE ARE MORE HITS THAN EXPECTED, " << gemHitArray->GetEntries() <<
" IN EVENT " << irev <<
"." << endl;
160 for ( Int_t ihit = 0 ; ihit < gemHitArray->GetEntries() ; ihit++ ) {
161 tempHit = (
PndGemHit*)gemHitArray->At(ihit);
164 if ( tempHit->GetTimeStamp() > evHeader->GetEventTime() )
171 if (
TMath::Abs(tempHit->GetZ()-tempPoint->GetZ()) > 1. )
continue;
179 if (
TMath::Abs(tempHit->GetX()-pntX) < pntHitDist ) goodX = kTRUE;
180 if (
TMath::Abs(tempHit->GetY()-pntY) < pntHitDist ) goodY = kTRUE;
181 if (
TMath::Abs(tempHit->GetTimeStamp()-(evHeader->GetEventTime()+tempPoint->GetTime())-5.5) < 8. ) goodT = kTRUE;
184 hist_YT->Fill(tempHit->GetY()-pntY,
185 tempHit->GetTimeStamp()-(evHeader->GetEventTime()+tempPoint->GetTime()));
187 hist_T->Fill(tempHit->GetTimeStamp()-(evHeader->GetEventTime()+tempPoint->GetTime()));
190 hitAssignedToPoint[irev][ihit] = kTRUE;
195 hist_Y->Fill(tempHit->GetY()-pntY);
198 hist_XT->Fill(tempHit->GetX()-pntX,
199 tempHit->GetTimeStamp()-(evHeader->GetEventTime()+tempPoint->GetTime()));
201 hist_X->Fill(tempHit->GetX()-pntX);
204 hist_XY->Fill(tempHit->GetX()-pntX,
205 tempHit->GetY()-pntY);
209 if ( ipoint == 0 && nofUsableHits == 0 && gemHitArray->GetEntries() > 0 )
212 hist_N->Fill(nofMatchedHits);
214 fhPointRadNof[pntStat][pntSens]->Fill(pntRad);
215 fhPointNof [pntStat][pntSens]->Fill(pntX,pntY);
216 if ( nofMatchedHits > 0 ) {
217 fhPointRadReco[pntStat][pntSens]->Fill(pntRad);
218 fhPointReco [pntStat][pntSens]->Fill(pntX,pntY);
223 for ( irev = 0 ; irev < cluTree->GetEntries() ; irev++ ) {
225 cluTree->GetEntry(irev);
226 for ( Int_t ihit = 0 ; ihit < gemHitArray->GetEntries() ; ihit++ ) {
228 tempHit = (
PndGemHit*)gemHitArray->At(ihit);
232 if ( !hitAssignedToPoint[irev][ihit] ) {
239 for ( Int_t istat = 0 ; istat < kNofStat ; istat++ ) {
240 for ( Int_t isens = 0 ; isens < 2 ; isens++ ) {
241 fhPointRadNof [istat][isens]->Sumw2();
242 fhPointRadReco [istat][isens]->Sumw2();
243 fhPointRadRecoEff [istat][isens]->Divide(fhPointRadReco [istat][isens],fhPointRadNof [istat][isens],1.,1.,
"B");
244 fhPointRadRecoEff [istat][isens]->Scale(100.);
245 fhHitRadNof [istat][isens]->Sumw2();
246 fhHitRadFake [istat][isens]->Sumw2();
247 fhHitRadFakeProb [istat][isens]->Divide(fhHitRadFake [istat][isens],fhHitRadNof [istat][isens],1.,1.,
"B");
248 fhHitRadFakeProb [istat][isens]->Scale(100.);
250 fhPointNof [istat][isens]->Sumw2();
251 fhPointReco [istat][isens]->Sumw2();
252 fhPointRecoEff[istat][isens]->Divide(fhPointReco[istat][isens],fhPointNof[istat][isens],1.,1.,
"B");
253 fhPointRecoEff[istat][isens]->Scale(100.);
254 fhHitNof [istat][isens]->Sumw2();
255 fhHitFake [istat][isens]->Sumw2();
256 fhHitFakeProb [istat][isens]->Divide(fhHitFake [istat][isens],fhHitNof [istat][isens],1.,1.,
"B");
257 fhHitFakeProb [istat][isens]->Scale(100.);
261 TCanvas* canv_XY =
new TCanvas(
"canv_XY",
"canv_XY",10,10,1000,800);
262 hist_XY->DrawClone(
"colz");
264 TCanvas* canv_XT =
new TCanvas(
"canv_XT",
"canv_XT",10,10,1000,800);
265 hist_XT->DrawClone(
"colz");
267 TCanvas* canv_YT =
new TCanvas(
"canv_YT",
"canv_YT",10,10,1000,800);
268 hist_YT->DrawClone(
"colz");
270 TCanvas* canv_X =
new TCanvas(
"canv_X",
"canv_X",10,10,1000,800);
273 TCanvas* canv_Y =
new TCanvas(
"canv_Y",
"canv_Y",10,10,1000,800);
276 TCanvas* canv_T =
new TCanvas(
"canv_T",
"canv_T",10,10,1000,800);
279 TCanvas* canv_N =
new TCanvas(
"canv_N",
"canv_N",10,10,1000,800);
282 TCanvas* canv_E =
new TCanvas(
"canv_E",
"canv_E",10,10,1000,800);
284 for ( Int_t istat = 0 ; istat < kNofStat ; istat++ ) {
285 for ( Int_t isens = 0 ; isens < 2 ; isens++ ) {
286 fhPointRadRecoEff [istat][isens]->SetLineColor(2+istat+isens*4);
287 fhPointRadRecoEff [istat][isens]->SetLineWidth(2);
288 fhPointRadRecoEff [istat][isens]->DrawClone(drawString.Data());
289 drawString =
"kSAME";
293 TCanvas* canv_F =
new TCanvas(
"canv_F",
"canv_F",10,10,1000,800);
295 for ( Int_t istat = 0 ; istat < kNofStat ; istat++ ) {
296 for ( Int_t isens = 0 ; isens < 2 ; isens++ ) {
297 fhHitRadFakeProb [istat][isens]->SetLineColor(2+istat+isens*4);
298 fhHitRadFakeProb [istat][isens]->SetLineWidth(2);
299 fhHitRadFakeProb [istat][isens]->DrawClone(drawString.Data());
300 drawString =
"kSAME";
304 TFile*
outFile =
new TFile(Form(
"hit_reco_%.1f.root",pntHitDist),
"RECREATE");
314 for ( Int_t istat = 0 ; istat < kNofStat ; istat++ ) {
315 for ( Int_t isens = 0 ; isens < 2 ; isens++ ) {
316 fhPointRadNof [istat][isens]->Write();
317 fhPointRadReco [istat][isens]->Write();
318 fhPointRadRecoEff[istat][isens]->Write();
319 fhHitRadNof [istat][isens]->Write();
320 fhHitRadFake [istat][isens]->Write();
321 fhHitRadFakeProb [istat][isens]->Write();
322 fhPointNof [istat][isens]->Write();
323 fhPointReco [istat][isens]->Write();
324 fhPointRecoEff [istat][isens]->Write();
325 fhHitNof [istat][isens]->Write();
326 fhHitFake [istat][isens]->Write();
327 fhHitFakeProb [istat][isens]->Write();
static T Sqrt(const T &x)
Int_t GetSensorNr() const
int TB_checkHitReconstruction(Double_t pntHitDist=0.1)
Int_t GetStationNr() const