/[PAMELA software]/quicklook/tracker/flight/macros/FTrkQLook_BASIC.cxx
ViewVC logotype

Contents of /quicklook/tracker/flight/macros/FTrkQLook_BASIC.cxx

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.17 - (show annotations) (download)
Mon Feb 26 16:41:05 2007 UTC (17 years, 9 months ago) by pam-fi
Branch: MAIN
CVS Tags: v1r28
Changes since 1.16: +5 -3 lines
*** empty log message ***

1 /**
2 * FTrkQLook_BASIC.cxx
3 *
4 * autor: D.Fedele
5 * version v1r11
6 * Parameters:
7 * file - the data file to analyze
8 * fromevent - first event to analyze
9 * toevent - last event to analyze
10 * outdir - total path of output file
11 * outfile - extension of output file (pdf,ps,gif,jpg)
12 *
13 */
14 //
15 #include <TPaveText.h>
16 #include <TLatex.h>
17 #include <TCanvas.h>
18 #include <TGraph.h>
19 #include <TStyle.h>
20 #include <TFile.h>
21 #include <TTree.h>
22 #include <TArrow.h>
23 //
24 #include <physics/tracker/TrackerEvent.h>
25 #include <PscuHeader.h>
26 #include <EventHeader.h>
27 #include <RunHeaderEvent.h>
28 #include <EventCounter.h>
29 #include <PacketType.h>
30 //
31 #define MAXSTORAGE 50000
32
33 void FTrkQLook_BASIC(TString file,Int_t fromevent,Int_t toevent, TString outdir,TString outfile)
34 {
35 //
36 // obtain information about the data file and select the output dir
37 Int_t dwpos = file.Last('/');
38 Int_t dwpos1 = file.Last('.');
39 TString base,ffile ;
40 ffile=file(dwpos+1,dwpos1-(dwpos+1));
41 if(dwpos>0) base=file(0,dwpos);
42
43 TString out;
44 if(outdir.Length()==0){
45 out = base;
46 }else{
47 out = outdir;
48 }
49 if(out.Last('/')+1<out.Length()) out+="/";
50
51 //
52 // inizialise the variables and open the file
53 pamela::tracker::TrackerEvent *te=0;
54 pamela::EventHeader *eh=0,*eH=0,*ceh=0;
55 pamela::RunHeaderEvent *reh=0;
56 pamela::PscuHeader *ph=0,*pH=0;
57 pamela::EventCounter *cod=0;
58
59 pamela::PacketType *pctp=0;
60
61 TFile *datafile = new TFile(file);
62 TTree *otr = (TTree*)datafile->Get("RunHeader");
63 otr->SetBranchAddress("Header",&eH);
64 otr->SetBranchAddress("RunHeader",&reh);
65 TTree *tr = (TTree*)datafile->Get("Physics");
66 tr->SetBranchAddress("Tracker",&te);
67 tr->SetBranchAddress("Header",&eh);
68 TTree *ctr = (TTree*)datafile->Get("CalibTrk1");
69 ctr->SetBranchAddress("Header",&ceh);
70
71 Long64_t neventC = ctr->GetEntries();
72 Long64_t nevent = tr->GetEntries();
73 Long64_t neventH = otr->GetEntries();
74 Int_t minevent=0;
75 Int_t maxevent=0;
76
77 printf("Number of total events: %lld\nNumber of total header events: %lld\n",nevent,neventH);
78 printf("Number of calibration events: %lld\n",neventC);
79
80 if (nevent<=0){
81 datafile->Close();
82 return;
83 }
84 if ( fromevent > toevent && toevent>0 ){
85 printf("It must be fromevent < toevent \n");
86 return;
87 }
88 if ( fromevent > nevent || fromevent < 0 ) {
89 printf("You can choose fromevent between 0 (all) and %lld \n",nevent);
90 return;
91 }
92 if ( toevent > nevent || toevent < 0 ) {
93 printf("You can choose toevent between 0 (all) and %lld \n",nevent);
94 return;
95 }
96 if ( fromevent == 0 ) {
97 minevent = 0;
98 maxevent = nevent;
99 } else {
100 minevent = fromevent;
101 if ( toevent > 0 ){
102 maxevent = toevent+1;
103 } else if (toevent > nevent) {
104 maxevent = nevent;
105 } else {
106 maxevent = nevent;
107 }
108 nevent=maxevent-minevent ;
109 }
110
111 //
112 // other variables definitions
113 stringstream oss,fromfile,isfile;
114 //
115 // information about the RunHeader
116 ULong64_t HOBT[neventH];
117 Int_t trk_cal_us[neventH];
118 for (Int_t vi=0; vi<neventH;vi++){
119 HOBT[vi]=0;
120 trk_cal_us[vi]=0;
121 }
122
123 //
124 // information about RunHeader
125 Int_t countnboot=1;
126 for (Int_t ev=0; ev<neventH; ev++){
127 otr->GetEntry(ev);
128 pH = eH->GetPscuHeader();
129 HOBT[ev]= pH->GetOrbitalTime();
130 trk_cal_us[ev]=reh->TRK_CALIB_USED;
131 if((HOBT[ev]<HOBT[ev-1]) && ev>0)
132 countnboot+=1;
133 }
134 countnboot+=(Int_t)(2*nevent/MAXSTORAGE);
135 // printf("\ncountnboot=%d\n",countnboot);
136
137 //
138 // information about calibration OBT
139 ULong64_t COBT[neventC];
140 for (Int_t vi=0; vi<neventC;vi++){
141 COBT[vi]=0;
142 }
143 for (Int_t ev=0; ev<neventC; ev++){
144 ctr->GetEntry(ev);
145 pH = ceh->GetPscuHeader();
146 COBT[ev]= pH->GetOrbitalTime();
147 }
148
149 //
150 // Style options
151 gStyle->SetLabelSize(0.06,"x");
152 gStyle->SetLabelSize(0.06,"y");
153 gStyle->SetStatFontSize(0.075);
154 gStyle->SetOptStat(10);
155 gStyle->SetFillColor(10);
156 gStyle->SetTitleFontSize(0.1);
157 gStyle->SetTitleFillColor(10);
158 gStyle->SetTitleOffset(0.8,"y");
159 gStyle->SetTitleOffset(0.9,"x");
160 gStyle->SetTitleSize(0.06,"y");
161 gStyle->SetTitleSize(0.055,"x");
162
163 //***************************************************************************************
164 // LOOP on each event
165 //***************************************************************************************
166
167 if (fromevent!=0)
168 printf("\n Scan of events from %i to %i ... \n",minevent,maxevent-1);
169 else
170 printf("\n Scan of events from %i to %i ... \n",minevent+1,maxevent);
171
172
173 Int_t minev=minevent,maxev=maxevent,hin=0,hfin=0,cin=0,cfin=0;
174 TPad *pad[12][countnboot];
175 TGraph *dataletime[12][countnboot],*dataletime1[12][countnboot];
176 TCanvas *DataTimeCanv[countnboot];
177 for(Int_t ii=0; ii<countnboot;ii++){
178 fromfile<<"FTrkQLook_BASIC File: "<<ffile;
179 isfile<<"DATALENGTH vs. OBT pag"<<ii+1;
180 DataTimeCanv[ii]=new TCanvas(isfile.str().c_str(),isfile.str().c_str(),900,1200);
181 DataTimeCanv[ii]->SetFillColor(10);
182 DataTimeCanv[ii]->Range(0,0,100,100);
183
184 TLatex *t=new TLatex();
185 t->SetTextFont(32);
186 t->SetTextColor(1);
187 t->SetTextAlign(12);
188 t->SetTextSize(0.02);
189 t->DrawLatex(2.,98.7,fromfile.str().c_str());
190 TLatex *t1=new TLatex();
191 t1->SetTextFont(32);
192 t1->SetTextColor(1);
193 t1->SetTextAlign(12);
194 t1->SetTextSize(0.02);
195 t1->DrawLatex(70.,98.7,isfile.str().c_str());
196 fromfile.str("");
197 isfile.str("");
198
199 fromfile<<"D = Default Calibration";
200 isfile<<"O = OnLine Calibration";
201 t->SetTextColor(6);
202 t->SetTextSize(0.018);
203 t->DrawLatex(70.,97.,fromfile.str().c_str());
204 t->SetTextColor(3);
205 t->DrawLatex(70.,96.,isfile.str().c_str());
206 fromfile.str("");
207 isfile.str("");
208
209 fromfile<<"The green arrow (if present) points out the time of the online calibration";
210 t->DrawLatex(7.,96.,fromfile.str().c_str());
211 fromfile.str("");
212
213 //*************************************************************************************
214 //book pads and histos
215 //***************************************************************************************
216
217
218 Float_t posy = 0.95; // up y-coord - top pads
219 Float_t hpad = 0; // pad height
220 Float_t posx1=0; // left x-coord - pad column
221 Float_t posx0=0; // x-coord - column division
222 Float_t wrel = 0; // relative x size of first sub-column
223 Float_t marg = 0.004; // margin among pads
224
225 hpad = (posy-marg*11)/6;
226 wrel = (1-marg*4)/2;
227 stringstream title;
228 stringstream hid;
229
230 for(Int_t n = 0; n<12; n++) {
231 if ( (n+1)%2==1 ) {
232 if(n>1) posy = posy-(marg*2+hpad);
233 posx1 = marg;
234 posx0 = posx1 + wrel;
235 }
236 else {
237 posx1 = posx0 + 2*marg;
238 posx0 = posx1 + wrel;
239 }
240
241 /* -----------> pad for histograms */
242 oss<<"pad"<<n*100+ii;
243 pad[n][ii]=new TPad(oss.str().c_str()," ",posx1,posy-hpad,posx0,posy,18,0,0);
244 oss.str("");
245 };
246
247 TLine li;
248 li.SetLineColor(1);
249 li.SetLineStyle(1);
250 li.SetLineWidth(1);
251
252 TArrow ar;
253 ar.SetLineColor(3);
254 stringstream calus;
255
256 TLatex *t2=new TLatex();
257 t2->SetTextFont(32);
258 t2->SetTextColor(1);
259 t2->SetTextAlign(13);
260 t2->SetTextSize(0.08);
261
262 Int_t i=0;
263 Long64_t x[MAXSTORAGE], xb[MAXSTORAGE];
264 Float_t yyd[MAXSTORAGE][12],yyb[MAXSTORAGE][12];
265 Int_t countbad[12];
266 Float_t perc=0;
267 Double_t xMIN=0.,xMAX=0.;
268 for (Int_t n=0; n<12 ; n++)
269 countbad[n]=0;
270
271 //
272 // obtain values of the datalenght
273 for (Int_t ev=minev; ev<maxevent; ev++){
274 tr->GetEntry(ev);
275 ph = eh->GetPscuHeader();
276 cod = eh->GetCounter();
277
278 if(ev==minev){
279 if(cod->Get(pctp->CalibTrk1)>0) cin=cod->Get(pctp->CalibTrk1)-1;
280 else cin=cod->Get(pctp->CalibTrk1);
281 if(cin==cfin-1) cin+=1;
282
283 if(cod->Get(pctp->RunHeader)>0) hin=cod->Get(pctp->RunHeader)-1;
284 else hin=cod->Get(pctp->RunHeader);
285 if(hin==hfin-1) hin+=1;
286 }
287
288 if(ev==maxevent-1) maxev=maxevent-1;
289
290 if((ph->GetOrbitalTime()<x[ev-minev-1] && ev-minev!=0) || ev-minev==MAXSTORAGE){
291 maxev=ev;
292 break;
293 }
294 else{
295 cfin=cod->Get(pctp->CalibTrk1);
296 hfin=cod->Get(pctp->RunHeader);
297 x[(ev-minev)]= ph->GetOrbitalTime();
298 i=0;
299
300 for (Int_t n=0; n<12 ; n++){
301 i=te->DSPnumber[n]-1;
302 if(i>=0){
303 if(i<12){
304 yyb[countbad[i]][i]=0;
305 xb[countbad[i]]= 0;
306
307 yyd[(ev-minev)][i]=te->DATAlength[n];
308 if(i==6){
309 if(yyd[(ev-minev)][i]>1500){
310 if(yyd[(ev-minev)][i]<3075){
311 yyb[countbad[i]][i]= yyd[(ev-minev)][i];
312 xb[countbad[i]]= x[(ev-minev)];
313 countbad[i]+=1;
314 }
315 }
316 }
317 else{
318 if(yyd[(ev-minev)][i]>750){
319 if(yyd[(ev-minev)][i]<3075){
320 yyb[countbad[i]][i]= yyd[(ev-minev)][i];
321 xb[countbad[i]]= x[(ev-minev)];
322 countbad[i]+=1;
323 }
324 }
325 }
326 }
327 }
328 }
329 }
330 }
331
332 //
333 // define limit for the Xaxis of the graphs
334
335 xMAX=x[maxev-minev-1]+(x[maxev-minev-1]-x[0])/10;
336 if(xMAX>1000000) xMIN=x[0]-(x[maxev-minev-1]-x[0])/10;
337 if(xMAX<1000000 || xMIN<0) xMIN=0.;
338 if(xMIN==xMAX) xMIN=x[0] * x[0]/xMAX;
339
340
341 //
342 // Draw Histos
343 for (Int_t n=0; n<12 ; n++){
344
345 Double_t yd[maxev-minev],ybd[maxev-minev];
346 Double_t xd[maxev-minev],xbd[maxev-minev];
347
348 for(Int_t v=0;v<maxev-minev;v++){
349 yd[v]=(Double_t)yyd[v][n];
350 ybd[v]=(Double_t)yyb[v][n];
351 xd[v]=(Double_t)x[v];
352 xbd[v]=(Double_t)xb[v];
353 }
354
355 if(xMAX<1000000){
356 xd[maxev-minev-1]=0;
357 yd[maxev-minev-1]=0.;
358 }
359
360 if((maxev-minev)>1000){
361 perc=(countbad[n]*100)/(maxev-minev);
362 if(perc>10) pad[n][ii]->SetFillColor(2);
363 else pad[n][ii]->SetFillColor(10);
364
365 }
366 else{
367 if(countbad[n]>=100) pad[n][ii]->SetFillColor(2);
368 else pad[n][ii]->SetFillColor(10);
369 }
370
371 oss<<"DSP "<<n+1;
372 DataTimeCanv[ii]->cd();
373 pad[n][ii]->SetFrameFillColor(10);
374 pad[n][ii]->Draw();
375 pad[n][ii]->cd();
376 dataletime[n][ii]= new TGraph((maxev-minev),xd,yd);
377 if(maxev-minev==1) dataletime[n][ii]->GetXaxis()->SetNdivisions(-501);
378 dataletime[n][ii]->SetTitle(oss.str().c_str());
379 dataletime[n][ii]->GetXaxis()->SetTitle("OBT (ms)");
380 dataletime[n][ii]->GetXaxis()->CenterTitle();
381 dataletime[n][ii]->GetXaxis()->SetRangeUser(xMIN,xMAX);
382 dataletime[n][ii]->GetYaxis()->SetTitle("datalength (Word 13 bit)");
383 dataletime[n][ii]->GetYaxis()->CenterTitle();
384 if(i==6) dataletime[n][ii]->GetYaxis()->SetRangeUser(0,4500);
385 else dataletime[n][ii]->GetYaxis()->SetRangeUser(0,4000);
386 dataletime[n][ii]->SetMarkerStyle(21);
387 if((maxev-minev)<50) dataletime[n][ii]->SetMarkerSize(0.5);
388 else dataletime[n][ii]->SetMarkerSize(0.1);
389 dataletime[n][ii]->SetMarkerColor(4);
390 dataletime[n][ii]->Draw("ap");
391
392
393 if((maxev-minev)>1000 && perc>10){
394 dataletime1[n][ii]= new TGraph(countbad[n],xbd,ybd);
395 dataletime1[n][ii]->SetMarkerStyle(21);
396 dataletime1[n][ii]->SetMarkerSize(0.1);
397 dataletime1[n][ii]->SetMarkerColor(2);
398 dataletime1[n][ii]->Draw("psame");
399 }
400 else if((maxev-minev)<1000 && countbad[n]>=100){
401 dataletime1[n][ii]= new TGraph(countbad[n],xbd,ybd);
402 dataletime1[n][ii]->SetMarkerStyle(21);
403 if((maxev-minev)<50) dataletime1[n][ii]->SetMarkerSize(0.5);
404 else dataletime1[n][ii]->SetMarkerSize(0.1);
405 dataletime1[n][ii]->SetMarkerColor(2);
406 dataletime1[n][ii]->Draw("psame");
407 }
408 li.SetLineColor(1);
409 li.SetLineStyle(1);
410 li.SetLineWidth(1);
411 if(i!=6) li.DrawLine(xMIN,750,xMAX,750);
412 else li.DrawLine(xMIN,1500,xMAX,1500);
413 li.DrawLine(xMIN,3075,xMAX,3075);
414
415 li.SetLineColor(12);
416 li.SetLineStyle(4);
417 li.SetLineWidth(1);
418 for(Int_t j=hin;j<hfin;j++){
419 if(i==6) li.DrawLine(HOBT[j],0.,HOBT[j],4500.);
420 else li.DrawLine(HOBT[j],0.,HOBT[j],4000.);
421 if(trk_cal_us[j]==104){
422 calus<<"D";
423 t2->SetTextColor(6);
424 if(i==6) t2->DrawLatex(HOBT[j],4350.,calus.str().c_str());
425 else t2->DrawLatex(HOBT[j],3850.,calus.str().c_str());
426 calus.str("");
427 }
428 else{
429 calus<<"O";
430 t2->SetTextColor(3);
431 if(i==6) t2->DrawLatex(HOBT[j],4350.,calus.str().c_str());
432 else t2->DrawLatex(HOBT[j],3850.,calus.str().c_str());
433 calus.str("");
434 }
435 }
436 for(Int_t j=cin;j<cfin;j++){
437 if(i==6) ar.DrawArrow(COBT[j],1700.,COBT[j],2700.,0.01,"<");
438 else ar.DrawArrow(COBT[j],1000.,COBT[j],2000.,0.01,"<");
439 }
440
441 oss.str("");
442 DataTimeCanv[ii]->Update();
443 }
444
445 minev=maxev;
446 if(maxev==maxevent-1) {
447 countnboot=ii+1;
448 break;
449 }
450 }
451 printf("... end of packets. \n");
452
453 //*************************************************************************
454 // Save output Files
455 //*************************************************************************
456 stringstream nom1,nom2,nom3;
457
458 for(Int_t fl=0;fl<countnboot;fl++){
459 if(countnboot==1){
460 nom1<<ffile<<"_FTrkQLook_BASIC."<<outfile.Data();
461 DataTimeCanv[fl]->Print(out+nom1.str().c_str());
462 nom1.str("");
463 }
464
465 if(countnboot>=2){
466 if(!strcmp(outfile.Data(),"ps") || !strcmp(outfile.Data(),"pdf")){
467 nom1.str("");
468 nom2.str("");
469 nom3.str("");
470 nom1<<ffile<<"_FTrkQLook_BASIC.ps(";
471 nom2<<ffile<<"_FTrkQLook_BASIC.ps";
472 nom3<<ffile<<"_FTrkQLook_BASIC.ps)";
473 if(fl==0) DataTimeCanv[fl]->Print(out+nom1.str().c_str(),"portrait");
474 else if(fl==countnboot-1) DataTimeCanv[fl]->Print(out+nom3.str().c_str(),"portrait");
475 else DataTimeCanv[fl]->Print(out+nom2.str().c_str(),"portrait");
476
477 }
478 else{
479 nom1.str("");
480 nom1<<ffile<<"_FTrkQLook_BASIC-pag"<<fl+1<<"."<<outfile.Data();
481 DataTimeCanv[fl]->Print(out+nom1.str().c_str());
482 }
483 }
484 }
485
486 //
487 // Convert ps to pdf if required
488 if(!strcmp(outfile.Data(),"pdf") && countnboot>=2){
489 stringstream com;
490 com<<"ps2pdf13 "<<out<<ffile<<"_FTrkQLook_BASIC.ps "<<out<<ffile<<"_FTrkQLook_BASIC.pdf";
491 system(com.str().c_str());
492 printf("\n---> ps file converted in pdf format!\n");
493 com.str("");
494 com<<"rm -f "<<out<<ffile<<"_FTrkQLook_BASIC.ps";
495 system(com.str().c_str());
496 printf("---> ps file removed!\n\n");
497 com.str("");
498 }
499
500 datafile->Close();
501 gROOT->Reset();
502 return;
503 }

  ViewVC Help
Powered by ViewVC 1.1.23