/[PAMELA software]/calo/flight/FQLOOK/macros/FCaloQLOOK.cxx
ViewVC logotype

Contents of /calo/flight/FQLOOK/macros/FCaloQLOOK.cxx

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.11 - (show annotations) (download)
Mon May 29 13:15:49 2006 UTC (18 years, 6 months ago) by mocchiut
Branch: MAIN
CVS Tags: v1r10, v1r09
Changes since 1.10: +25 -10 lines
Small bug in the latchup warning fixed

1 //
2 // Check for possible errors and shows raw distribution of variables coming from the DSP (no calibrations needed) - Emiliano Mocchiutti
3 //
4 // FCaloQLOOK.c version 1.09 (2006-05-29)
5 //
6 // The only input needed is the path to the directory created by YODA for the data file you want to analyze.
7 //
8 // Changelog:
9 //
10 // 1.07 - 1.09 (2006-05-29): Fixed bug in output filename when input is not in the form DW_YYMMDD_NNN. Bug in latchup alarm not coming from the status word, fixed.
11 //
12 // 1.06 - 1.07 (2006-05-23): Don't print warning in case of latchup not recognized from the status word, fixed. Added "expert" figures from 21 to 28 which appears only in the
13 // case of latchup alarm.
14 //
15 // 1.05 - 1.06 (2006-03-22): Add optimize flag in compiling the script!
16 //
17 // 1.04 - 1.05 (2006-03-22): Corrected wrong .C files.
18 //
19 // 1.03 - 1.04 (2006-03-20): Documentation updated.
20 //
21 // 1.02 - 1.03 (2006-03-20): Changed name of shared libraries (from FCaloQLOOK_cxx.so to libFCaloQLOOK.so).
22 //
23 // 1.01 - 1.02 (2006-03-13): Include files from YODA without "event" directory.
24 //
25 // 1.00 - 1.01 (2006-02-28): Works on YODA v6 output (single file), does not require anymore calocommon package.
26 //
27 // 0.00 - 1.00 (2006-02-28): Clone of CaloQLOOK.c (ground software).
28 //
29 #include <iostream>
30 #include <fstream>
31 //
32 #include <TObject.h>
33 #include <TString.h>
34 #include <TFile.h>
35 #include <TCanvas.h>
36 #include <TH1.h>
37 #include <TH1F.h>
38 #include <TH2D.h>
39 #include <TLatex.h>
40 #include <TPad.h>
41 #include <TPolyLine.h>
42 #include <TStyle.h>
43 #include <TSystem.h>
44 //
45 #include <PamelaRun.h>
46 #include <physics/calorimeter/CalorimeterEvent.h>
47 //
48 #include <FCaloQLOOKfun.h>
49 //
50 using namespace std;
51 //
52 void stringcopy(TString& s1, const TString& s2, Int_t from=0, Int_t to=0){
53 if ( to == 0 ){
54 Int_t t2length = s2.Length();
55 s1 = "";
56 to = t2length;
57 };
58 for (Int_t i = from; i<to; i++){
59 s1.Append(s2[i],1);
60 };
61 }
62 void stringappend(TString& s1, const TString& s2){
63 Int_t t2length = s2.Length();
64 for (Int_t i = 0; i<t2length; i++){
65 s1.Append(s2[i],1);
66 };
67 }
68
69 TString getFilename(const TString filename){
70 //
71 const string fil = gSystem->BaseName(filename.Data());
72 Int_t posiz = fil.find(".root");
73 //
74 TString file2;
75 if ( posiz == -1 ){
76 file2 = gSystem->BaseName(filename.Data());
77 } else {
78 Int_t posiz2 = 0;
79 stringcopy(file2,gSystem->BaseName(filename.Data()),posiz2,posiz);
80 TString pdat(".dat");
81 stringappend(file2,pdat);
82 };
83 return file2;
84 }
85
86 void FCaloQLOOK(TString filename, Int_t fromevent=0, Int_t toevent=0, TString outDir="", TString saveas = "ps"){
87 gStyle->SetPaperSize(19.,25.);
88 const char* startingdir = gSystem->WorkingDirectory();
89 // printf(" basename is %s \n",gSystem->BaseName(filename.Data()));
90 // printf(" getfilename is %s \n",getFilename(filename).Data());
91 if ( !strcmp(outDir.Data(),"") ) outDir = startingdir;
92 //
93 //
94 ifstream myfile;
95 myfile.open(filename.Data());
96 if ( !myfile ){
97 printf(" %s :no such file, exiting...\n\n",filename.Data());
98 return;
99 };
100 myfile.close();
101 //
102 TFile *File = new TFile(filename.Data());
103 TTree *tr = (TTree*)File->Get("Physics");
104 if ( !tr ) {
105 printf(" Physics : no such tree in %s \n",filename.Data());
106 printf(" Exiting, are you sure this is a LEVEL0 not corrupted file? \n\n");
107 return;
108 };
109 //
110 // Define variables
111 //
112 Float_t ctshitthr = 0.65;
113 Float_t cbasethr = 0.95;
114 Float_t cdexythr = 0.995;
115 Float_t cdexycthr = 0.95;
116 //
117 pamela::calorimeter::CalorimeterEvent *ce = 0;
118 pamela::EventHeader *eh = 0;
119 pamela::PscuHeader *ph = 0;
120 //
121 UInt_t found;
122 tr->SetBranchStatus("*",0,&found); //disable all branches
123 //
124 found = 0;
125 tr->SetBranchStatus("iev*",1,&found);
126 // printf("enabled %i branches \n",found);
127 found = 0;
128 tr->SetBranchStatus("dexy*",1,&found);
129 // printf("enabled %i branches \n",found);
130 found = 0;
131 tr->SetBranchStatus("stwerr*",1,&found);
132 // printf("enabled %i branches \n",found);
133 found = 0;
134 tr->SetBranchStatus("perror*",1,&found);
135 // printf("enabled %i branches \n",found);
136 found = 0;
137 tr->SetBranchStatus("cal*",1,&found);
138 // printf("enabled %i branches \n",found);
139 found = 0;
140 tr->SetBranchStatus("base*",1,&found);
141 //printf("enabled %i branches \n",found);
142 found = 0;
143 tr->SetBranchStatus("Pscu*",1,&found);
144 //printf("enabled %i branches \n",found);
145 found = 0;
146 tr->SetBranchStatus("Calorimeter*",1,&found);
147 //printf("calo enabled %i branches \n",found);
148 found = 0;
149 tr->SetBranchStatus("Header*",1,&found);
150 //printf("head enabled %i branches \n",found);
151 //
152 tr->SetBranchAddress("Calorimeter", &ce);
153 tr->SetBranchAddress("Header", &eh);
154 //
155 Long64_t nevents = tr->GetEntries();
156 if ( nevents < 1 ) {
157 printf("The file is empty!\n");
158 return;
159 };
160 Int_t const size = nevents;
161 Double_t iev2[size+1];
162 Int_t ver[4][23], lver[4][23],shit[4][11], rshit[4][11], se,bl, pl, fulldiff[4],cshit, cpre[4],nullsh[4][11], lalarm[4];
163 se = 0;
164 pl = 0;
165 Float_t allbase = 0.;
166 Int_t tshit, trshit, compdata,rawdata, errorfull, calevn1, calevn2, calevn3, calevn4, pshit[4][11];
167 tshit = 0;
168 trshit = 0;
169 char *sezione;
170 Bool_t check = false;
171 sezione = "";
172 stringstream errore;
173 errore.str("");
174 //
175 TString fififile = getFilename(filename);
176 const char *file = fififile;
177 //
178 // book histograms
179 //
180 TH1F *h1;
181 TH1F *h1r;
182 TH1F *hdiff;
183 TH1F *Baseline;
184 TH1F *Dexy;
185 TH1F *Dexyc;
186 TH1F *Calstriphit;
187 TH1F *calev01;
188 TH1F *calev23;
189 TH1F *calev03;
190 TH1F *lupstw[4];
191 TH1F *lup[4];
192 TH2D *calev2;
193
194 h1 = new TH1F("C7","Strips hit, compress mode",100,0.,200.);
195 h1r = new TH1F("C8","Strips hit, raw mode",100,-1,1);
196 h1r->SetBit(TH1F::kCanRebin);
197 hdiff = new TH1F("C6","Differences in full mode",100,-3,3);
198 hdiff->SetBit(TH1F::kCanRebin);
199 Baseline = new TH1F("C9","baselines",100,0,3);
200 Baseline->SetBit(TH1F::kCanRebin);
201 Dexy = new TH1F("C12","dexy",100,0.,37000.);
202 Dexyc = new TH1F("C10","dexyc",100,0,3);
203 Dexyc->SetBit(TH1F::kCanRebin);
204 Calstriphit = new TH1F("C11","calstriphit[1:4]",100,0.,200.);
205
206 calev01 = new TH1F("C3","|calevnum(1)-calevnum(2)|",100,0,1);
207 calev01->SetBit(TH1F::kCanRebin);
208 calev23 = new TH1F("C4","|calevnum(3)-calevnum(4)|",100,0,1);
209 calev23->SetBit(TH1F::kCanRebin);
210 calev03 = new TH1F("C5","|calevnum(1)-calevnum(4)|",100,0,1);
211 calev03->SetBit(TH1F::kCanRebin);
212 calev2 = new TH2D("C2","calevnum(2)%iev",3000,0.,2.,100,0.,2.);
213 calev2->SetBit(TH2D::kCanRebin);
214
215 stringstream oss;
216 stringstream noss;
217 for ( Int_t i=0; i<4; i++){
218 oss.str("");
219 oss << "OBT stw latch up section " << i;
220 noss.str("");
221 noss << "C" << 21+i;
222 lupstw[i] = new TH1F(noss.str().c_str(),oss.str().c_str(),100,-1,1);
223 lupstw[i]->SetBit(TH1F::kCanRebin);
224 oss.str("");
225 oss << "OBT no stw latch up section " << i;
226 noss.str("");
227 noss << "C" << 25+i;
228 lup[i] = new TH1F(noss.str().c_str(),oss.str().c_str(),100,-1,1);
229 lup[i]->SetBit(TH1F::kCanRebin);
230 };
231
232 //
233 // run over each event and take out some variables
234 //
235 if ( fromevent > toevent && toevent ){
236 printf("It must be fromevent < toevent \n");
237 return;
238 };
239
240
241 if ( fromevent > nevents+1 || fromevent < 0 ) {
242 printf("You can choose fromevent between 0 (all) and %i \n",(int)nevents+1);
243 return;
244 };
245
246 if ( toevent > nevents+1 || toevent < 0 ) {
247 printf("You can choose toevent between 0 (all) and %i \n",(int)nevents+1);
248 return;
249 };
250 Int_t minevent = 0;
251 Int_t maxevent = 0;
252 if ( fromevent == 0 ) {
253 minevent = 0;
254 maxevent = nevents -1;
255 } else {
256 minevent = fromevent - 1;
257 if ( toevent > 0 ){
258 maxevent = toevent - 1;
259 } else {
260 maxevent = fromevent - 1;
261 };
262 };
263
264 for (Int_t k = 0; k < 4; k++ ){
265 for (Int_t m = 0; m < 23 ; m++ ){
266 ver[k][m] = 0 ;
267 lver[k][m] = 0 ;
268 cpre[k]=0;
269 if ( m < 11 ) {
270 pshit[k][m] = 0;
271 nullsh[k][m] = 0;
272 };
273 lalarm[k] = 0;
274 };
275 };
276 Int_t pdone, bdone;
277 pdone = 0;
278 bdone = 0;
279 bool isCOMP = 0;
280 bool isFULL = 0;
281 bool isRAW = 0;
282 Int_t alldexy=0;
283 Int_t alldexy2=0;
284 Int_t planebases=0;
285 // Int_t stri=0;
286 Int_t fcheck = 0;
287 Int_t cestw=0;
288 Int_t cmask = 127 ;
289 compdata = 0;
290 rawdata = 0;
291 errorfull = 0;
292 calevn1 = 0;
293 calevn2 = 0;
294 calevn3 = 0;
295 calevn4 = 0;
296 fulldiff[0] = 0;
297 fulldiff[1] = 0;
298 fulldiff[2] = 0;
299 fulldiff[3] = 0;
300 printf("\n Processed events: \n\n");
301 unsigned short int calev0=0;
302 unsigned short int oldcalev0;
303 unsigned short int calev1=0;
304 unsigned short int oldcalev1;
305 unsigned short int calevv2=0;
306 unsigned short int oldcalev2;
307 unsigned short int calev3=0;
308 unsigned short int oldcalev3;
309 Int_t i = minevent;
310 Float_t headc = 0.;
311 Float_t headco = 0.;
312 Bool_t h1rcheck = false;
313 Int_t intshit = 0;
314 Int_t outtshit = 0;
315 Int_t incshit = 0;
316 Int_t outcshit = 0;
317 Int_t inbase = 0;
318 Int_t outbase = 0;
319 Int_t indexy = 0;
320 Int_t outdexy = 0;
321 Int_t indexyc = 0;
322 Int_t outdexyc = 0;
323 Int_t obt = 0;
324 Int_t minobt[4];
325 Int_t maxobt[4];
326 Int_t swminobt[4];
327 Int_t swmaxobt[4];
328 Bool_t firstobt[4];
329 Bool_t swfirstobt[4];
330 for ( Int_t i = 0; i<4; i++){
331 minobt[i] = 0;
332 maxobt[i] = 0;
333 swminobt[i] = 0;
334 swmaxobt[i] = 0;
335 firstobt[i] = true;
336 swfirstobt[i] = true;
337 };
338 while ( i < maxevent+1){
339 tshit = 0;
340 trshit = 0;
341 tr->GetEntry(i);
342 iev2[i] = ce->iev;
343 //
344 ph = eh->GetPscuHeader();
345 headco = headc;
346 headc = ph->GetCounter();
347 obt = ph->GetOrbitalTime();
348 calevn1 += (int)abs((int)(ce->calevnum[0]-ce->calevnum[1]));
349 calevn2 += (int)abs((int)(ce->calevnum[2]-ce->calevnum[3]));
350 calevn3 += (int)abs((int)(ce->calevnum[0]-ce->calevnum[3]));
351 calev01->Fill(abs((int)(ce->calevnum[0]-ce->calevnum[1])));
352 calev23->Fill(abs((int)(ce->calevnum[2]-ce->calevnum[3])));
353 calev03->Fill(abs((int)(ce->calevnum[0]-ce->calevnum[3])));
354 unsigned short calvnm2 = (unsigned short)ce->calevnum[2];
355 calev2->Fill(ce->iev,calvnm2);
356 calevn4 += (int)ce->calevnum[2];
357 oldcalev0 = calev0;
358 calev0 = (int)ce->calevnum[0];
359 oldcalev1 = calev1;
360 calev1 = (int)ce->calevnum[1];
361 oldcalev2 = calevv2;
362 calevv2 = (int)ce->calevnum[2];
363 oldcalev3 = calev3;
364 calev3 = (int)ce->calevnum[3];
365 goto jumpprintout;
366 if ( (headc - headco -1.) == 0. && ((calev0 - oldcalev0 - 1) > 0 || (calev1 - oldcalev1 - 1) > 0 || (calevv2 - oldcalev2 - 1) > 0 || (calev3 - oldcalev3 - 1) > 0) ){
367 if ( i != minevent ) {
368 printf(" %f 0 Event %i: %i\n",headco,i,oldcalev0);
369 printf(" %f 0 Event %i: %i\n",headc,i+1,calev0);
370 printf(" %f 1 Event %i: %i\n",headco,i,oldcalev1);
371 printf(" %f 1 Event %i: %i\n",headc,i+1,calev1);
372 printf(" %f 2 Event %i: %i\n",headco,i,oldcalev2);
373 printf(" %f 2 Event %i: %i\n",headc,i+1,calevv2);
374 printf(" %f 3 Event %i: %i\n",headco,i,oldcalev3);
375 printf(" %f 3 Event %i: %i\n",headc,i+1,calev3);
376 isRAW = 0;
377 if ( ce->stwerr[0] & (1 << 3)) isRAW = 1;
378 if ( (calev0 - oldcalev0 - 1) > 0 && !isRAW && ce->perror[0] != 129 && oldcalev0 != 0) {
379 ver[0][10]++;
380 };
381 isRAW = 0;
382 if ( ce->stwerr[0] & (1 << 3)) isRAW = 1;
383 if ( (calev1 - oldcalev1 - 1) > 0 && !isRAW && ce->perror[1] != 129 && oldcalev1 != 0 ){
384 ver[1][10]++;
385 };
386 isRAW = 0;
387 if ( ce->stwerr[0] & (1 << 3)) isRAW = 1;
388 if ( (calevv2 - oldcalev2 - 1) > 0 && !isRAW && ce->perror[2] != 129 && oldcalev2 != 0 ){
389 ver[2][10]++;
390 };
391 isRAW = 0;
392 if ( ce->stwerr[0] & (1 << 3)) isRAW = 1;
393 if ( (calev3 - oldcalev3 - 1) > 0 && !isRAW && ce->perror[3] != 129 && oldcalev3 != 0 ){
394 ver[3][10]++;
395 };
396 }
397 };
398 jumpprintout:
399 memcpy(shit, nullsh, sizeof(nullsh));
400 memcpy(rshit, nullsh, sizeof(nullsh));
401 for (Int_t l = 0; l < 2; l++ ){
402 for (Int_t ii = 0; ii < 22; ii++){
403 if (l == 0 && ii%2 == 0){
404 se = 3;
405 pl = ii/2;
406 pdone = 0;
407 };
408 if (l == 0 && ii%2 != 0){
409 se = 2;
410 pl = (ii-1)/2;
411 pdone = 0;
412 };
413 if (l == 1 && ii%2 == 0){
414 se = 0;
415 pl = ii/2;
416 pdone = 0;
417 };
418 if (l == 1 && ii%2 != 0){
419 se = 1;
420 pl = (ii-1)/2;
421 pdone = 0;
422 };
423
424 isCOMP = 0;
425 isFULL = 0;
426 isRAW = 0;
427 if ( ce->stwerr[se] & (1 << 16) ) isCOMP = 1;
428 if ( ce->stwerr[se] & (1 << 17) ) isFULL = 1;
429 if ( ce->stwerr[se] & (1 << 3) ) isRAW = 1;
430 bl = -1;
431 for (Int_t kk = 0; kk < 96 ; kk++ ){
432 if ( kk%16 == 0 ){
433 bdone = 0;
434 bl++;
435 allbase = ce->base[l][ii][bl];
436 // alldexy=0;
437 // alldexy2=0;
438 // stri=0;
439 // for (Int_t e = 0; e < 16 ; e++ ){
440 // stri = e + 16 * bl;
441 // alldexy += (int)ce->dexyc[l][ii][stri];
442 // alldexy2 += (int)ce->dexy[l][ii][stri];
443 // };
444 };
445 //
446 if ( kk == 0 ){
447 planebases = 0;
448 alldexy=0;
449 alldexy2=0;
450 for (Int_t e = 0; e < 96 ; e++ ){
451 if ( e < 6 ) planebases += (int)ce->base[l][ii][e];
452 alldexy += (int)ce->dexyc[l][ii][e];
453 alldexy2 += (int)ce->dexy[l][ii][e];
454 };
455 };
456 //
457 if ( !isRAW ) {
458 //
459 if ( !pdone ){
460 // if ( (ce->base[l][ii][bl]>32000 || ce->base[l][ii][bl] == 0 ) && ( alldexy > 512000 || alldexy == 0) && ce->perror[se] == 0 ) {
461 if ( (planebases>192000 || planebases == 0 ) && ( alldexy > 3072000 || alldexy == 0) && ce->perror[se] == 0 ) {
462 pdone = 1;
463 pshit[se][pl]++ ;
464 if ( (ce->stwerr[se] & (1 << 4)) == 0 ) {
465 lalarm[se]++;
466 lup[se]->Fill(obt);
467 if ( firstobt[se] ) minobt[se] = obt;
468 if ( obt > maxobt[se] ) maxobt[se] = obt;
469 };
470 lver[se][2]++ ;
471 };
472 }
473 //
474 if ( !bdone ){
475 Baseline->Fill(ce->base[l][ii][bl]);
476 if ( ce->base[l][ii][bl] > 2000. && ce->base[l][ii][bl] < 4500. ){
477 inbase++;
478 } else {
479 outbase++;
480 };
481 bdone = 1;
482 };
483 //
484 if (ce->dexyc[l][ii][kk] > 0 ) {
485 shit[se][pl]++ ;
486 compdata = 1;
487 };
488 //
489 if ( isFULL ) {
490 if ( ce->dexy[l][ii][kk] > 0 && ce->dexy[l][ii][kk] < 32000 ) {
491 rshit[se][pl]++ ;
492 rawdata = 1;
493 };
494 Dexy->Fill(ce->dexy[l][ii][kk]);
495 if ( ce->dexy[l][ii][kk] < 2000. || ce->dexy[l][ii][kk] > 5000. ) {
496 outdexy++;
497 } else {
498 indexy++;
499 };
500 if ( ce->dexyc[l][ii][kk]>0 && (ce->dexy[l][ii][kk]-ce->dexyc[l][ii][kk]) != 0 && ce->perror[se] != 132 && (ce->base[l][ii][bl] == 0 || ce->base[l][ii][bl] >32000) ){
501 hdiff->Fill(ce->dexyc[l][ii][kk]-ce->dexy[l][ii][kk]);
502 fulldiff[se]++;
503 errorfull = 1;
504 };
505 };
506 //
507 Dexyc->Fill(ce->dexyc[l][ii][kk]);
508 if ( ce->dexyc[l][ii][kk] != 0. && ( ce->dexyc[l][ii][kk] < 2000. || ce->dexyc[l][ii][kk] > 5000. ) ) {
509 outdexyc++;
510 } else {
511 indexyc++;
512 };
513 //
514 if (ce->dexyc[l][ii][kk] < 0 ) ver[se][21]++ ;
515 //
516 if ( allbase == 0. || allbase > 32000.) {
517 fcheck = 0;
518 for (Int_t nn = bl*16; nn < (bl+1)*16 ; nn++){
519 if ( ce->dexyc[l][ii][nn] > 0. && ce->dexyc[l][ii][nn] < 32000. ) fcheck++;
520 };
521 if ( fcheck ) {
522 cpre[se]++;
523 allbase = 1.;
524 };
525 };
526 //
527 } else {
528 if ( !pdone ){
529 if ( ( alldexy2 > 3072000 || alldexy2 == 0) && ce->perror[se] == 0 ) {
530 // if ( (alldexy2>512000 || alldexy2 == 0) && ce->perror[se] == 0 ) {
531 pdone = 1;
532 pshit[se][pl]++ ;
533 if ( (ce->stwerr[se] & (1 << 4)) == 0 ){
534 lalarm[se]++;
535 lup[se]->Fill(obt);
536 if ( firstobt[se] ) minobt[se] = obt;
537 if ( obt > maxobt[se] ) maxobt[se] = obt;
538 };
539 lver[se][2]++ ;
540 };
541 };
542 if ( ce->dexy[l][ii][kk] > 0 && ce->dexy[l][ii][kk] < 32000 ) {
543 rshit[se][pl]++ ;
544 rawdata = 1;
545 };
546 Dexy->Fill(ce->dexy[l][ii][kk]);
547 if ( ce->dexy[l][ii][kk] < 2000. || ce->dexy[l][ii][kk] > 5000. ) {
548 outdexy++;
549 } else {
550 indexy++;
551 };
552 };
553 };
554 };
555 };
556 cshit = 0;
557 for (Int_t k = 0; k < 4 ; k++ ){
558 isCOMP = 0;
559 isFULL = 0;
560 if ( ce->stwerr[se] & (1 << 16) ) isCOMP = 1;
561 if ( ce->stwerr[se] & (1 << 17) ) isFULL = 1;
562 if ( isCOMP ) ver[k][16]++;
563 if ( isFULL ) ver[k][17]++;
564 cshit += (int)ce->calstriphit[k];
565 cestw=0;
566 if ( ce->stwerr[k] ) cestw = ce->stwerr[k] & cmask ;
567 if ( cestw ){
568 if ( cestw & (1 << 0) ) ver[k][6]++ ;
569 if ( cestw & (1 << 1) ) ver[k][5]++ ;
570 if ( cestw & (1 << 2) ) ver[k][4]++ ;
571 if ( cestw & (1 << 3) ) ver[k][3]++ ;
572 if ( cestw & (1 << 4) ){
573 ver[k][2]++ ;
574 lupstw[k]->Fill(obt);
575 if ( swfirstobt[k] ) swminobt[k] = obt;
576 if ( obt > swmaxobt[k] ) swmaxobt[k] = obt;
577 };
578 if ( cestw & (1 << 5) ) ver[k][1]++ ;
579 if ( cestw & (1 << 6) ) ver[k][0]++ ;
580 };
581 if ( ce->perror[k] != 0. ){
582 if (ce->perror[k] == 128) ver[k][7]++ ;
583 if (ce->perror[k] == 129) ver[k][8]++ ;
584 if (ce->perror[k] == 132) ver[k][11]++ ;
585 if (ce->perror[k] == 133) ver[k][12]++ ;
586 if (ce->perror[k] == 134) ver[k][13]++ ;
587 if (ce->perror[k] == 135) ver[k][14]++ ;
588 if (ce->perror[k] == 136) ver[k][15]++ ;
589 if (ce->perror[k] == 139) ver[k][18]++ ;
590 if (ce->perror[k] == 140) ver[k][19]++ ;
591 if (ce->perror[k] == 141) ver[k][20]++ ;
592 if (ce->perror[k] == 142) ver[k][22]++ ;
593 };
594 for (Int_t kk = 0; kk < 11 ; kk++ ){
595 tshit += shit[k][kk];
596 trshit += rshit[k][kk];
597 };
598 };
599 Calstriphit->Fill(cshit);
600 if ( (cshit > 0 && cshit < 25) || (cshit > 40 && cshit < 80) ){
601 incshit++;
602 } else {
603 outcshit++;
604 };
605 if ( tshit>0 ) h1->Fill(tshit);
606 if ( (tshit > 0 && tshit < 25) || (tshit > 40 && tshit < 80) ){
607 intshit++;
608 } else {
609 outtshit++;
610 };
611 if ( trshit>0 ) {
612 h1r->Fill(trshit);
613 if ( trshit < 4210 ){
614 h1rcheck = true;
615 // printf("ma come... trshit %i \n",trshit);
616 };
617 };
618 if ( i%1000 == 0 && i > 0 ) printf("%iK\n",i/1000);
619 i++;
620 };
621 printf("\n");
622
623 //
624 // output figures, first sheet:
625 //
626 gStyle->SetOptDate(0);
627 gStyle->SetOptStat(1111);
628 TCanvas *figura = new TCanvas("Calorimeter_Detector_Report_1/3", "Calorimeter_Detector_Report_1/3", 1100, 900);
629 figura->SetFillColor(10);
630 figura->Range(0,0,100,100);
631 errore.str("");
632 errore << "EXPERT -- File: " << file;
633 errore << " ";
634 TLatex *t=new TLatex();
635 t->SetTextFont(32);
636 t->SetTextColor(1);
637 t->SetTextAlign(12);
638 t->SetTextSize(0.015);
639 t->DrawLatex(2.,99.,errore.str().c_str());
640 TPad *pd5;
641 TPad *pd6;
642 TPad *pd7;
643 TPad *pd8;
644 TPad *pad1;
645 TPad *pad2;
646 TPad *pad3;
647 TPad *pad4;
648 TPad *pd1;
649 TPad *pd2;
650 TPad *pd3;
651 TPad *pd4;
652 //
653 Double_t h1max;
654 TPolyLine *banda1;
655 TPolyLine *banda2;
656 Float_t ctshit = 0;
657 Float_t ccshit = 0;
658 Float_t cbase = 0;
659 Float_t cdexy = 0;
660 Float_t cdexyc = 0;
661 //
662 if ( compdata && rawdata ){
663 ctshit = (float)intshit/((float)outtshit + (float)intshit);
664 Int_t pd5col = 10;
665 Int_t pd6col = 10;
666 if ( ctshit < ctshitthr ) {
667 check = true;
668 pd5col = 45;
669 };
670 if ( h1rcheck ) {
671 check = true;
672 pd6col = 45;
673 };
674 pd5 = new TPad("pd5","This is pad5",0.51,0.51,0.98,0.98,pd5col);
675 pd6 = new TPad("pd6","This is pad6",0.51,0.02,0.98,0.49,pd6col);
676 pd5->SetTicks();
677 pd6->SetTicks();
678 pd5->Range(0,0,100,100);
679 pd6->Range(0,0,100,100);
680 figura->cd();
681 pd5->Draw();
682 pd5->cd();
683 h1->SetXTitle("Number of hit (dexyc>0)");
684 h1->SetYTitle("Number of events");
685 h1->Draw();
686 //
687 h1max = h1->GetMaximum()*1.05;
688 Double_t xc[4] = {0.,25.,25.,0.};
689 Double_t yc[4] = {0.,0.,h1max,h1max};
690 banda1 = new TPolyLine(4,xc,yc);
691 banda1->SetLineColor(5);
692 banda1->SetFillColor(5);
693 banda1->SetLineWidth(1);
694 banda1->Draw("fSAME");
695 Double_t xd[4] = {40.,80.,80.,40.};
696 Double_t yd[4] = {0.,0.,h1max,h1max};
697 banda2 = new TPolyLine(4,xd,yd);
698 banda2->SetLineColor(5);
699 banda2->SetFillColor(5);
700 banda2->SetLineWidth(1);
701 banda2->Draw("fSAME");
702 h1->Draw("SAME");
703 //
704 figura->cd();
705 pd6->Draw();
706 pd6->cd();
707 gPad->SetLogy();
708 h1r->SetXTitle("Number of hit (dexy>0)");
709 h1r->SetYTitle("Number of events");
710 h1r->Draw();
711 h1max = h1r->GetMaximum()*2.05;
712 Double_t xg[4] = {4220.,4230.,4230.,4220.};
713 Double_t yg[4] = {0.,0.,h1max,h1max};
714 banda1 = new TPolyLine(4,xg,yg);
715 banda1->SetLineColor(5);
716 banda1->SetFillColor(5);
717 banda1->SetLineWidth(1);
718 banda1->Draw("fSAME");
719 h1r->Draw("SAME");
720 };
721 if ( (compdata && !rawdata) || (!compdata && rawdata) ){
722 if ( tshit !=0 ) {
723 ctshit = (float)intshit/((float)outtshit + (float)intshit);
724 Int_t pd5col = 10;
725 if ( ctshit < ctshitthr ) {
726 check = true;
727 pd5col = 45;
728 };
729 pd5 = new TPad("pd5","This is pad5",0.51,0.02,0.98,0.98,pd5col);
730 pd5->Range(0,0,100,100);
731 pd5->SetTicks();
732 pd5->Draw();
733 pd5->cd();
734 h1->SetXTitle("Number of hit (dexyc>0)");
735 h1->SetYTitle("Number of events");
736 h1->Draw();
737 h1max = h1->GetMaximum()*1.05;
738 Double_t xe[4] = {0.,25.,25.,0.};
739 Double_t ye[4] = {0.,0.,h1max,h1max};
740 banda1 = new TPolyLine(4,xe,ye);
741 banda1->SetLineColor(5);
742 banda1->SetFillColor(5);
743 banda1->SetLineWidth(1);
744 banda1->Draw("fSAME");
745 Double_t xf[4] = {40.,80.,80.,40.};
746 Double_t yf[4] = {0.,0.,h1max,h1max};
747 banda2 = new TPolyLine(4,xf,yf);
748 banda2->SetLineColor(5);
749 banda2->SetFillColor(5);
750 banda2->SetLineWidth(1);
751 banda2->Draw("fSAME");
752 h1->Draw("SAME");
753 };
754 if ( trshit !=0 ) {
755 Int_t pd5col = 10;
756 if ( h1rcheck ) {
757 check = true;
758 pd5col = 45;
759 };
760 pd5 = new TPad("pd5","This is pad5",0.51,0.02,0.98,0.98,pd5col);
761 pd5->Range(0,0,100,100);
762 pd5->SetTicks();
763 pd5->Draw();
764 pd5->cd();
765 gPad->SetLogy();
766 h1r->SetXTitle("Number of hit (dexyc>0 or dexy>0)");
767 h1r->SetYTitle("Number of events");
768 h1r->Draw();
769 h1max = h1r->GetMaximum()*2.05;
770 Double_t xh[4] = {4220.,4230.,4230.,4220.};
771 Double_t yh[4] = {0.,0.,h1max,h1max};
772 banda1 = new TPolyLine(4,xh,yh);
773 banda1->SetLineColor(5);
774 banda1->SetFillColor(5);
775 banda1->SetLineWidth(1);
776 banda1->Draw("fSAME");
777 h1r->Draw("SAME");
778 };
779 };
780 if ( !errorfull ) {
781 if ( calevn1 || calevn2 || calevn3 ) {
782 pd1 = new TPad("pd1","This is pad1",0.02,0.51,0.24,0.98,45);
783 pd2 = new TPad("pd2","This is pad2",0.26,0.51,0.49,0.98,45);
784 pd3 = new TPad("pd3","This is pad3",0.02,0.02,0.24,0.49,45);
785 pd4 = new TPad("pd4","This is pad4",0.26,0.02,0.49,0.49,45);
786 figura->cd();
787 // printf("ou2! \n");
788 check = true;
789 pd1->Range(0,0,100,100);
790 pd2->Range(0,0,100,100);
791 pd3->Range(0,0,100,100);
792 pd4->Range(0,0,100,100);
793 pd1->Draw();
794 pd2->Draw();
795 pd3->Draw();
796 pd4->Draw();
797
798 pd1->cd();
799 gPad->SetLogy();
800 calev01->SetXTitle("delta calevnum 1-2");
801 calev01->SetYTitle("Number of events");
802 calev01->Draw();
803
804 pd2->cd();
805 gPad->SetLogy();
806 calev23->SetXTitle("delta calevnum 3-4");
807 calev23->SetYTitle("Number of events");
808 calev23->Draw();
809
810 pd3->cd();
811 gPad->SetLogy();
812 calev03->SetXTitle("delta calevnum 1-4");
813 calev03->SetYTitle("Number of events");
814 calev03->Draw();
815
816 pd4->cd();
817 calev2->SetYTitle("calevnum 2");
818 calev2->SetXTitle("iev");
819 calev2->Draw();
820 } else {
821 if ( calevn4 ) {
822 pd3 = new TPad("pd3","This is pad3",0.02,0.02,0.49,0.98,10);
823 figura->cd();
824 pd3->Range(0,0,100,100);
825 pd3->Draw();
826 pd3->cd();
827 calev2->SetYTitle("calevnum 2");
828 calev2->SetXTitle("iev");
829 calev2->Draw();
830 } else {
831 figura->cd();
832 t=new TLatex();
833 t->SetTextFont(32);
834 t->SetTextColor(1);
835 t->SetTextSize(0.04);
836 t->SetTextAlign(12);
837 t->DrawLatex(10.,49.,"No calevnum infos from DSP");
838 };
839 };
840 } else {
841 figura->cd();
842 check = true;
843 // printf("nou! \n");
844 pd1 = new TPad("pd1","This is pad1",0.02,0.02,0.49,0.98,45);
845 pd1->Range(0,0,100,100);
846 pd1->Draw();
847 pd1->cd();
848 gPad->SetLogy();
849 hdiff->SetXTitle("Differences in FULL mode");
850 hdiff->SetYTitle("Number of events");
851 hdiff->Draw();
852 };
853
854 //
855 // output figures, second sheet:
856 //
857 TCanvas *figura2 = new TCanvas("Calorimeter_Detector_Report_2/3","Calorimeter_Detector_Report_2/3", 1100, 900);
858 if ( compdata ){
859 Int_t pd1col = 10;
860 Int_t pd2col = 10;
861 Int_t pd3col = 10;
862 Int_t pd4col = 10;
863 if ( (outdexy+indexy) ) {
864 cdexy = (float)indexy/((float)outdexy + (float)indexy);
865 if ( cdexy < cdexythr ) {
866 check = true;
867 pd4col = 45;
868 };
869 };
870 if ( (outcshit+incshit) ) {
871 ccshit = (float)incshit/((float)outcshit + (float)incshit);
872 if ( ccshit < ctshitthr ) {
873 check = true;
874 pd3col = 45;
875 };
876 };
877 if ( (outdexyc+indexyc) ) {
878 cdexyc = (float)indexyc/((float)outdexyc + (float)indexyc);
879 if ( cdexyc < cdexycthr ) {
880 check = true;
881 pd2col = 45;
882 };
883 };
884 if ( (outbase+inbase) ) {
885 cbase = (float)inbase/((float)outbase + (float)inbase);
886 if ( cbase < cbasethr ) {
887 check = true;
888 pd1col = 45;
889 };
890 };
891 figura2->SetFillColor(10);
892 figura2->Range(0,0,100,100);
893 errore.str("");
894 errore << "EXPERT -- File: " << file;
895 errore << " ";
896 t=new TLatex();
897 t->SetTextFont(32);
898 t->SetTextColor(1);
899 t->SetTextAlign(12);
900 t->SetTextSize(0.015);
901 t->DrawLatex(2.,99.,errore.str().c_str());
902 pd1 = new TPad("pd1","This is pad1",0.02,0.51,0.49,0.98,pd1col);
903 pd2 = new TPad("pd2","This is pad2",0.51,0.51,0.98,0.98,pd2col);
904 pd3 = new TPad("pd3","This is pad3",0.02,0.02,0.49,0.49,pd3col);
905 pd4 = new TPad("pd4","This is pad4",0.51,0.02,0.98,0.49,pd4col);
906 figura2->cd();
907 pd1->Range(0,0,100,100);
908 pd2->Range(0,0,100,100);
909 pd3->Range(0,0,100,100);
910 pd4->Range(0,0,100,100);
911 pd1->SetTicks();
912 pd2->SetTicks();
913 pd3->SetTicks();
914 pd4->SetTicks();
915 pd1->Draw();
916 pd2->Draw();
917 pd3->Draw();
918 pd4->Draw();
919 pd1->cd();
920 Baseline->SetXTitle("ADC channels");
921 Baseline->SetYTitle("Number of events");
922 Baseline->Draw();
923 h1max = Baseline->GetMaximum()*1.05;
924 Double_t xc[4] = {2000.,4500.,4500.,2000.};
925 Double_t yc[4] = {0.,0.,h1max,h1max};
926 banda1 = new TPolyLine(4,xc,yc);
927 banda1->SetLineColor(5);
928 banda1->SetFillColor(5);
929 banda1->SetLineWidth(1);
930 banda1->Draw("fSAME");
931 Baseline->Draw("SAME");
932 //
933 pd2->cd();
934 gPad->SetLogy();
935 Dexyc->SetXTitle("ADC channels");
936 Dexyc->SetYTitle("Number of events");
937 Dexyc->Draw();
938 h1max = Dexyc->GetMaximum()*2.05;
939 Double_t xe[4] = {2000.,5000.,5000.,2000.};
940 Double_t ye[4] = {0.,0.,h1max,h1max};
941 banda1 = new TPolyLine(4,xe,ye);
942 banda1->SetLineColor(5);
943 banda1->SetFillColor(5);
944 banda1->SetLineWidth(1);
945 banda1->Draw("fSAME");
946 Double_t xj[4] = {0.,40.,40.,0.};
947 Double_t yj[4] = {0.,0.,h1max,h1max};
948 banda2 = new TPolyLine(4,xj,yj);
949 banda2->SetLineColor(5);
950 banda2->SetFillColor(5);
951 banda2->SetLineWidth(1);
952 banda2->Draw("fSAME");
953 Dexyc->Draw("SAME");
954 //
955 pd3->cd();
956 Calstriphit->SetXTitle("Number of hit");
957 Calstriphit->SetYTitle("Number of events");
958 Calstriphit->Draw();
959 h1max = Calstriphit->GetMaximum()*1.05;
960 Double_t xg[4] = {0.,25.,25.,0.};
961 Double_t yg[4] = {0.,0.,h1max,h1max};
962 banda1 = new TPolyLine(4,xg,yg);
963 banda1->SetLineColor(5);
964 banda1->SetFillColor(5);
965 banda1->SetLineWidth(1);
966 banda1->Draw("fSAME");
967 Double_t xh[4] = {40.,80.,80.,40.};
968 Double_t yh[4] = {0.,0.,h1max,h1max};
969 banda2 = new TPolyLine(4,xh,yh);
970 banda2->SetLineColor(5);
971 banda2->SetFillColor(5);
972 banda2->SetLineWidth(1);
973 banda2->Draw("fSAME");
974 Calstriphit->Draw("SAME");
975 //
976 pd4->cd();
977 Dexy->SetXTitle("ADC channels");
978 Dexy->SetYTitle("Number of events");
979 Dexy->Draw();
980 h1max = Dexy->GetMaximum()*1.05;
981 Double_t xd[4] = {2000.,5000.,5000.,2000.};
982 Double_t yd[4] = {0.,0.,h1max,h1max};
983 banda1 = new TPolyLine(4,xd,yd);
984 banda1->SetLineColor(5);
985 banda1->SetFillColor(5);
986 banda1->SetLineWidth(1);
987 banda1->Draw("fSAME");
988 Dexy->Draw("SAME");
989 } else {
990 Int_t pd4col = 10;
991 if ( (outdexy+indexy) ) {
992 cdexy = (float)indexy/((float)outdexy + (float)indexy);
993 if ( cdexy < cdexythr ) {
994 check = true;
995 pd4col = 45;
996 };
997 };
998 figura2->SetFillColor(10);
999 figura2->Range(0,0,100,100);
1000 errore.str("");
1001 errore << "EXPERT -- File: " << file;
1002 errore << " ";
1003 t=new TLatex();
1004 t->SetTextFont(32);
1005 t->SetTextColor(1);
1006 t->SetTextAlign(12);
1007 t->SetTextSize(0.015);
1008 t->DrawLatex(2.,99.,errore.str().c_str());
1009 pd4 = new TPad("pd4","This is pad4",0.02,0.02,0.98,0.98,pd4col);
1010 figura2->cd();
1011 pd4->Range(0,0,100,100);
1012 pd4->SetTicks();
1013 pd4->Draw();
1014 //
1015 pd4->cd();
1016 Dexy->SetXTitle("ADC channels");
1017 Dexy->SetYTitle("Number of events");
1018 Dexy->Draw();
1019 h1max = Dexy->GetMaximum()*1.05;
1020 Double_t xd[4] = {2000.,5000.,5000.,2000.};
1021 Double_t yd[4] = {0.,0.,h1max,h1max};
1022 banda1 = new TPolyLine(4,xd,yd);
1023 banda1->SetLineColor(5);
1024 banda1->SetFillColor(5);
1025 banda1->SetLineWidth(1);
1026 banda1->Draw("fSAME");
1027 Dexy->Draw("SAME");
1028 };
1029 //
1030 TCanvas *figura3 = 0;
1031 Bool_t printfigure3 = false;
1032 for (Int_t i = 0; i<4; i++){
1033 if ( ver[i][2] || lver[i][2] ){
1034 printfigure3 = true;
1035 break;
1036 };
1037 };
1038 if ( printfigure3 ){
1039 figura3 = new TCanvas("Calorimeter_Detector_Report_2bis/3","Calorimeter_Detector_Report_2bis/3", 1100, 900);
1040 figura3->SetFillColor(10);
1041 figura3->Range(0,0,100,100);
1042 errore.str("");
1043 errore << "EXPERT -- File: " << file;
1044 errore << " ";
1045 t=new TLatex();
1046 t->SetTextFont(32);
1047 t->SetTextColor(1);
1048 t->SetTextAlign(12);
1049 t->SetTextSize(0.015);
1050 t->DrawLatex(2.,99.,errore.str().c_str());
1051 pd1 = new TPad("pd1","This is pad1",0.02,0.51,0.49,0.73,45);
1052 pd5 = new TPad("pd5","This is pad5",0.02,0.76,0.49,0.98,45);
1053 pd2 = new TPad("pd2","This is pad2",0.51,0.51,0.98,0.73,45);
1054 pd6 = new TPad("pd6","This is pad6",0.51,0.76,0.98,0.98,45);
1055 pd3 = new TPad("pd3","This is pad3",0.02,0.02,0.49,0.23,45);
1056 pd7 = new TPad("pd7","This is pad7",0.02,0.26,0.49,0.49,45);
1057 pd4 = new TPad("pd4","This is pad4",0.51,0.02,0.98,0.23,45);
1058 pd8 = new TPad("pd8","This is pad8",0.51,0.26,0.98,0.49,45);
1059 figura3->cd();
1060 pd1->Range(0,0,100,100);
1061 pd2->Range(0,0,100,100);
1062 pd3->Range(0,0,100,100);
1063 pd4->Range(0,0,100,100);
1064 pd1->SetTicks();
1065 pd2->SetTicks();
1066 pd3->SetTicks();
1067 pd4->SetTicks();
1068 pd1->Draw();
1069 pd2->Draw();
1070 pd3->Draw();
1071 pd4->Draw();
1072 pd5->Range(0,0,100,100);
1073 pd6->Range(0,0,100,100);
1074 pd7->Range(0,0,100,100);
1075 pd8->Range(0,0,100,100);
1076 pd5->SetTicks();
1077 pd6->SetTicks();
1078 pd7->SetTicks();
1079 pd8->SetTicks();
1080 pd5->Draw();
1081 pd6->Draw();
1082 pd7->Draw();
1083 pd8->Draw();
1084 pd1->cd();
1085 lup[0]->SetAxisRange((Double_t)min(minobt[0],swminobt[0])*0.9,(Double_t)max(maxobt[0],swmaxobt[0])*1.1,"X");
1086 lup[0]->SetXTitle("OBT");
1087 lup[0]->SetYTitle("Number of events");
1088 lup[0]->Draw();
1089 pd5->cd();
1090 lupstw[0]->SetAxisRange((Double_t)min(minobt[0],swminobt[0])*0.9,(Double_t)max(maxobt[0],swmaxobt[0])*1.1,"X");
1091 // lupstw[0]->SetAxisRange((Double_t)swminobt[0]*0.9,(Double_t)swmaxobt[0]*1.1,"X");
1092 lupstw[0]->SetXTitle("OBT");
1093 lupstw[0]->SetYTitle("Number of events");
1094 lupstw[0]->Draw();
1095 pd2->cd();
1096 lup[1]->SetAxisRange((Double_t)min(minobt[1],swminobt[1])*0.9,(Double_t)max(maxobt[1],swmaxobt[1])*1.1,"X");
1097 // lup[1]->SetAxisRange((Double_t)minobt[1]*0.9,(Double_t)maxobt[1]*1.1,"X");
1098 lup[1]->SetXTitle("OBT");
1099 lup[1]->SetYTitle("Number of events");
1100 lup[1]->Draw();
1101 pd6->cd();
1102 lupstw[1]->SetAxisRange((Double_t)min(minobt[1],swminobt[1])*0.9,(Double_t)max(maxobt[1],swmaxobt[1])*1.1,"X");
1103 // lupstw[1]->SetAxisRange((Double_t)swminobt[1]*0.9,(Double_t)swmaxobt[1]*1.1,"X");
1104 lupstw[1]->SetXTitle("OBT");
1105 lupstw[1]->SetYTitle("Number of events");
1106 lupstw[1]->Draw();
1107 pd3->cd();
1108 lup[2]->SetAxisRange((Double_t)min(minobt[2],swminobt[2])*0.9,(Double_t)max(maxobt[2],swmaxobt[2])*1.1,"X");
1109 // lup[2]->SetAxisRange((Double_t)minobt[2]*0.9,(Double_t)maxobt[2]*1.1,"X");
1110 lup[2]->SetXTitle("OBT");
1111 lup[2]->SetYTitle("Number of events");
1112 lup[2]->Draw();
1113 pd7->cd();
1114 lupstw[2]->SetAxisRange((Double_t)min(minobt[2],swminobt[2])*0.9,(Double_t)max(maxobt[2],swmaxobt[2])*1.1,"X");
1115 // lupstw[2]->SetAxisRange((Double_t)swminobt[2]*0.9,(Double_t)swmaxobt[2]*1.1,"X");
1116 lupstw[2]->SetXTitle("OBT");
1117 lupstw[2]->SetYTitle("Number of events");
1118 lupstw[2]->Draw();
1119 pd4->cd();
1120 lup[3]->SetAxisRange((Double_t)min(minobt[3],swminobt[3])*0.9,(Double_t)max(maxobt[3],swmaxobt[3])*1.1,"X");
1121 // lup[3]->SetAxisRange((Double_t)minobt[3]*0.9,(Double_t)maxobt[3]*1.1,"X");
1122 lup[3]->SetXTitle("OBT");
1123 lup[3]->SetYTitle("Number of events");
1124 lup[3]->Draw();
1125 pd8->cd();
1126 lupstw[3]->SetAxisRange((Double_t)min(minobt[3],swminobt[3])*0.9,(Double_t)max(maxobt[3],swmaxobt[3])*1.1,"X");
1127 // lupstw[3]->SetAxisRange((Double_t)swminobt[3]*0.9,(Double_t)swmaxobt[3]*1.1,"X");
1128 lupstw[3]->SetXTitle("OBT");
1129 lupstw[3]->SetYTitle("Number of events");
1130 lupstw[3]->Draw();
1131 };
1132 //
1133 // output figures, report sheet:
1134 //
1135 TCanvas *rapporto= new TCanvas("Calorimeter_Detector_Report_3/3", "Calorimeter_Detector_Report_3/3", 1100, 900);
1136 rapporto->SetFillColor(10);
1137 rapporto->Range(0,0,100,100);
1138 t=new TLatex();
1139 t->SetTextFont(32);
1140 t->SetTextColor(1);
1141 t->SetTextSize(0.05);
1142 t->SetTextAlign(12);
1143 // t->DrawLatex(33.,95.,"Calorimeter quick look: ");
1144 errore.str("");
1145 errore << "BASIC: C1 - File: " << file;
1146 errore << " ";
1147 t->SetTextSize(0.02);
1148 t->DrawLatex(2.,99.,errore.str().c_str());
1149
1150 pad1 = new TPad("pad1","This is pad1",0.02,0.47,0.49,0.90,19);
1151 pad2 = new TPad("pad2","This is pad2",0.51,0.47,0.98,0.90,19);
1152 pad3 = new TPad("pad3","This is pad3",0.02,0.02,0.49,0.45,19);
1153 pad4 = new TPad("pad4","This is pad4",0.51,0.02,0.98,0.45,19);
1154 pad1->Range(0,0,100,100);
1155 pad2->Range(0,0,100,100);
1156 pad3->Range(0,0,100,100);
1157 pad4->Range(0,0,100,100);
1158
1159 pad1->Draw();
1160 pad2->Draw();
1161 pad3->Draw();
1162 pad4->Draw();
1163
1164 for (Int_t i = 0; i < 4; i++){
1165 if (i == 2)
1166 {
1167 pad1->cd() ;
1168 sezione = "** Section YE (x even) **";
1169 }
1170 if (i == 3)
1171 {
1172 pad2->cd();
1173 sezione = "** Section YO (x odd) **";
1174 }
1175 if (i == 0)
1176 {
1177 pad3->cd();
1178 sezione = "** Section XE (y odd) **";
1179 }
1180 if (i == 1)
1181 {
1182 pad4->cd();
1183 sezione = "** Section XO (y even) **";
1184 }
1185 t->SetTextFont(32);
1186 t->SetTextColor(1);
1187 t->SetTextSize(0.05);
1188 t->SetTextAlign(12);
1189 t->DrawLatex(33.,97.,sezione);
1190 t->SetTextSize(0.05);
1191 for (Int_t j = 0; j < 23; j++){
1192 if ( ver[i][j] || lver[i][j] ) {
1193 t->SetTextColor(50);
1194 if (j == 0) {
1195 errore.str("");
1196 errore << "* DSP ack error: " << ver[i][j];
1197 errore << " time(s)";
1198 t->DrawLatex(2.,30.,errore.str().c_str());
1199 check = true;
1200 }
1201 if (j == 1) {
1202 errore.str("");
1203 errore << "* Temperature alarm: " << ver[i][j];
1204 errore << " time(s)";
1205 t->DrawLatex(2.,74.,errore.str().c_str());
1206 check = true;
1207 }
1208 if (j == 2) {
1209 // printf("boh! lalarm[%i] = %i \n",i,lalarm[i]);
1210 if ( lalarm[i] ){
1211 errore.str("");
1212 errore << "* Latch up: " << ver[i][j];
1213 errore << " (" << lalarm[i];
1214 errore << " NOT rec!): ";
1215 t->DrawLatex(2.,70.,errore.str().c_str());
1216 check = true;
1217 } else {
1218 errore.str("");
1219 errore << "* Latch up alarm: " << ver[i][j];
1220 errore << " time(s). View(s): ";
1221 t->DrawLatex(2.,70.,errore.str().c_str());
1222 check = true;
1223 };
1224 errore.str("");
1225 errore << "(" << lver[i][j];
1226 errore << " view(s))";
1227 t->DrawLatex(27.,65.,errore.str().c_str());
1228 Float_t inc=1.;
1229 for (Int_t e = 0; e < 11; e++){
1230 if ( pshit[i][e] ) {
1231 errore.str("");
1232 errore << " " << (e+1);
1233 errore << " ";
1234 t->DrawLatex(52.+inc,69.,errore.str().c_str());
1235 Int_t numer = pshit[i][e];
1236 errore.str("");
1237 errore << " (" << numer;
1238 errore << ") ";
1239 t->SetTextAngle(-70);
1240 t->DrawLatex(55.+inc,67.,errore.str().c_str());
1241 t->SetTextAngle(0);
1242 inc += 4.;
1243 }
1244 }
1245 }
1246 if (j == 3) {
1247 errore.str("");
1248 errore << "RAW mode: " << ver[i][j];
1249 errore << " time(s)";
1250 t->SetTextColor(32);
1251 t->DrawLatex(2.,90.,errore.str().c_str());
1252 }
1253 if (j == 4) {
1254 errore.str("");
1255 errore << "* CMD length error: " << ver[i][j];
1256 errore << " time(s)";
1257 t->DrawLatex(2.,66.,errore.str().c_str());
1258 check = true;
1259 }
1260 if (j == 5) {
1261 errore.str("");
1262 errore << "* Execution error: " << ver[i][j];
1263 errore << " time(s)";
1264 t->DrawLatex(2.,62.,errore.str().c_str());
1265 check = true;
1266 }
1267 if (j == 6) {
1268 errore.str("");
1269 errore << "* CRC error (st. word): " << ver[i][j];
1270 errore << " time(s)";
1271 t->DrawLatex(2.,58.,errore.str().c_str());
1272 check = true;
1273 }
1274 if (j == 7) {
1275 errore.str("");
1276 errore << "View or command not recognized: " << ver[i][j];
1277 errore << " time(s)";
1278 t->DrawLatex(2.,54.,errore.str().c_str());
1279 check = true;
1280 }
1281 if (j == 8) {
1282 errore.str("");
1283 errore << "Missing section: " << ver[i][j];
1284 errore << " time(s)";
1285 t->DrawLatex(2.,50.,errore.str().c_str());
1286 check = true;
1287 }
1288 if (j == 10) {
1289 errore.str("");
1290 errore << "Calevnum jump: " << ver[i][j];
1291 errore << " time(s)";
1292 t->DrawLatex(2.,42.,errore.str().c_str());
1293 check = true;
1294 }
1295 if (j == 11) {
1296 errore.str("");
1297 errore << "CRC error (data): " << ver[i][j];
1298 errore << " time(s)";
1299 t->DrawLatex(2.,38.,errore.str().c_str());
1300 check = true;
1301 }
1302 if (j == 12) {
1303 errore.str("");
1304 errore << "Length problems in RAW mode: " << ver[i][j];
1305 errore << " time(s)";
1306 t->DrawLatex(2.,34.,errore.str().c_str());
1307 check = true;
1308 }
1309 if (j == 13) {
1310 errore.str("");
1311 errore << "Length problems in COMPRESS mode: " << ver[i][j];
1312 errore << " time(s)";
1313 t->DrawLatex(2.,34.,errore.str().c_str());
1314 check = true;
1315 }
1316 if (j == 14) {
1317 errore.str("");
1318 errore << "Length problems in FULL mode: " << ver[i][j];
1319 errore << " time(s)";
1320 t->DrawLatex(2.,26.,errore.str().c_str());
1321 check = true;
1322 }
1323 if (j == 15) {
1324 errore.str("");
1325 errore << "Acquisition mode problems: " << ver[i][j];
1326 errore << " time(s)";
1327 t->DrawLatex(2.,22.,errore.str().c_str());
1328 check = true;
1329 }
1330 if (j == 16) {
1331 errore.str("");
1332 errore << "COMPRESS mode: " << ver[i][j];
1333 errore << " time(s)";
1334 t->SetTextColor(32);
1335 t->DrawLatex(2.,86.,errore.str().c_str());
1336 }
1337 if (j == 17) {
1338 errore.str("");
1339 errore << "FULL mode: " << ver[i][j];
1340 errore << " time(s)";
1341 t->SetTextColor(32);
1342 t->DrawLatex(2.,82.,errore.str().c_str());
1343 }
1344 if (j == 18) {
1345 errore.str("");
1346 errore << "Problems with coding: " << ver[i][j];
1347 errore << " time(s)";
1348 t->DrawLatex(2.,18.,errore.str().c_str());
1349 check = true;
1350 }
1351 if (j == 19) {
1352 errore.str("");
1353 errore << "Pedestal checksum wrong: " << ver[i][j];
1354 errore << " time(s)";
1355 t->DrawLatex(2.,14.,errore.str().c_str());
1356 check = true;
1357 }
1358 if (j == 20) {
1359 errore.str("");
1360 errore << "Thresholds checksum wrong: " << ver[i][j];
1361 errore << " time(s)";
1362 t->DrawLatex(2.,10.,errore.str().c_str());
1363 check = true;
1364 }
1365 if (j == 21) {
1366 errore.str("");
1367 errore << "WARNING! DEXYC < 0: " << ver[i][j];
1368 errore << " time(s)";
1369 t->DrawLatex(2.,6.,errore.str().c_str());
1370 check = true;
1371 }
1372 if (j == 22) {
1373 errore.str("");
1374 errore << "Packet length is zero (YODA input error), skipped: " << ver[i][j];
1375 errore << " time(s)";
1376 t->DrawLatex(2.,3.,errore.str().c_str());
1377 check = true;
1378 };
1379 };
1380 };
1381 t->SetTextColor(50);
1382 if ( fulldiff[i] !=0 ) {
1383 check = true;
1384 errore.str("");
1385 errore << "Full mode, differences between RAW and COMPRESS mode: " << fulldiff[i];
1386 errore << " time(s)";
1387 t->DrawLatex(2.,46.,errore.str().c_str());
1388 };
1389 if ( cpre[i] !=0 ) {
1390 errore.str("");
1391 errore << "Preamplifier fully transmitted: " << cpre[i];
1392 errore << " time(s)";
1393 t->SetTextColor(32);
1394 t->DrawLatex(2.,78.,errore.str().c_str());
1395 };
1396 };
1397 rapporto->cd();
1398 t->SetTextFont(32);
1399 t->SetTextColor(1);
1400 t->SetTextSize(0.05);
1401 t->SetTextAlign(12);
1402 t->DrawLatex(22.,95.,"Calorimeter quick look: ");
1403 //printf("check %i \n",check);
1404 if ( check ){
1405 t->SetTextColor(50);
1406 t->DrawLatex(60.,95.," WARNING, CHECK! ");
1407 printf("cdexyc %f cdexy %f ctshit %f cbase %f \n",cdexyc,cdexy,ctshit,cbase);
1408 } else {
1409 t->SetTextColor(32);
1410 t->DrawLatex(60.,95.," OK! ");
1411 };
1412 //
1413 // const string fil = (const char*)filename;
1414 // Int_t posiz = fil.find("dw_");
1415 // if ( posiz == -1 ) posiz = fil.find("DW_");
1416 // Int_t posiz2 = posiz+13;
1417 // TString file2;
1418 // stringcopy(file2,filename,posiz,posiz2);
1419 //
1420 const string fil = gSystem->BaseName(filename.Data());
1421 Int_t posiz = fil.find(".root");
1422 //
1423 TString file2;
1424 if ( posiz == -1 ){
1425 file2 = gSystem->BaseName(filename.Data());
1426 } else {
1427 Int_t posiz2 = 0;
1428 stringcopy(file2,gSystem->BaseName(filename.Data()),posiz2,posiz);
1429 };
1430 const char *figrec = file2;
1431 //
1432 const char *outdir = outDir;
1433 stringstream figsave;
1434 stringstream figsave1;
1435 stringstream figsave2;
1436 const char *format = saveas;
1437 if ( !strcmp(format,"ps") ) {
1438 figsave.str("");
1439 figsave << outdir << "/" ;
1440 figsave << figrec << "_CaloQLOOK.";
1441 figsave << format << "(";
1442 rapporto->Print(figsave.str().c_str(),"Landscape");
1443 figsave1.str("");
1444 figsave1 << outdir << "/" ;
1445 figsave1 << figrec << "_CaloQLOOK.";
1446 figsave1 << format;
1447 figura->Print(figsave1.str().c_str(),"Landscape");
1448 figsave2.str("");
1449 figsave2 << outdir << "/" ;
1450 figsave2 << figrec << "_CaloQLOOK.";
1451 if ( printfigure3 ){
1452 figsave2 << format;
1453 figura2->Print(figsave2.str().c_str(),"Landscape");
1454 figsave2.str("");
1455 figsave2 << outdir << "/" ;
1456 figsave2 << figrec << "_CaloQLOOK.";
1457 figsave2 << format << ")";
1458 figura3->Print(figsave2.str().c_str(),"Landscape");
1459 } else {
1460 figsave2 << format << ")";;
1461 figura2->Print(figsave2.str().c_str(),"Landscape");
1462 };
1463 } else {
1464 figsave.str("");
1465 figsave << outdir << "/" ;
1466 figsave << figrec << "_CaloQLOOK1.";
1467 figsave << format;
1468 figura->SaveAs(figsave.str().c_str());
1469 figsave.str("");
1470 figsave << outdir << "/" ;
1471 figsave << figrec << "_CaloQLOOK2.";
1472 figsave << format;
1473 figura2->SaveAs(figsave.str().c_str());
1474 if ( printfigure3 ){
1475 figsave.str("");
1476 figsave << outdir << "/" ;
1477 figsave << figrec << "_CaloQLOOK2bis.";
1478 figsave << format;
1479 figura3->SaveAs(figsave.str().c_str());
1480 };
1481 figsave.str("");
1482 figsave << outdir << "/" ;
1483 figsave << figrec << "_CaloQLOOK3.";
1484 figsave << format;
1485 rapporto->SaveAs(figsave.str().c_str());
1486 };
1487 }
1488

  ViewVC Help
Powered by ViewVC 1.1.23