/[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.14 - (show annotations) (download)
Fri Aug 4 15:24:01 2006 UTC (18 years, 4 months ago) by mocchiut
Branch: MAIN
CVS Tags: v1r13
Changes since 1.13: +10 -1 lines
Bug fixed in CHKCALIB + new features added

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

  ViewVC Help
Powered by ViewVC 1.1.23