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

Diff of /calo/flight/FQLOOK/macros/FCaloCHKCALIB.cxx

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by mocchiut, Mon Mar 13 09:01:22 2006 UTC revision 1.13 by mocchiut, Mon Feb 26 08:50:59 2007 UTC
# Line 1  Line 1 
1  //  //
2  //   Check the calorimter calibrations - Emiliano Mocchiutti  //   Check the calorimter calibrations - Emiliano Mocchiutti
3  //  //
4  //   FCaloCHKCALIB.c      version 1.01  (2006-03-02)  //   FCaloCHKCALIB.c      version 1.13  (2006-09-22)
5  //  //
6  //   The only input needed is the path to the directory created by YODA for the data file you want to analyze.  //   The only input needed is the path to the directory created by YODA for the data file you want to analyze.
7  //  //
8  //   Changelog:  //   Changelog:
9  //  //
10    //   1.12 - 1.13 (2006-09-22): Set upper limit in calvar plot.
11    //
12    //   1.07 - 1.12 (2006-08-04): bugs fixed.
13    //
14    //   1.07 - 1.11 (2006-07-17): Adapted to flight conditions.
15    //
16    //   1.06 - 1.07 (2006-05-29): Fixed bug in output filename when input is not in the form DW_YYMMDD_NNN. Changed threshold for bad strip warning (from 0.005 to 0.03).
17    //
18    //   1.05 - 1.06 (2006-03-22): Add optimize flag in compiling the script!
19    //
20    //   1.04 - 1.05 (2006-03-22): Corrected wrong .C files.
21    //
22    //   1.03 - 1.04 (2006-03-20): Documentation updated.
23    //
24    //   1.02 - 1.03 (2006-03-20): Changed name of shared libraries (for example from FCaloQLOOK_cxx.so to libFCaloQLOOK.so).
25    //
26    //   1.01 - 1.02 (2006-03-13): Include files from YODA without "event" directory.
27    //
28  //   1.00 - 1.01 (2006-03-02): Works on YODA v6 output (single file), does not require anymore calocommon package.  //   1.00 - 1.01 (2006-03-02): Works on YODA v6 output (single file), does not require anymore calocommon package.
29  //  //
30  //   0.00 - 1.00 (2006-03-02): Clone of CaloCHKCALIB.c  //   0.00 - 1.00 (2006-03-02): Clone of CaloCHKCALIB.c
# Line 28  Line 46 
46  #include <TPaveLabel.h>  #include <TPaveLabel.h>
47  #include <TStyle.h>  #include <TStyle.h>
48  #include <TSystem.h>  #include <TSystem.h>
49    #include <TApplication.h>
50  //  //
51  #include <event/CalibCalPedEvent.h>  #include <CalibCalPedEvent.h>
52    #include <PamelaRun.h>
53  //  //
54  using namespace std;  using namespace std;
55  //  //
56  void stringcopy(TString& s1, const TString& s2, Int_t from=0, Int_t to=0){      void stringcopy(TString& s1, const TString& s2, Int_t from=0, Int_t to=0){    
57      if ( to == 0 ){    if ( to == 0 ){
58          Int_t t2length = s2.Length();      Int_t t2length = s2.Length();
59          s1 = "";      s1 = "";
60          to = t2length;      to = t2length;
61      };    };
62      for (Int_t i = from; i<to; i++){    for (Int_t i = from; i<to; i++){
63          s1.Append(s2[i],1);      s1.Append(s2[i],1);
64      };    };
65  }  }
66  void stringappend(TString& s1, const TString& s2){      void stringappend(TString& s1, const TString& s2){    
67      Int_t t2length = s2.Length();    Int_t t2length = s2.Length();
68      for (Int_t i = 0; i<t2length; i++){    for (Int_t i = 0; i<t2length; i++){
69          s1.Append(s2[i],1);      s1.Append(s2[i],1);
70      };    };
71  }  }
72    
73  TString getFilename(const TString filename){  TString getFilename(const TString filename){
74      const string fil = (const char*)filename;    //
75      Int_t posiz = fil.find("dw_");    const string fil = gSystem->BaseName(filename.Data());
76      if ( posiz == -1 ) posiz = fil.find("DW_");    Int_t posiz = fil.find(".root");
77      if ( posiz == -1 ) return 0;    //
78      Int_t posiz2 = posiz+13;    TString file2;
79      TString file2;    if ( posiz == -1 ){
80      stringcopy(file2,filename,posiz,posiz2);      file2 = gSystem->BaseName(filename.Data());
81      } else {
82        Int_t posiz2 = 0;
83        stringcopy(file2,gSystem->BaseName(filename.Data()),posiz2,posiz);
84      TString pdat(".dat");      TString pdat(".dat");
85      stringappend(file2,pdat);      stringappend(file2,pdat);  
86      return file2;    };
87      return file2;
88  }  }
89    
90  typedef struct Calib {  typedef struct Calib {
91      Int_t iev;    Int_t iev;
92      Int_t cstwerr[4];    Int_t cstwerr[4];//per l'header contenente lo stato del calorimetro
93      Float_t cperror[4];    Float_t cperror[4];
94      Float_t mip[2][22][96];    Float_t mip[2][22][96];//(xy,piano,strip)
95      Float_t calped[2][22][96];    Float_t calped[2][22][96];
96      Float_t calgood[2][22][96];    Float_t calgood[2][22][96];
97      Float_t calthr[2][22][6];    Float_t calthr[2][22][6];
98      Float_t calrms[2][22][96];    Float_t calrms[2][22][96];
99      Float_t calbase[2][22][6];    Float_t calbase[2][22][6];
100      Float_t calvar[2][22][6];    Float_t calvar[2][22][6];
101      Float_t calpuls[2][22][96];    Float_t calpuls[2][22][96];
102  } calib;  } calib;
103    
104  void FCaloCHKCALIB(TString filename, Long64_t calibnumber = 0, TString outDir = "", Int_t figmatra = 0, TString saveas = "ps"){  
105      gStyle->SetPaperSize(19.,25.);  
106      //  //main
107      Float_t ccalrmsthr=0.99;  void FCaloCHKCALIB(TString filename, Long64_t calibnumber = 0, TString outDir = "", Int_t figmatra = 0, TString saveas = "png", Bool_t iactive =false, Bool_t w4i=false){
108      Float_t ccalpedthr=0.99;    
109      Float_t ccalbadthr=0.005;    gStyle->SetPaperSize(19.,25.);
110      Float_t ccalthrthr=0.98;    //
111      Float_t ccalvarthr=0.99;    TApplication *app = 0; //crea un ambiente root (app)
112      Float_t ccalbasthr=0.99;    if ( iactive ) app = new TApplication("app",0,0);//verifica se deve essere interattivo
113      //    //
114      Float_t ccalrms;    //definizione delle soglie per valutare problemi nell calibrazione
115      Float_t ccalped;    Float_t ccalrmsthr=0.95;// numero di strip con rms entro i limiti (99%)
116      Float_t ccalbad;    Float_t ccalpedthr=0.95;// numero di strip con piedistallo entro i limiti(99%)
117      Float_t ccalthr;    Float_t ccalbadthr=0.03;// 0.005 numero massimo di strip non utilizzate (3%)  per calibrare
118      Float_t ccalvar;    Float_t ccalthrthr=0.95;
119      Float_t ccalbas;    Float_t ccalvarthr=0.95;
120      //    Float_t ccalbasthr=0.95;
121      struct Calib calib;    //
122      stringstream titolo;    Float_t ccalrms = 0.;
123      stringstream xviewev;    Float_t ccalped = 0.;
124      stringstream yviewev;    Float_t ccalbad = 0.;
125      const char* startingdir = gSystem->WorkingDirectory();    Float_t ccalthr = 0.;
126      if ( !strcmp(outDir.Data(),"") ) outDir = startingdir;    Float_t ccalvar = 0.;
127      TString fififile =  getFilename(filename);    Float_t ccalbas = 0.;
128      const char *file;    //
129      file = fififile;    struct Calib calib;
130      //    stringstream titolo, sottotitolo;
131      ifstream myfile;    stringstream xviewev;
132      myfile.open(filename.Data());    stringstream yviewev;
133      if ( !myfile ){    
134        printf(" %s :no such file, exiting...\n\n",filename.Data());    //directory di lavoro
135      const char* startingdir = gSystem->WorkingDirectory();
136      if ( !strcmp(outDir.Data(),"") ) outDir = startingdir;
137      
138      //nome del file
139      TString fififile =  getFilename(filename);
140      const char *file;
141      file = fififile;
142      
143      //verifica se esiste il file
144      ifstream myfile;
145      myfile.open(filename.Data());
146      if ( !myfile ){
147        printf(" %s :no such file, exiting...\n\n",filename.Data());
148        return;
149      };
150      myfile.close();
151    //
152    
153      //apre il file in 'File'
154      TFile *File = new TFile(filename.Data());
155      
156      //crea struttura tree (tr) con il tree "CalibCalPed" in File
157      TTree *tr = (TTree*)File->Get("CalibCalPed");
158      //definisco struttura tree per caricare gli header cpu
159      TTree *cpuhe = (TTree*)File->Get("CalibHeader");
160    
161      if ( !tr ) {
162        printf(" CalibCalPed : no such tree in %s \n",filename.Data());
163        printf(" Exiting, are you sure this is a LEVEL0 not corrupted file? \n\n");
164        return;
165      };
166    
167      pamela::CalibCalPedEvent *ce = 0;
168      pamela::EventHeader *eh = 0;//definisco variabili di tipo header
169      pamela::EventHeader *ch =0;//definisco la variabile per header cpu
170      //  pamela::PscuHeader *ph = 0; //definisco variabile di tipo pscu
171    
172      //
173      //UInt_t found;
174      UInt_t  cpuobt=0, obt=0, obt0=0, obt1=0, obt2=0, obt3=0;
175    
176    //  tr->SetBranchStatus("*",0,&found); //disable all branches
177    //
178    //   found = 0;
179    //   tr->SetBranchStatus("iev*",1,&found);
180    //   found = 0;
181    //   tr->SetBranchStatus("cstwerr*",1,&found);
182    //   //    printf("enabled %i branches \n",found);
183    //   found = 0;
184    //   tr->SetBranchStatus("cperror*",1,&found);
185    //   //printf("enabled %i branches \n",found);
186    //   found = 0;
187    //   tr->SetBranchStatus("cal*",1,&found);
188    //   //printf("enabled %i branches \n",found);
189    //   found = 0;
190    //   tr->SetBranchStatus("CalibCalPed*",1,&found);
191      //printf("enabled %i branches \n",found);
192      //
193      tr->SetBranchAddress("CalibCalPed", &ce);//dichiaro in che ramo trovare quello che voglio puntare con ce
194      tr->SetBranchAddress("Header", &eh);//dichiaro dove trovare quello che voglio in he
195      //
196      cpuhe->SetBranchAddress("Header",&ch);
197      //
198      Long64_t ncalibs    = tr->GetEntries();//cerca il ramo Entries (calibrazioni)
199      if ( ncalibs == 0 || cpuhe->GetEntries() == 0){
200        printf(" No calibrations in this files! \n Exiting... \n");
201        return;
202      };
203      //
204      UInt_t cpuhead[1000];
205      memset(cpuhead, 0, 1000*sizeof(UInt_t));
206      for (Int_t i=0; i<cpuhe->GetEntries(); i++){
207        cpuhe->GetEntry(i);
208        if ( i < 1000 ) cpuhead[i]=ch->GetPscuHeader()->GetOrbitalTime();
209        if ( i > 1000 ){
210          printf(" ERROR: too many calibrations in this file, cannot handle it \n Exiting... \n");
211        return;        return;
212      };      };
213      myfile.close();    };
214      //    //
215      TFile *File = new TFile(filename.Data());    printf("\n This file contains %i entries which corrispond to %i calibrations \n\n",(int)ncalibs,(int)ncalibs/4);
216      //    Long64_t minev = 0;
217      TTree *tr = (TTree*)File->Get("CalibCalPed");    Long64_t maxev = ncalibs;
218      if ( !tr ) {    if ( calibnumber ){//calibnumber e' in ingresso nel main
219        printf(" CalibCalPed : no such tree in %s \n",filename.Data());      minev = (calibnumber - 1)* 4;
220        printf(" Exiting, are you sure this is a LEVEL0 not corrupted file? \n\n");      maxev = minev + 4;
221        return;    };
222      TCanvas *figura1;//finestra grafica che posso suddividere in piu' aree (pads)
223      TCanvas *figura2 = 0;
224      TCanvas *figura3;
225      TCanvas *rapporto = 0;
226      Int_t cmask = 127 ;//maschera per selezionare i Byte di errore dall'header
227      Int_t cestw = 0;   //variabile per contenere i Byte di errore del calorimetro estratti dall'header
228      Int_t ver[4][23];  //variabile per riportare gli errori(22) su ogni sezione (4)
229      
230      //azzera ver
231      for (Int_t k = 0; k < 4; k++ ){
232        for (Int_t m = 0; m < 23 ; m++ ){
233          ver[k][m] = 0 ;
234      };      };
235      pamela::CalibCalPedEvent *ce = 0;    };
236      //
237      //
238      const string fil = gSystem->BaseName(filename.Data());
239      Int_t posiz = fil.find(".root");
240      //
241      TString file2;
242      if ( posiz == -1 ){
243        file2 = gSystem->BaseName(filename.Data());
244      } else {
245        Int_t posiz2 = 0;
246        stringcopy(file2,gSystem->BaseName(filename.Data()),posiz2,posiz);
247      };
248      const char *figrec = file2;
249      //
250      const char *outdir = outDir;
251      const char *format = saveas;
252      stringstream figsave;    //definisco stringhe i/o
253      stringstream figsave1;    
254      stringstream figsave2;    
255      if ( !strcmp(format,"ps") ) {
256        figsave.str("");
257        figsave << outdir << "/" ;
258        figsave << figrec << "_CaloCHKCALIB.";
259        figsave << format;
260        figsave << "(";
261      };                
262      //
263    
264    //-----------------inizio CHECK per ricerca errori dal calorimetro-------------------
265      // to check or not to check? this is the problem...
266    
267      Bool_t check = false;//azzera flag presenza errori
268      
269      //
270      Int_t hi = (minev/4)-1;
271      //inizio loop su tutti gli header degli eventi di calibrazione
272      //  for (Int_t ci = minev; ci < maxev ; ci+=4){
273      Int_t ci = minev;
274      while ( ci < maxev ){
275        //scorre i pacchetti di 4 in 4 (cioe scorre le calibrazioni)
276        Int_t incalrms = 0;
277        Int_t outcalrms = 0;
278        Int_t totcalbad = 0;
279        Int_t incalped = 0;
280        Int_t outcalped = 0;
281        Int_t incalthr = 0;
282        Int_t outcalthr = 0;
283        Int_t incalvar = 0;
284        Int_t outcalvar = 0;
285        Int_t incalbas = 0;
286        Int_t outcalbas = 0;
287        //dall'albero calibheader, cerco obt dell cpu
288        //    cpuhe->GetEntry(ci/4);
289        hi++;
290        //    cpuobt=ch->GetPscuHeader()->GetOrbitalTime();
291        cpuobt=cpuhead[hi];
292        obt0=0;
293        obt1=0;
294        obt2=0;
295        obt3=0;
296      //      //
297      UInt_t found;      calib.iev=0;
298      tr->SetBranchStatus("*",0,&found); //disable all branches      memset(calib.cstwerr,0,4*sizeof(Int_t));
299        memset(calib.cperror,0,4*sizeof(Float_t));
300        memset(calib.calped,0,2*22*96*sizeof(Float_t));
301        memset(calib.calgood,0,2*22*96*sizeof(Float_t));
302        memset(calib.calrms,0,2*22*96*sizeof(Float_t));
303        memset(calib.calpuls,0,2*22*96*sizeof(Float_t));
304        memset(calib.calthr,0,2*22*6*sizeof(Float_t));
305        memset(calib.calvar,0,2*22*6*sizeof(Float_t));
306        memset(calib.calbase,0,2*22*6*sizeof(Float_t));
307      //      //
308      found = 0;      //inizio loop su i 4 pacchetti per ogni calibrazione (scorre 4 successivi)
309      tr->SetBranchStatus("iev*",1,&found);      //    for ( Int_t s=0 ; s<4 ;s++  ){
310      found = 0;      Int_t s = 0;
311      tr->SetBranchStatus("cstwerr*",1,&found);      obt = cpuhead[hi];
312      //    printf("enabled %i branches \n",found);      //    printf(" qui cpu header : %i hi %i entry %i \n",obt,hi,ci);
313      found = 0;      while ( labs((Int_t)(obt-cpuhead[hi])) < 100000 && ci < maxev){
314      tr->SetBranchStatus("cperror*",1,&found);  
315      //printf("enabled %i branches \n",found);        tr->GetEntry(ci);//sceglie la entry (calibrazione)del tree in cui ho tutte le sottostrutture
316      found = 0;        //      tr->GetEntry(ci+s);//sceglie la entry (calibrazione)del tree in cui ho tutte le sottostrutture
317      tr->SetBranchStatus("cal*",1,&found);        
318      //printf("enabled %i branches \n",found);        //trovo l'OBT della entry (pacchetto)
319      found = 0;        obt=eh->GetPscuHeader()->GetOrbitalTime();//cerca orbitaltime all'interno di Pscu
320      tr->SetBranchStatus("CalibCalPed*",1,&found);        //
321      //printf("enabled %i branches \n",found);        //printf(" qui pkt header : %i  \n",obt);
322      //  
323      tr->SetBranchAddress("CalibCalPed", &ce);        ci++;
324      //        
325      Long64_t ncalibs    = tr->GetEntries();        if ( labs((Int_t)(obt-cpuhead[hi])) < 100000 ){
326      if ( ncalibs == 0 ){  
327          printf(" No calibrations in this files! \n Exiting... \n");          //      s++;
328          return;          if ( ce->cstwerr[0] ) s = 0;
329      };          if ( ce->cstwerr[1] ) s = 1;
330      printf("\n This file contains %i entries which corrispond to %i calibrations \n\n",(int)ncalibs,(int)ncalibs/4);          if ( ce->cstwerr[2] ) s = 2;
331      Long64_t minev = 0;          if ( ce->cstwerr[3] ) s = 3;
332      Long64_t maxev = ncalibs;          //printf(" qua pkt header : %i s = %i hi %i \n",obt,s,hi);
333      if ( calibnumber ){          //
334          minev = (calibnumber - 1)* 4;          calib.iev = ce->iev;
335          maxev = minev + 4;          cestw = 0;
336      };          //cstwerr e' tutto l'header della sezione, mi interessano gli ultimi 2 Byte(errori del calorimetro)
337      TCanvas *figura1;          if ( ce->cstwerr[s] ){
338      TCanvas *figura2 = 0;            cestw =  ce->cstwerr[s] & cmask ; //confronto con la maschera per tenere solo gli
339      TCanvas *figura3;            ver[s][16]++;//                     ultimi 2 Byte (assegnati a cestw)
     TCanvas *rapporto = 0;  
     Int_t cmask = 127 ;  
     Int_t cestw = 0;  
     Int_t ver[4][23];  
     //  
     for (Int_t k = 0; k < 4; k++ ){  
         for (Int_t m = 0; m < 23 ; m++ ){  
             ver[k][m] = 0 ;  
340          };          };
341      };          if ( cestw ){//errori dal calorimetro
342              if ( cestw & (1 << 0) ) ver[s][6]++ ;//spostati di uno e confronto se diverso 0
343              if ( cestw & (1 << 1) ) ver[s][5]++ ;
344              if ( cestw & (1 << 2) )       ver[s][4]++ ;
345              if ( cestw & (1 << 3) ) ver[s][3]++ ;
346              if ( cestw & (1 << 4) ) ver[s][2]++ ;
347              if ( cestw & (1 << 5) ) ver[s][1]++ ;
348              if ( cestw & (1 << 6) ) ver[s][0]++ ;        
349            };
350            if ( ce->cperror[s] != 0. ){//errori dallo spacchettamento
351              if (ce->cperror[s] == 128) ver[s][7]++ ;
352              if (ce->cperror[s] == 129) ver[s][8]++ ;
353              if (ce->cperror[s] == 130) {
354                ver[s][9]++ ;
355                ver[s][16]--;
356              };
357              if (ce->cperror[s] == 132) ver[s][11]++ ;
358              if (ce->cperror[s] == 140) ver[s][19]++ ;
359              if (ce->cperror[s] == 141) ver[s][20]++ ;
360              if (ce->cperror[s] == 142) ver[s][22]++ ;
361            };
362            //lato oscuro :p
363            for ( Int_t d=0 ; d<11 ;d++  ){
364              Int_t pre = -1;
365              for ( Int_t j=0; j<96 ;j++){
366                if ( j%16 == 0 ) pre++;
367                if ( s == 2 ){
368                  //aggiungo obt del pacchetto che sta leggendo(obt)
369                  obt2=obt;
370                  calib.calped[0][2*d+1][j] = ce->calped[3][d][j];
371                  calib.cstwerr[3] = ce->cstwerr[3];
372                  calib.cperror[3] = ce->cperror[3];
373                  calib.calgood[0][2*d+1][j] = ce->calgood[3][d][j];
374                  calib.calthr[0][2*d+1][pre] = ce->calthr[3][d][pre];
375                  calib.calrms[0][2*d+1][j] = ce->calrms[3][d][j];
376                  calib.calbase[0][2*d+1][pre] = ce->calbase[3][d][pre];
377                  calib.calvar[0][2*d+1][pre] = ce->calvar[3][d][pre];
378                };
379                if ( s == 3 ){
380                  obt3=obt;
381                  calib.calped[0][2*d][j] = ce->calped[1][d][j];
382                  calib.cstwerr[1] = ce->cstwerr[1];
383                  calib.cperror[1] = ce->cperror[1];
384                  calib.calgood[0][2*d][j] = ce->calgood[1][d][j];
385                  calib.calthr[0][2*d][pre] = ce->calthr[1][d][pre];
386                  calib.calrms[0][2*d][j] = ce->calrms[1][d][j];
387                  calib.calbase[0][2*d][pre] = ce->calbase[1][d][pre];
388                  calib.calvar[0][2*d][pre] = ce->calvar[1][d][pre];
389                };
390                if ( s == 0 ){
391                  obt0=obt;
392                  calib.calped[1][2*d][j] = ce->calped[0][d][j];
393                  calib.cstwerr[0] = ce->cstwerr[0];
394                  calib.cperror[0] = ce->cperror[0];
395                  calib.calgood[1][2*d][j] = ce->calgood[0][d][j];
396                  calib.calthr[1][2*d][pre] = ce->calthr[0][d][pre];
397                  calib.calrms[1][2*d][j] = ce->calrms[0][d][j];
398                  calib.calbase[1][2*d][pre] = ce->calbase[0][d][pre];
399                  calib.calvar[1][2*d][pre] = ce->calvar[0][d][pre];
400                };
401                if ( s == 1 ){
402                  obt1=obt;
403                  calib.calped[1][2*d+1][j] = ce->calped[2][d][j];
404                  calib.cstwerr[2] = ce->cstwerr[2];
405                  calib.cperror[2] = ce->cperror[2];
406                  calib.calgood[1][2*d+1][j] = ce->calgood[2][d][j];
407                  calib.calthr[1][2*d+1][pre] = ce->calthr[2][d][pre];
408                  calib.calrms[1][2*d+1][j] = ce->calrms[2][d][j];
409                  calib.calbase[1][2*d+1][pre] = ce->calbase[2][d][pre];
410                  calib.calvar[1][2*d+1][pre] = ce->calvar[2][d][pre];
411                };
412            
413              };      
414            };//chiuso for su si(sezioni)
415          } else {
416            ci--;
417          };
418        };//chiuso for su ci(eventi)
419        //
420        //fine CHECK
421        
422      //      //
423        // Book the histograms:
424        //    Int_t i = (ci-minev)/4;
425        Int_t i = hi;
426        xviewev.str("");
427        xviewev << "x-view event " << (i+1);
428        yviewev.str("");
429        yviewev << "y-view event " << (i+1);
430        TH2F *Xview = new TH2F(xviewev.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);
431        TH2F *Yview = new TH2F(yviewev.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);
432      
433    
434    
435        //prepara gli istogrammi figures:
436        gDirectory->Delete("C14");
437        gDirectory->Delete("C15");
438        gDirectory->Delete("C16");
439        //TH1F *calped = new TH1F("C14","calped",4230,-3.5,4227.5);
440        //  TH1F *calrms = new TH1F("C15","calrms",4230,-3.5,4228.5);
441        TH1F *calped = new TH1F("C14","C14 calped",2112,-3.5,4227.5);        //istogramma unidimensionale con valori float
442        //  TH1F *calrms = new TH1F("C15","calrms",264,-2.,4226.);
443        TH1F *calrms = new TH1F("C15","C15 calrms",2112,-3.5,4228.5);
444        TH1F *calbad = new TH1F("C16","C16 calgood",4230,-3.5,4228.5);
445      //      //
446      const string fil = (const char*)filename;      gDirectory->Delete("C17");
447      Int_t posiz = fil.find("dw_");      gDirectory->Delete("C18");
448      if ( posiz == -1 ) posiz = fil.find("DW_");      gDirectory->Delete("C19");
449      Int_t posiz2 = posiz+13;      TH1F *calthr = new TH1F("C17","C17 calthr",271,-4.5,268.5);
450      TString file2;      TH1F *calvar = new TH1F("C18","C18 calvar",271,-4.5,268.5);
451      stringcopy(file2,filename,posiz,posiz2);      TH1F *calbase = new TH1F("C19","C19 calbase",271,-4.5,268.5);
     //  
     const char *figrec = file2;  
     const char *outdir = outDir;  
     const char *format = saveas;  
     stringstream figsave;      
     stringstream figsave1;      
     stringstream figsave2;      
452      //      //
453      // to check or not to check? this is the problem...      Int_t bgcolor = 10;
454        TPad *pd1 = 0;
455        TPad *pd2 = 0;
456        TPad *palette = 0;
457        TLatex *t=new TLatex();
458    
459      //      //
460      Bool_t check = false;      //pagina visualizzata solo se ci sono problemi
461        if ( figmatra ){//figmatra e' variabile in ingresso in main
462          figura2 = new TCanvas("Calorimeter:_strip_RMS", "Calorimeter:_strip_RMS", 750, 650);
463          figura2->SetFillColor(10);
464          figura2->Range(0,0,100,100);
465          bgcolor = 10;
466          pd1 = new TPad("pd1","This is pad1",0.02,0.05,0.88,0.49,bgcolor);
467          pd2 = new TPad("pd2","This is pad2",0.02,0.51,0.88,0.95,bgcolor);
468          palette = new TPad("palette","This is palette",0.90,0.05,0.98,0.90,bgcolor);
469          figura2->cd();
470          gStyle->SetOptStat("");
471          t=new TLatex();
472          t->SetTextFont(32);
473          t->SetTextColor(1);
474          t->SetTextSize(0.03);
475          t->SetTextAlign(12);
476          t->DrawLatex(90.,92.5,"ADC ch.");
477          pd1->Range(0,0,100,100);
478          pd2->Range(0,0,100,100);
479          palette->Range(0,0,100,100);
480          pd1->SetTicks();
481          pd2->SetTicks();
482          pd1->Draw();
483          pd2->Draw();
484          palette->Draw();
485          palette->cd();
486          // palette
487          TPaveLabel *box1 = new TPaveLabel(2,2,98,14,"OFF","");
488          box1->SetTextFont(32);
489          box1->SetTextColor(1);    
490          box1->SetTextSize(0.25);  
491          box1->SetFillColor(10);
492          box1->Draw();
493          TPaveLabel *box2 = new TPaveLabel(2,16,98,28,"0-1.5","");
494          box2->SetTextFont(32);
495          box2->SetTextColor(1);            
496          box2->SetTextSize(0.25);  
497          box2->SetFillColor(38);
498          box2->Draw();
499          TPaveLabel *box3 = new TPaveLabel(2,30,98,42,"1.5-4","");
500          box3->SetTextFont(32);
501          box3->SetTextColor(1);    
502          box3->SetTextSize(0.25);  
503          box3->SetFillColor(4);
504          box3->Draw();
505          TPaveLabel *box4 = new TPaveLabel(2,44,98,56,"4-6.5","");
506          box4->SetTextFont(32);
507          box4->SetTextColor(1);    
508          box4->SetTextSize(0.25);  
509          box4->SetFillColor(3);
510          box4->Draw();
511          TPaveLabel *box5 = new TPaveLabel(2,58,98,70,"6.5-11.5","");
512          box5->SetTextFont(32);
513          box5->SetTextColor(1);    
514          box5->SetTextSize(0.25);  
515          box5->SetFillColor(2);
516          box5->Draw();
517          TPaveLabel *box6 = new TPaveLabel(2,72,98,84,">11.5","");
518          box6->SetTextFont(32);
519          box6->SetTextColor(1);    
520          box6->SetTextSize(0.25);  
521          box6->SetFillColor(6);
522          box6->Draw();
523          TPaveLabel *box7 = new TPaveLabel(2,86,98,98,"BAD","");
524          box7->SetTextFont(32);
525          box7->SetTextColor(10);  
526          box7->SetTextSize(0.25);  
527          box7->SetFillColor(1);
528          box7->Draw();
529          //
530          pd1->cd();          
531          gStyle->SetOptStat("");
532          Xview->SetXTitle("strip");
533          Xview->SetYTitle("X - plane");
534          Xview->GetYaxis()->SetTitleOffset(0.5);
535          Xview->SetFillColor(bgcolor);        
536          Xview->Fill(1.,1.,1.);        
537          Xview->Draw("box");
538          pd1->Update();
539          pd2->cd();
540          gStyle->SetOptStat("");
541          Yview->SetXTitle("strip");
542          Yview->SetYTitle("Y - plane");
543          Yview->GetYaxis()->SetTitleOffset(0.5);  
544          Yview->SetFillColor(bgcolor);        
545          Yview->Fill(1.,1.,1.);        
546          Yview->Draw("box");
547          pd2->Update();
548        };
549      //      //
550      for (Int_t ci = minev; ci < maxev ; ci+=4){      // run over views and planes
551          //      //verifica quali strip sono state utilizzate per la calibrazione
552          Int_t incalrms = 0;      Int_t j = 0;
553          Int_t outcalrms = 0;      Int_t g = 0;
554          Int_t totcalbad = 0;      gStyle->SetOptStat("");
555          Int_t incalped = 0;      for (Int_t m = 0; m < 22; m++){//loop sui piani
556          Int_t outcalped = 0;        for (Int_t l = 0; l < 2; l++){//loop x y
557          Int_t incalthr = 0;          for (Int_t n = 0; n < 96; n++){ //loop sulle strip
558          Int_t outcalthr = 0;            //controlla quante strip hanno piedistallo fuori dai limiti (escludendo quelle difettose)
559          Int_t incalvar = 0;            calped->Fill((float)j,calib.calped[l][m][n]);                            
560          Int_t outcalvar = 0;            if ( (calib.calped[l][m][n] > 700. || calib.calped[l][m][n] < -700.) && (j < 4032 || j > 4048) ){
561          Int_t incalbas = 0;              outcalped++;
562          Int_t outcalbas = 0;            } else {
563          //              incalped++;
564          for ( Int_t s=0 ; s<4 ;s++  ){            };
565              tr->GetEntry(ci+s);            //controlla quali strip hanno rms fuori dai limiti (ponendo un limite diverso(piu' alto) per quelle difettose
566              calib.iev = ce->iev;            calrms->Fill((float)j,(calib.calrms[l][m][n]/4.));                                
567              //            if ( (((calib.calrms[l][m][n]/4.) > 10. || (calib.calrms[l][m][n]/4.) < 1.) && (j < 3440 || j > 3550)) || ( (j > 3439 && j < 3551)  && ((calib.calrms[l][m][n]/4.) > 150. || (calib.calrms[l][m][n]/4.) < 1.)) ){
568              //              outcalrms++;
569              //            } else {
570              cestw = 0;              incalrms++;
571              if ( ce->cstwerr[s] ){            };//controlla (conta) quali strip sono state escluse dalla calibrazione
572                  cestw =  ce->cstwerr[s] & cmask ;            calbad->Fill((float)j,(float)calib.calgood[l][m][n]);                            
573                  ver[s][16]++;            if ( calib.calgood[l][m][n] ) totcalbad++;//strip(orientazione(l),piano(m),numero(n))e' nulla, aumenta il
574              };            //  
575              if ( cestw ){            //preamplificatori(soglia max di calvar portata a 9, prima era 8)
576                  if ( cestw & (1 << 0) ) ver[s][6]++ ;            if ( n < 6 ){                
577                  if ( cestw & (1 << 1) ) ver[s][5]++ ;              calthr->Fill((float)g,(float)calib.calthr[l][m][n]);//controlla quali strip hanno soglia al difuori del limite(esclude)
578                  if ( cestw & (1 << 2) ) ver[s][4]++ ;                                                                  //(quelle difettose)
579                  if ( cestw & (1 << 3) ) ver[s][3]++ ;              if ( (calib.calthr[l][m][n] > 25. || calib.calthr[l][m][n] < 12.) && (g < 215 || g > 221) ){
580                  if ( cestw & (1 << 4) ) ver[s][2]++ ;                outcalthr++;
581                  if ( cestw & (1 << 5) ) ver[s][1]++ ;              } else {
582                  if ( cestw & (1 << 6) ) ver[s][0]++ ;                          incalthr++;
             };  
             if ( ce->cperror[s] != 0. ){  
                 if (ce->cperror[s] == 128) ver[s][7]++ ;  
                 if (ce->cperror[s] == 129) ver[s][8]++ ;  
                 if (ce->cperror[s] == 130) {  
                     ver[s][9]++ ;  
                     ver[s][16]--;  
                 };  
                 if (ce->cperror[s] == 132) ver[s][11]++ ;  
                 if (ce->cperror[s] == 140) ver[s][19]++ ;  
                 if (ce->cperror[s] == 141) ver[s][20]++ ;  
                 if (ce->cperror[s] == 142) ver[s][22]++ ;  
             };  
             //  
             for ( Int_t d=0 ; d<11 ;d++  ){  
                 Int_t pre = -1;  
                 for ( Int_t j=0; j<96 ;j++){  
                     if ( j%16 == 0 ) pre++;  
                     if ( s == 2 ){  
                         calib.calped[0][2*d+1][j] = ce->calped[3][d][j];  
                         calib.cstwerr[3] = ce->cstwerr[3];  
                         calib.cperror[3] = ce->cperror[3];  
                         calib.calgood[0][2*d+1][j] = ce->calgood[3][d][j];  
                         calib.calthr[0][2*d+1][pre] = ce->calthr[3][d][pre];  
                         calib.calrms[0][2*d+1][j] = ce->calrms[3][d][j];  
                         calib.calbase[0][2*d+1][pre] = ce->calbase[3][d][pre];  
                         calib.calvar[0][2*d+1][pre] = ce->calvar[3][d][pre];  
                     };  
                     if ( s == 3 ){  
                         calib.calped[0][2*d][j] = ce->calped[1][d][j];  
                         calib.cstwerr[1] = ce->cstwerr[1];  
                         calib.cperror[1] = ce->cperror[1];  
                         calib.calgood[0][2*d][j] = ce->calgood[1][d][j];  
                         calib.calthr[0][2*d][pre] = ce->calthr[1][d][pre];  
                         calib.calrms[0][2*d][j] = ce->calrms[1][d][j];  
                         calib.calbase[0][2*d][pre] = ce->calbase[1][d][pre];  
                         calib.calvar[0][2*d][pre] = ce->calvar[1][d][pre];  
                     };  
                     if ( s == 0 ){  
                         calib.calped[1][2*d][j] = ce->calped[0][d][j];  
                         calib.cstwerr[0] = ce->cstwerr[0];  
                         calib.cperror[0] = ce->cperror[0];  
                         calib.calgood[1][2*d][j] = ce->calgood[0][d][j];  
                         calib.calthr[1][2*d][pre] = ce->calthr[0][d][pre];  
                         calib.calrms[1][2*d][j] = ce->calrms[0][d][j];  
                         calib.calbase[1][2*d][pre] = ce->calbase[0][d][pre];  
                         calib.calvar[1][2*d][pre] = ce->calvar[0][d][pre];  
                     };  
                     if ( s == 1 ){  
                         calib.calped[1][2*d+1][j] = ce->calped[2][d][j];  
                         calib.cstwerr[2] = ce->cstwerr[2];  
                         calib.cperror[2] = ce->cperror[2];  
                         calib.calgood[1][2*d+1][j] = ce->calgood[2][d][j];  
                         calib.calthr[1][2*d+1][pre] = ce->calthr[2][d][pre];  
                         calib.calrms[1][2*d+1][j] = ce->calrms[2][d][j];  
                         calib.calbase[1][2*d+1][pre] = ce->calbase[2][d][pre];  
                         calib.calvar[1][2*d+1][pre] = ce->calvar[2][d][pre];  
                     };  
                 };  
583              };              };
584          };              calvar->Fill((float)g,(float)calib.calvar[l][m][n]);//controlla la varianza (esclude le difettose)
585          //              if ( (calib.calvar[l][m][n] > 9. || calib.calvar[l][m][n] < 1. ) && (g < 215 || g > 221) ){
586          // Book the histograms:                outcalvar++;
587          //              } else {
588          //                incalvar++;
         Int_t i = (ci-minev)/4;  
         xviewev.str("");  
         xviewev << "x-view event " << (i+1);  
         yviewev.str("");  
         yviewev << "y-view event " << (i+1);  
         TH2F *Xview = new TH2F(xviewev.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);  
         TH2F *Yview = new TH2F(yviewev.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);      
         //  
         // figures:  
         //  
         gDirectory->Delete("C14");  
         gDirectory->Delete("C15");  
         gDirectory->Delete("C16");  
         TH1F *calped = new TH1F("C14","calped",4230,-3.5,4227.5);  
         TH1F *calrms = new TH1F("C15","calrms",4230,-3.5,4228.5);  
         TH1F *calbad = new TH1F("C16","calgood",4230,-3.5,4228.5);  
         //  
         gDirectory->Delete("C17");  
         gDirectory->Delete("C18");  
         gDirectory->Delete("C19");  
         TH1F *calthr = new TH1F("C17","calthr",271,-4.5,268.5);  
         TH1F *calvar = new TH1F("C18","calvar",271,-4.5,268.5);  
         TH1F *calbase = new TH1F("C19","calbase",271,-4.5,268.5);  
         //  
         Int_t bgcolor = 10;  
         TPad *pd1 = 0;  
         TPad *pd2 = 0;  
         TPad *palette = 0;  
         TLatex *t=new TLatex();  
         if ( figmatra ){  
             figura2 = new TCanvas("Calorimeter:_strip_RMS", "Calorimeter:_strip_RMS", 750, 650);  
             figura2->SetFillColor(10);  
             figura2->Range(0,0,100,100);  
             bgcolor = 10;  
             pd1 = new TPad("pd1","This is pad1",0.02,0.05,0.88,0.49,bgcolor);  
             pd2 = new TPad("pd2","This is pad2",0.02,0.51,0.88,0.95,bgcolor);  
             palette = new TPad("palette","This is palette",0.90,0.05,0.98,0.90,bgcolor);  
             figura2->cd();  
             gStyle->SetOptStat("");  
             t=new TLatex();  
             t->SetTextFont(32);  
             t->SetTextColor(1);  
             t->SetTextSize(0.03);  
             t->SetTextAlign(12);  
             t->DrawLatex(90.,92.5,"ADC ch.");  
             pd1->Range(0,0,100,100);  
             pd2->Range(0,0,100,100);  
             palette->Range(0,0,100,100);  
             pd1->SetTicks();  
             pd2->SetTicks();  
             pd1->Draw();  
             pd2->Draw();  
             palette->Draw();  
             palette->cd();  
             // palette  
             TPaveLabel *box1 = new TPaveLabel(2,2,98,14,"OFF","");  
             box1->SetTextFont(32);  
             box1->SetTextColor(1);        
             box1->SetTextSize(0.25);      
             box1->SetFillColor(10);  
             box1->Draw();  
             TPaveLabel *box2 = new TPaveLabel(2,16,98,28,"0-1.5","");  
             box2->SetTextFont(32);  
             box2->SetTextColor(1);                
             box2->SetTextSize(0.25);      
             box2->SetFillColor(38);  
             box2->Draw();  
             TPaveLabel *box3 = new TPaveLabel(2,30,98,42,"1.5-4","");  
             box3->SetTextFont(32);  
             box3->SetTextColor(1);        
             box3->SetTextSize(0.25);      
             box3->SetFillColor(4);  
             box3->Draw();  
             TPaveLabel *box4 = new TPaveLabel(2,44,98,56,"4-6.5","");  
             box4->SetTextFont(32);  
             box4->SetTextColor(1);        
             box4->SetTextSize(0.25);      
             box4->SetFillColor(3);  
             box4->Draw();  
             TPaveLabel *box5 = new TPaveLabel(2,58,98,70,"6.5-11.5","");  
             box5->SetTextFont(32);  
             box5->SetTextColor(1);        
             box5->SetTextSize(0.25);      
             box5->SetFillColor(2);  
             box5->Draw();  
             TPaveLabel *box6 = new TPaveLabel(2,72,98,84,">11.5","");  
             box6->SetTextFont(32);  
             box6->SetTextColor(1);        
             box6->SetTextSize(0.25);      
             box6->SetFillColor(6);  
             box6->Draw();  
             TPaveLabel *box7 = new TPaveLabel(2,86,98,98,"BAD","");  
             box7->SetTextFont(32);  
             box7->SetTextColor(10);      
             box7->SetTextSize(0.25);      
             box7->SetFillColor(1);  
             box7->Draw();  
             //  
             pd1->cd();      
             gStyle->SetOptStat("");  
             Xview->SetXTitle("strip");  
             Xview->SetYTitle("X - plane");  
             Xview->GetYaxis()->SetTitleOffset(0.5);  
             Xview->SetFillColor(bgcolor);            
             Xview->Fill(1.,1.,1.);            
             Xview->Draw("box");  
             pd1->Update();  
             pd2->cd();  
             gStyle->SetOptStat("");  
             Yview->SetXTitle("strip");  
             Yview->SetYTitle("Y - plane");  
             Yview->GetYaxis()->SetTitleOffset(0.5);      
             Yview->SetFillColor(bgcolor);            
             Yview->Fill(1.,1.,1.);            
             Yview->Draw("box");  
             pd2->Update();  
         };  
         //  
         // run over views and planes  
         //  
         Int_t j = 0;  
         Int_t g = 0;  
         gStyle->SetOptStat("");  
         for (Int_t m = 0; m < 22; m++){  
             for (Int_t l = 0; l < 2; l++){  
                 for (Int_t n = 0; n < 96; n++){  
                     //  
                     calped->Fill((float)j,calib.calped[l][m][n]);                                    
                     if ( (calib.calped[l][m][n] > 700. || calib.calped[l][m][n] < -700.) && (j < 4032 || j > 4048) ){  
                         outcalped++;  
                     } else {  
                         incalped++;  
                     };  
                     calrms->Fill((float)j,(calib.calrms[l][m][n]/4.));                                
                     if ( (calib.calrms[l][m][n]/4.) > 7. || (calib.calrms[l][m][n]/4.) < 1. ){  
                         outcalrms++;  
                     } else {  
                         incalrms++;  
                     };  
                     calbad->Fill((float)j,(float)calib.calgood[l][m][n]);                                    
                     if ( calib.calgood[l][m][n] ) totcalbad++;  
                     //  
                     if ( n < 6 ){                        
                         calthr->Fill((float)g,(float)calib.calthr[l][m][n]);                                                      
                         if ( calib.calthr[l][m][n] > 21. || calib.calthr[l][m][n] < 12. ){  
                             outcalthr++;  
                         } else {  
                             incalthr++;  
                         };  
                         calvar->Fill((float)g,(float)calib.calvar[l][m][n]);                                                      
                         if ( calib.calvar[l][m][n] > 8. || calib.calvar[l][m][n] < 1. ){  
                             outcalvar++;  
                         } else {  
                             incalvar++;  
                         };  
                         calbase->Fill((float)g,(float)calib.calbase[l][m][n]);                                                    
                         if ( calib.calbase[l][m][n] > 4500. || calib.calbase[l][m][n] < 2000. ){  
                             outcalbas++;  
                         } else {  
                             incalbas++;  
                         };  
                         g++;  
                     };  
                     //  
                     j++;  
                     //  
                     if ( figmatra ){                      
                         figura2->cd();  
                         xviewev.str("");  
                         xviewev << "x-view " << i;  
                         xviewev << " event " << n;  
                         xviewev << " " << m;  
                         xviewev << " " << l;  
                         yviewev.str("");  
                         yviewev << "y-view " << i;  
                         yviewev << " event " << n;  
                         yviewev << " " << m;  
                         yviewev << " " << l;  
                         TH2F *Xview = new TH2F(xviewev.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);  
                         TH2F *Yview = new TH2F(yviewev.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);                          
                         if ( calib.calrms[l][m][n] > 0 ){  
                             Xview->SetFillColor(38);  
                             Yview->SetFillColor(38);  
                         };  
                         if ( calib.calrms[l][m][n] > 6 ){  
                             Xview->SetFillColor(4);  
                             Yview->SetFillColor(4);  
                         };  
                         if ( calib.calrms[l][m][n] > 16 ){  
                             Xview->SetFillColor(3);  
                             Yview->SetFillColor(3);  
                         };  
                         if ( calib.calrms[l][m][n] > 26 ){  
                             Xview->SetFillColor(2);  
                             Yview->SetFillColor(2);  
                         };  
                         if ( calib.calrms[l][m][n] > 46 ){  
                             Xview->SetFillColor(6);  
                             Yview->SetFillColor(6);  
                         };  
                         if ( calib.calrms[l][m][n] <= 0 || calib.calrms[l][m][n] >30000 || calib.calped[l][m][n]>25000){  
                             Xview->SetFillColor(10);  
                             Yview->SetFillColor(10);  
                         };  
                         if ( calib.calgood[l][m][n] != 0 ){  
                             Xview->SetFillColor(1);  
                             Yview->SetFillColor(1);  
                         };  
                         if ( l == 0 ) {  
                             Xview->Fill(n,m,1.);  
                             pd1->cd();                                
                             Xview->Draw("box same");  
                         };                                    
                         if ( l == 1 ) {  
                             Yview->Fill(n,m,1.);  
                             pd2->cd();  
                             Yview->Draw("box same");  
                         };                    
                     };  
                 };  
589              };              };
590          };              calbase->Fill((float)g,(float)calib.calbase[l][m][n]);//controlla baseline                                                  
591          if ( figmatra ){              if ( calib.calbase[l][m][n] > 4500. || calib.calbase[l][m][n] < 2000. ){
592                  outcalbas++;
593                } else {
594                  incalbas++;
595                };
596                g++;//contatore preamplificatoripassa alla strip successiva (0-286)
597              };
598              //
599              j++;//contatore strip
600              
601              //istogrammi (solo se ci sono stati problemi)
602              if ( figmatra ){                      
603              figura2->cd();              figura2->cd();
604              gStyle->SetOptStat("");              xviewev.str("");
605              gStyle->SetOptDate(0);              xviewev << "x-view " << i;
606              t=new TLatex();              xviewev << " event " << n;
607              t->SetTextFont(32);              xviewev << " " << m;
608              t->SetTextColor(1);              xviewev << " " << l;
609              t->SetTextSize(0.03);              yviewev.str("");
610              t->SetTextAlign(12);              yviewev << "y-view " << i;
611              titolo.str("");              yviewev << " event " << n;
612              titolo << "C13 - Calorimeter: strip RMS - file ";              yviewev << " " << m;
613              titolo << file;              yviewev << " " << l;
614              titolo << " - calibration number ";              TH2F *Xview = new TH2F(xviewev.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);//istogramma 2d
615              titolo << (i+1);              TH2F *Yview = new TH2F(yviewev.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);                    
616              t->DrawLatex(0.5,97.,titolo.str().c_str());              if ( calib.calrms[l][m][n] > 0 ){
617              pd1->Update();                Xview->SetFillColor(38);
618              pd2->Update();                Yview->SetFillColor(38);
619              figura2->Update();              };
620          };              if ( calib.calrms[l][m][n] > 6 ){
621          //                Xview->SetFillColor(4);
622          figura1 = new TCanvas("Calorimeter_calped_calrms_calgood", "Calorimeter_calped_calrms_calgood", 750, 950);                Yview->SetFillColor(4);
623          figura1->SetFillColor(10);              };
624          figura1->Range(0,0,100,100);              if ( calib.calrms[l][m][n] > 16 ){
625          //                Xview->SetFillColor(3);
626          ccalped = (float)incalped/((float)outcalped + (float)incalped);                Yview->SetFillColor(3);
627          Int_t f1pd1col = 10;              };
628          if ( ccalped < ccalpedthr ) {              if ( calib.calrms[l][m][n] > 26 ){
629              check = true;                      Xview->SetFillColor(2);
630              f1pd1col = 45;                Yview->SetFillColor(2);
631          };              };
632          //              if ( calib.calrms[l][m][n] > 46 ){
633          ccalrms = (float)incalrms/((float)outcalrms + (float)incalrms);                Xview->SetFillColor(6);
634          Int_t f1pd2col = 10;                Yview->SetFillColor(6);
635          if ( ccalrms < ccalrmsthr ) {              };
636              check = true;                    if ( calib.calrms[l][m][n] <= 0 || calib.calrms[l][m][n] >30000 || calib.calped[l][m][n]>25000){
637              f1pd2col = 45;                Xview->SetFillColor(10);
638          };                Yview->SetFillColor(10);
639          //              };
640          ccalbad = (float)totcalbad/4224.;              if ( calib.calgood[l][m][n] != 0 ){
641          Int_t f1pd3col = 10;                Xview->SetFillColor(1);
642          if ( ccalbad > ccalbadthr ) {                Yview->SetFillColor(1);
643              check = true;                    };
644              f1pd3col = 45;              if ( l == 0 ) {
645          };                Xview->Fill(n,m,1.);
646          //                pd1->cd();                                    
647          TPad *f1pd1 = new TPad("f1pd1","This is f1pad1",0.02,0.684,0.98,0.95,f1pd1col);                Xview->Draw("box same");
648          TPad *f1pd2 = new TPad("f1pd2","This is f1pad2",0.02,0.367,0.98,0.634,f1pd2col);              };                              
649          TPad *f1pd3 = new TPad("f1pd3","This is f1pad3",0.02,0.05,0.98,0.317,f1pd3col);              if ( l == 1 ) {
650          figura1->Clear();                Yview->Fill(n,m,1.);
651          figura1->cd();                pd2->cd();
652          f1pd1->SetTicks();                Yview->Draw("box same");
653          f1pd2->SetTicks();              };              
654          f1pd3->SetTicks();            };//fine istogrammi
655          f1pd1->Draw();          };//fine loop strip per piano
656          f1pd2->Draw();        };//fine loop x y
657          f1pd3->Draw();      };//fine loop piani
658          figura1->Draw();  
659          figura3 = new TCanvas("Calorimeter_calthr_calvar_calbase", "Calorimeter_calthr_calvar_calbase", 750, 950);      //disega la figura
660          figura3->SetFillColor(10);      if ( figmatra ){
661          figura3->Range(0,0,100,100);        figura2->cd();
662          //        gStyle->SetOptStat("");
663          ccalthr = (float)incalthr/((float)outcalthr + (float)incalthr);        gStyle->SetOptDate(0);
664          Int_t f3pd1col = 10;        t=new TLatex();
665          if ( ccalthr < ccalthrthr ) {        t->SetTextFont(32);
666              check = true;              t->SetTextColor(1);
667              f3pd1col = 45;        t->SetTextSize(0.03);
668          };        t->SetTextAlign(12);
669          //        titolo.str("");
670          ccalvar = (float)incalvar/((float)outcalvar + (float)incalvar);        titolo << "C13 - Calorimeter: strip RMS - file ";
671          Int_t f3pd2col = 10;        titolo << file;
672          if ( ccalvar < ccalvarthr ) {        titolo << " - calibration number ";
673              check = true;              titolo << (i+1);
674              f3pd2col = 45;        t->DrawLatex(0.5,97.,titolo.str().c_str());
675          };        pd1->Update();
676          //        pd2->Update();
677          ccalbas = (float)incalbas/((float)outcalbas + (float)incalbas);        figura2->Update();
678          Int_t f3pd3col = 10;      };
679          if ( ccalbas < ccalbasthr ) {      //fine pagina visualizzata solo se ci sono problemi
680              check = true;            //
681              f3pd3col = 45;  
682        //Prepara le finestre
683           //finestra con figure C14,C15,C16
684        figura1 = new TCanvas("Calorimeter_calped_calrms_calgood", "Calorimeter_calped_calrms_calgood", 750, 950);//nuova finestra
685        figura1->SetFillColor(10);
686        figura1->Range(0,0,100,100);
687        //
688        ccalped = (float)incalped/((float)outcalped + (float)incalped);
689        Int_t f1pd1col = 10;//costante=10
690        if ( ccalped < ccalpedthr ) { //se % strip con piedistallo buono < numero minimo segna soglia  
691          check = true;     //flag per segnalare errori
692          f1pd1col = 45;    // (se ci sono problemi, cambia colore)
693        };
694        //
695        ccalrms = (float)incalrms/((float)outcalrms + (float)incalrms);
696        Int_t f1pd2col = 10;
697        if ( ccalrms < ccalrmsthr ) { //se % strip con rms buono< numero minimo segna errore
698          check = true;    
699          f1pd2col = 45;
700        };
701        //
702        ccalbad = (float)totcalbad/4224.;
703        Int_t f1pd3col = 10;
704        if ( ccalbad > ccalbadthr ) { //se il numero di strip escluse dalla calibrazione e' troppo alto segna errore
705          check = true;    
706          f1pd3col = 45;
707        };
708        //
709        TPad *f1pd1 = new TPad("f1pd1","This is f1pad1",0.02,0.684,0.98,0.95,f1pd1col);//prepara le pad di figura1
710        TPad *f1pd2 = new TPad("f1pd2","This is f1pad2",0.02,0.367,0.98,0.634,f1pd2col);
711        TPad *f1pd3 = new TPad("f1pd3","This is f1pad3",0.02,0.05,0.98,0.317,f1pd3col);
712        figura1->Clear();
713        figura1->cd();
714        f1pd1->SetTicks();
715        f1pd2->SetTicks();
716        f1pd3->SetTicks();
717        f1pd1->Draw();
718        f1pd2->Draw();
719        f1pd3->Draw();
720        figura1->Draw();
721    
722           //finestra con figure C17,C18,C19
723        figura3 = new TCanvas("Calorimeter_calthr_calvar_calbase", "Calorimeter_calthr_calvar_calbase", 750, 950);
724        figura3->SetFillColor(10);
725        figura3->Range(0,0,100,100);
726        //
727        ccalthr = (float)incalthr/((float)outcalthr + (float)incalthr);
728        Int_t f3pd1col = 10;
729        if ( ccalthr < ccalthrthr ) { //controlla % strip fuori soglia
730          check = true;    
731          f3pd1col = 45;
732        };
733        //
734        ccalvar = (float)incalvar/((float)outcalvar + (float)incalvar);
735        Int_t f3pd2col = 10;
736        if ( ccalvar < ccalvarthr ) { //controlla strip con varianza fuori dai limiti
737          check = true;    
738          f3pd2col = 45;
739        };
740        //
741        ccalbas = (float)incalbas/((float)outcalbas + (float)incalbas);
742        Int_t f3pd3col = 10;
743        if ( ccalbas < ccalbasthr ) { //controlla strip con baseline fuori dai limiti
744          check = true;    
745          f3pd3col = 45;
746        };
747        //
748        TPad *f3pd1 = new TPad("f3pd1","This is f3pad1",0.02,0.684,0.98,0.95,f3pd1col);//prepara le pad di figura 3
749        TPad *f3pd2 = new TPad("f3pd2","This is f3pad2",0.02,0.367,0.98,0.634,f3pd2col);
750        TPad *f3pd3 = new TPad("f3pd3","This is f3pad3",0.02,0.05,0.98,0.317,f3pd3col);
751        figura3->Clear();//cancella tutto in figura 3
752        figura3->cd();
753        f3pd1->SetTicks();
754        f3pd2->SetTicks();
755        f3pd3->SetTicks();
756        f3pd1->Draw();
757        f3pd2->Draw();
758        f3pd3->Draw();
759        figura3->Draw();      
760        
761    
762        //mette i titoli nella figura 1
763        gStyle->SetOptStat("N");
764        figura1->cd();
765        gStyle->SetNdivisions(322,"x");
766        t=new TLatex();
767        t->SetTextFont(32);
768        t->SetTextColor(1);
769        t->SetTextSize(0.025);
770        t->SetTextAlign(12);
771        titolo.str("");
772        titolo << "EXPERT - Calorimeter: calped/calrms/calgood - file ";
773        titolo << file;
774        titolo << " - calibration number ";
775        titolo << (i+1);
776        sottotitolo.str("");
777        sottotitolo << "CPU OBT:" <<cpuobt;
778        sottotitolo << " | OBT pk1:" <<obt0;
779        sottotitolo << " - OBT pk2:"<<obt1;
780        sottotitolo << " - OBT pk3:"<<obt2;
781        sottotitolo << " - OBT pk4:"<<obt3;
782        t->DrawLatex(0.5,98.,titolo.str().c_str());
783        t->SetTextSize(0.02);
784        t->DrawLatex(0.5,96.,sottotitolo.str().c_str());
785        t->SetTextSize(0.03);
786        //
787        f1pd1->cd();
788        //titoli al grafico calped
789        calped->GetXaxis()->SetNdivisions(322);
790        calped->SetXTitle("strip");
791        calped->SetYTitle("ADC channels");
792        calped->SetMaximum(3000.);
793        calped->SetMinimum(-3000.);
794    //disegna istogramma calped
795        calped->Draw();
796        //disegna la banda di accettazione
797        TPolyLine *banda1;
798        Double_t xc[4] = {0.,4224.,4224.,0.};
799        Double_t yc[4] = {-700.,-700.,700.,700.};
800        banda1 = new TPolyLine(4,xc,yc);
801        banda1->SetLineColor(5);
802        banda1->SetFillColor(5);
803        banda1->SetLineWidth(1);
804        banda1->Draw("fSAME");
805        //banda per le strip difettose
806        TPolyLine *banda2;
807        Double_t xc2[4] = {4031.5,4047.5,4047.5,4031.5};
808        //  Double_t yc2[4] = {-2500.,-2500.,28000.,28000.};
809        Double_t yc2[4] = {-3000.,-3000.,3000.,3000.};
810        banda2 = new TPolyLine(4,xc2,yc2);
811        banda2->SetLineColor(5);
812        banda2->SetFillColor(5);
813        banda2->SetLineWidth(1);
814        banda2->Draw("fSAME");
815    
816        calped->Draw("SAME");
817        //
818        f1pd2->cd();
819        //prepara grafico calrms
820        f1pd2->SetLogy();
821        calrms->GetXaxis()->SetNdivisions(322);
822    //disegna istogramma calrms
823        calrms->Draw();
824        //banda di accettazione
825        Double_t xd[4] = {0.,4224.,4224.,0.};
826        Double_t yd[4] = {1.,1.,10.,10.};
827        banda1 = new TPolyLine(4,xd,yd);
828        banda1->SetLineColor(5);
829        banda1->SetFillColor(5);
830        banda1->SetLineWidth(1);
831        banda1->Draw("fSAME");
832    
833        Float_t minrm = calrms->GetMinimum();
834        Float_t maxrm = calrms->GetMaximum();
835        Double_t xrm2[4] = {3449.,3551.,3551.,3449.};
836        Double_t yrm2[4] = {minrm,minrm,maxrm,maxrm};
837        //banda per strip difettose
838        banda2 = new TPolyLine(4,xrm2,yrm2);
839        banda2->SetLineColor(5);
840        banda2->SetFillColor(5);
841        banda2->SetLineWidth(1);
842        banda2->Draw("fSAME");
843    
844        calrms->SetXTitle("strip");
845        calrms->SetYTitle("ADC channels");
846    
847        calrms->Draw("SAME");
848        //prepara grafico calbad
849        f1pd3->cd();
850        gStyle->SetNdivisions(344,"x");
851        calbad->GetXaxis()->SetNdivisions(322);
852    //disegna calbad
853        calbad->Draw();
854        calbad->SetXTitle("strip");
855        calbad->SetYTitle("0=good 255=bad");
856        //
857        f1pd1->Update();
858        f1pd2->Update();
859        f1pd3->Update();
860        figura1->Update();
861        //
862    
863        
864    //pagina con figure C17,C18,C19
865        figura3->cd();
866        gStyle->SetNdivisions(644,"x");
867        t=new TLatex();
868        t->SetTextFont(32);
869        t->SetTextColor(1);
870        t->SetTextSize(0.025);
871        t->SetTextAlign(12);
872        titolo.str("");
873        titolo << "EXPERT - Calorimeter: calthr/calvar/calbase - file ";
874        titolo << file;
875        titolo << " - calibration number ";
876        titolo << (i+1);
877        t->DrawLatex(0.5,98.,titolo.str().c_str());
878        t->SetTextSize(0.02);
879        t->DrawLatex(0.5,96.,sottotitolo.str().c_str());
880        t->SetTextSize(0.03);
881        //
882        f3pd1->cd();
883        calthr->GetXaxis()->SetNdivisions(644);
884        calthr->SetXTitle("pre-amplifier");
885        calthr->SetYTitle("ADC channels");
886        calthr->Draw();
887        Double_t xe[4] = {0.,264.,264.,0.};
888        Double_t ye[4] = {12.,12.,25.,25.};
889        banda1 = new TPolyLine(4,xe,ye);
890        banda1->SetLineColor(5);
891        banda1->SetFillColor(5);
892        banda1->SetLineWidth(1);
893        banda1->Draw("fSAME");
894    
895        minrm = calthr->GetMinimum();
896        maxrm = 1.05*calthr->GetMaximum();
897        Double_t xth2[4] = {215.,221.,221.,215.};
898        Double_t yth2[4] = {minrm,minrm,maxrm,maxrm};
899        banda2 = new TPolyLine(4,xth2,yth2);
900        banda2->SetLineColor(5);
901        banda2->SetFillColor(5);
902        banda2->SetLineWidth(1);
903        banda2->Draw("fSAME");
904        //
905        calthr->Draw("SAME");
906    
907    
908        f3pd2->cd();
909        //  gPad->SetLogy();
910        //banda di soglia per calvar portata a 9, prima era a 8)
911        calvar->SetMaximum(25.);
912        calvar->GetXaxis()->SetNdivisions(644);
913        calvar->SetXTitle("pre-amplifier");
914        calvar->SetYTitle("ADC channels");
915        calvar->Draw();
916        Double_t xt[4] = {0.,264.,264.,0.};
917        Double_t yt[4] = {1.,1.,9.,9.};
918        banda1 = new TPolyLine(4,xt,yt);
919        banda1->SetLineColor(5);
920        banda1->SetFillColor(5);
921        banda1->SetLineWidth(1);
922        banda1->Draw("fSAME");
923    
924        minrm = calvar->GetMinimum();
925        maxrm = 1.05*calvar->GetMaximum();
926        Double_t xva2[4] = {215.,221.,221.,215.};
927        Double_t yva2[4] = {minrm,minrm,maxrm,maxrm};
928        banda2 = new TPolyLine(4,xva2,yva2);
929        banda2->SetLineColor(5);
930        banda2->SetFillColor(5);
931        banda2->SetLineWidth(1);
932        banda2->Draw("fSAME");
933        //
934        calvar->Draw("SAME");
935    
936    
937        f3pd3->cd();
938        calbase->GetXaxis()->SetNdivisions(644);
939        calbase->SetXTitle("pre-amplifier");
940        calbase->SetYTitle("ADC channels");
941        calbase->Draw();
942        Double_t xg[4] = {0.,264.,264.,0.};
943        Double_t yg[4] = {2000.,2000.,4500.,4500.};
944        banda1 = new TPolyLine(4,xg,yg);
945        banda1->SetLineColor(5);
946        banda1->SetFillColor(5);
947        banda1->SetLineWidth(1);
948        banda1->Draw("fSAME");
949        calbase->Draw("SAME");
950        //
951        f3pd1->Update();
952        f3pd2->Update();
953        f3pd3->Update();
954        figura3->Update();
955        //
956        //file output
957        if ( !strcmp(format,"ps") ) {
958          if ( figmatra ) {
959            figura2->Print(figsave.str().c_str(),"Portrait");
960            if ( ci == minev ) {
961              figsave.str("");
962              figsave << outdir << "/" ;
963              figsave << figrec << "_CaloCHKCALIB.";
964              figsave << format;
965          };          };
966          //        };
967          TPad *f3pd1 = new TPad("f3pd1","This is f3pad1",0.02,0.684,0.98,0.95,f3pd1col);        //
968          TPad *f3pd2 = new TPad("f3pd2","This is f3pad2",0.02,0.367,0.98,0.634,f3pd2col);        figura1->Print(figsave.str().c_str(),"Portrait");
969          TPad *f3pd3 = new TPad("f3pd3","This is f3pad3",0.02,0.05,0.98,0.317,f3pd3col);        if ( ci == minev ) {
970          figura3->Clear();          figsave.str("");
971          figura3->cd();          figsave << outdir << "/" ;
972          f3pd1->SetTicks();          figsave << figrec << "_CaloCHKCALIB.";
973          f3pd2->SetTicks();          figsave << format;
974          f3pd3->SetTicks();        };
975          f3pd1->Draw();        //            
976          f3pd2->Draw();        figura3->Print(figsave.str().c_str(),"Portrait");
977          f3pd3->Draw();        //
978          figura3->Draw();            } else {
979          //        if ( figmatra ) {
980          gStyle->SetOptStat("N");          figsave.str("");
981          figura1->cd();          figsave << outdir << "/" ;
982          gStyle->SetNdivisions(322,"x");          figsave << figrec << "_CaloCHKCALIB1_";
983          t=new TLatex();          figsave << (i+1) << ".";
984          t->SetTextFont(32);          figsave << format;
985          t->SetTextColor(1);          figura2->SaveAs(figsave.str().c_str());
986          t->SetTextSize(0.025);        };
987          t->SetTextAlign(12);        //
988          titolo.str("");        figsave1.str("");
989          titolo << "EXPERT - Calorimeter: calped/calrms/calgood - file ";        figsave1 << outdir << "/" ;
990          titolo << file;        figsave1 << figrec << "_CaloCHKCALIB2_";
991          titolo << " - calibration number ";        figsave1 << (i+1) << ".";
992          titolo << (i+1);        figsave1 << format;
993          t->DrawLatex(0.5,97.,titolo.str().c_str());        figura1->SaveAs(figsave1.str().c_str());
994          t->SetTextSize(0.03);        //
995          f1pd1->cd();        figsave2.str("");
996          //        figsave2 << outdir << "/" ;
997          calped->GetXaxis()->SetNdivisions(322);        figsave2 << figrec << "_CaloCHKCALIB3_";
998          calped->SetXTitle("strip");        figsave2 << (i+1) << ".";
999          calped->SetYTitle("ADC channels");        figsave2 << format;
1000          calped->Draw();        figura3->SaveAs(figsave2.str().c_str());
1001          TPolyLine *banda1;        //
1002          Double_t xc[4] = {0.,4224.,4224.,0.};      };
1003          Double_t yc[4] = {-700.,-700.,700.,700.};      if ( iactive && w4i ){
1004          banda1 = new TPolyLine(4,xc,yc);        while ( gROOT->GetListOfCanvases()->FindObject(figura2) || gROOT->GetListOfCanvases()->FindObject(figura1) || gROOT->GetListOfCanvases()->FindObject(figura3) ){
1005          banda1->SetLineColor(5);          gSystem->ProcessEvents();
1006          banda1->SetFillColor(5);          gSystem->Sleep(10);
1007          banda1->SetLineWidth(1);        };
1008          banda1->Draw("fSAME");      };
1009          TPolyLine *banda2;    };//fine del loop sulle calibrazioni
1010          Double_t xc2[4] = {4031.5,4047.5,4047.5,4031.5};    //
1011          Double_t yc2[4] = {-2500.,-2500.,28000.,28000.};    //
1012          banda2 = new TPolyLine(4,xc2,yc2);    //
1013          banda2->SetLineColor(5);    //
1014          banda2->SetFillColor(5);    //  report sheet:
1015          banda2->SetLineWidth(1);    //
1016          banda2->Draw("fSAME");    stringstream errore;
1017          calped->Draw("SAME");    rapporto= new TCanvas("Calorimeter calibration report", "Calorimeter calibration report", 750, 950);
1018          f1pd2->cd();    rapporto->cd();
1019          f1pd2->SetLogy();    rapporto->SetFillColor(10);
1020          calrms->GetXaxis()->SetNdivisions(322);    rapporto->Range(0,0,100,100);
1021          calrms->Draw();    TLatex *t=new TLatex();
1022          Double_t xd[4] = {0.,4224.,4224.,0.};    t->SetTextFont(32);
1023          Double_t yd[4] = {1.,1.,7.,7.};    t->SetTextColor(1);
1024          banda1 = new TPolyLine(4,xd,yd);    t->SetTextSize(0.035);
1025          banda1->SetLineColor(5);    t->SetTextAlign(12);
1026          banda1->SetFillColor(5);    errore.str("");
1027          banda1->SetLineWidth(1);    errore << "BASIC - C20 - Calibrations in file: " << file;
1028          banda1->Draw("fSAME");    errore << " ";
1029          calrms->SetXTitle("strip");    t->SetTextSize(0.02);
1030          calrms->SetYTitle("ADC channels");    t->DrawLatex(2.,99.,errore.str().c_str());
1031          calrms->Draw("SAME");    //
1032          f1pd3->cd();    TPad *pad1;
1033          gStyle->SetNdivisions(344,"x");    TPad *pad2;
1034          calbad->GetXaxis()->SetNdivisions(322);    TPad *pad3;
1035          calbad->Draw();    TPad *pad4;
1036          calbad->SetXTitle("strip");    pad1 = new TPad("pad1","This is pad1",0.02,0.47,0.49,0.90,19);
1037          calbad->SetYTitle("0=good 255=bad");    pad2 = new TPad("pad2","This is pad2",0.51,0.47,0.98,0.90,19);
1038          f1pd1->Update();    pad3 = new TPad("pad3","This is pad3",0.02,0.02,0.49,0.45,19);
1039          f1pd2->Update();    pad4 = new TPad("pad4","This is pad4",0.51,0.02,0.98,0.45,19);
1040          f1pd3->Update();    pad1->Range(0,0,100,100);
1041          figura1->Update();    pad2->Range(0,0,100,100);
1042          //    pad3->Range(0,0,100,100);
1043          figura3->cd();    pad4->Range(0,0,100,100);
1044          gStyle->SetNdivisions(644,"x");    //
1045          t=new TLatex();    pad1->Draw();
1046          t->SetTextFont(32);    pad2->Draw();
1047          t->SetTextColor(1);    pad3->Draw();
1048          t->SetTextSize(0.025);    pad4->Draw();
1049          t->SetTextAlign(12);    //
1050          titolo.str("");    char *sezione = 0;
1051          titolo << "EXPERT - Calorimeter: calthr/calvar/calbase - file ";    for (Int_t si = 0; si < 4; si++){
1052          titolo << file;      if (si == 2)
1053          titolo << " - calibration number ";        {
1054          titolo << (i+1);          pad1->cd() ;
1055          t->DrawLatex(0.5,97.,titolo.str().c_str());          sezione = "** Section YE (x even) **";
1056          t->SetTextSize(0.03);        }
1057          //      if (si == 3)
1058          f3pd1->cd();        {
1059          calthr->GetXaxis()->SetNdivisions(644);          pad2->cd();
1060          calthr->SetXTitle("pre-amplifier");          sezione = "** Section YO (x odd) **";
1061          calthr->SetYTitle("ADC channels");        }
1062          calthr->Draw();      if (si == 0)
1063          Double_t xe[4] = {0.,264.,264.,0.};        {
1064          Double_t ye[4] = {12.,12.,21.,21.};          pad3->cd();
1065          banda1 = new TPolyLine(4,xe,ye);          sezione = "** Section XE (y odd) **";
1066          banda1->SetLineColor(5);        }
1067          banda1->SetFillColor(5);      if (si == 1)
1068          banda1->SetLineWidth(1);        {
1069          banda1->Draw("fSAME");          pad4->cd();
1070          calthr->Draw("SAME");          sezione = "** Section XO (y even) **";
1071          f3pd2->cd();        }
1072          calvar->GetXaxis()->SetNdivisions(644);      t->SetTextFont(32);
1073          calvar->SetXTitle("pre-amplifier");      t->SetTextColor(1);
1074          calvar->SetYTitle("ADC channels");      t->SetTextSize(0.05);
1075          calvar->Draw();      t->SetTextAlign(12);
1076          Double_t xt[4] = {0.,264.,264.,0.};      t->DrawLatex(33.,97.,sezione);
1077          Double_t yt[4] = {1.,1.,8.,8.};      t->SetTextSize(0.05);
1078          banda1 = new TPolyLine(4,xt,yt);  
1079          banda1->SetLineColor(5);      //scorre ver cercando il j tipo di errore: 'si'=sezione  
1080          banda1->SetFillColor(5);      for (Int_t j = 0; j < 23; j++){
1081          banda1->SetLineWidth(1);        if ( ver[si][j] ) {//controlla se le sezioni di ver[si][j] sonoe diverse da zero.
1082          banda1->Draw("fSAME");          t->SetTextColor(50); //controlla quali sono !=0 e assegna il rispettivo errore
1083          calvar->Draw("SAME");          if (j == 0) {//del calorimetro
1084          f3pd3->cd();            errore.str("");
1085          calbase->GetXaxis()->SetNdivisions(644);            errore << "* DSP ack error: " << ver[si][j];
1086          calbase->SetXTitle("pre-amplifier");            errore << " time(s)";
1087          calbase->SetYTitle("ADC channels");            t->DrawLatex(2.,30.,errore.str().c_str());
1088          calbase->Draw();            check = true;
1089          Double_t xg[4] = {0.,264.,264.,0.};          }
1090          Double_t yg[4] = {2000.,2000.,4500.,4500.};          if (j == 1) {//calorimetro
1091          banda1 = new TPolyLine(4,xg,yg);            errore.str("");
1092          banda1->SetLineColor(5);            errore << "* Temperature alarm: " << ver[si][j];
1093          banda1->SetFillColor(5);            errore << " time(s)";
1094          banda1->SetLineWidth(1);            t->DrawLatex(2.,74.,errore.str().c_str());
1095          banda1->Draw("fSAME");            check = true;
1096          calbase->Draw("SAME");          }
1097          f3pd1->Update();          if (j == 2) {//calorimetro
1098          f3pd2->Update();            errore.str("");
1099          f3pd3->Update();            errore << "* Latch up alarm: " << ver[si][j];
1100          figura3->Update();            errore << " time(s).";
1101          //            t->DrawLatex(2.,65.,errore.str().c_str());
1102          //            check = true;
1103          //          }
1104          if ( ci == maxev-4 ) {          if (j == 3) {//calorimetro
1105              //            errore.str("");
1106              //  report sheet:            errore << "RAW mode: " << ver[si][j];
1107              //            errore << " time(s)";
1108              stringstream errore;            t->SetTextColor(38);
1109              rapporto= new TCanvas("Calorimeter calibration report", "Calorimeter calibration report", 750, 950);            t->DrawLatex(2.,90.,errore.str().c_str());
1110              rapporto->cd();          }
1111              rapporto->SetFillColor(10);          if (j == 4) {//calorimetro
1112              rapporto->Range(0,0,100,100);            errore.str("");
1113              t=new TLatex();            errore << "* CMD length error: " << ver[si][j];
1114              t->SetTextFont(32);            errore << " time(s)";
1115              t->SetTextColor(1);            t->DrawLatex(2.,66.,errore.str().c_str());
1116              t->SetTextSize(0.035);            check = true;
1117              t->SetTextAlign(12);          }              
1118              errore.str("");          if (j == 5) {//calorimetro
1119              errore << "BASIC - C20 - Calibrations in file: " << file;            errore.str("");
1120              errore << " ";            errore << "* Execution error: " << ver[si][j];
1121              t->SetTextSize(0.02);            errore << " time(s)";
1122              t->DrawLatex(2.,99.,errore.str().c_str());            t->DrawLatex(2.,62.,errore.str().c_str());
1123              //            check = true;
1124              TPad *pad1;          }
1125              TPad *pad2;          if (j == 6) {//calorimetro
1126              TPad *pad3;            errore.str("");
1127              TPad *pad4;            errore << "* CRC error (st. word): " << ver[si][j];
1128              pad1 = new TPad("pad1","This is pad1",0.02,0.47,0.49,0.90,19);            errore << " time(s)";
1129              pad2 = new TPad("pad2","This is pad2",0.51,0.47,0.98,0.90,19);            t->DrawLatex(2.,58.,errore.str().c_str());
1130              pad3 = new TPad("pad3","This is pad3",0.02,0.02,0.49,0.45,19);            check = true;
1131              pad4 = new TPad("pad4","This is pad4",0.51,0.02,0.98,0.45,19);          }
1132              pad1->Range(0,0,100,100);          if (j == 7) {
1133              pad2->Range(0,0,100,100);            errore.str("");
1134              pad3->Range(0,0,100,100);            errore << "View or command not recognized: " << ver[si][j];
1135              pad4->Range(0,0,100,100);            errore << " time(s)";
1136              //            t->DrawLatex(2.,54.,errore.str().c_str());
1137              pad1->Draw();            check = true;
1138              pad2->Draw();          }
1139              pad3->Draw();          //
1140              pad4->Draw();          if (j == 8) {
1141              //            errore.str("");
1142              char *sezione = 0;            errore << "Missing section: " << ver[si][j];
1143              for (Int_t si = 0; si < 4; si++){            errore << " time(s)";
1144                  if (si == 2)            t->DrawLatex(2.,50.,errore.str().c_str());
1145                      {            check = true;
1146                          pad1->cd() ;          }
1147                          sezione = "** Section YE (x even) **";          if (j == 9) {
1148                      }            errore.str("");
1149                  if (si == 3)            errore << "RAW MODE COMMAND: " << ver[si][j];
1150                      {            errore << " time(s)";
1151                          pad2->cd();            t->DrawLatex(2.,42.,errore.str().c_str());
1152                          sezione = "** Section YO (x odd) **";          }
1153                      }          if (j == 11) {
1154                  if (si == 0)            errore.str("");
1155                      {            errore << "CRC error (data): " << ver[si][j];
1156                          pad3->cd();            errore << " time(s)";
1157                          sezione = "** Section XE (y odd) **";            t->DrawLatex(2.,38.,errore.str().c_str());
1158                      }            check = true;
1159                  if (si == 1)          }
1160                      {          if (j == 16) {
1161                          pad4->cd();            errore.str("");
1162                          sezione = "** Section XO (y even) **";            errore << "Number of calibrations: " << ver[si][j];
1163                      }            t->SetTextColor(38);
1164                  t->SetTextFont(32);            t->DrawLatex(2.,86.,errore.str().c_str());
1165                  t->SetTextColor(1);          }
1166                  t->SetTextSize(0.05);          if (j == 19) {
1167                  t->SetTextAlign(12);            errore.str("");
1168                  t->DrawLatex(33.,97.,sezione);            errore << "Pedestal checksum wrong: " << ver[si][j];
1169                  t->SetTextSize(0.05);            errore << " time(s)";
1170                  for (Int_t j = 0; j < 23; j++){            t->DrawLatex(2.,14.,errore.str().c_str());
1171                      if ( ver[si][j] ) {            check = true;
1172                          t->SetTextColor(50);          }
1173                          if (j == 0) {          if (j == 20) {
1174                              errore.str("");            errore.str("");
1175                              errore << "* DSP ack error: " << ver[si][j];            errore << "Thresholds checksum wrong: " << ver[si][j];
1176                              errore << " time(s)";            errore << " time(s)";
1177                              t->DrawLatex(2.,30.,errore.str().c_str());            t->DrawLatex(2.,10.,errore.str().c_str());
1178                              check = true;                  check = true;
1179                          }          }
1180                          if (j == 1) {          if (j == 22) {
1181                              errore.str("");            errore.str("");
1182                              errore << "* Temperature alarm: " << ver[si][j];            errore << "Packet length is zero (YODA input error), skipped: " << ver[si][j];
1183                              errore << " time(s)";            errore << " time(s)";
1184                              t->DrawLatex(2.,74.,errore.str().c_str());            t->DrawLatex(2.,3.,errore.str().c_str());
1185                              check = true;                  check = true;
                         }  
                         if (j == 2) {  
                             errore.str("");  
                             errore << "* Latch up alarm: " << ver[si][j];  
                             errore << " time(s).";  
                             t->DrawLatex(2.,65.,errore.str().c_str());  
                             check = true;        
                         }  
                         if (j == 3) {  
                             errore.str("");  
                             errore << "RAW mode: " << ver[si][j];  
                             errore << " time(s)";  
                             t->SetTextColor(38);  
                             t->DrawLatex(2.,90.,errore.str().c_str());  
                         }  
                         if (j == 4) {  
                             errore.str("");  
                             errore << "* CMD length error: " << ver[si][j];  
                             errore << " time(s)";  
                             t->DrawLatex(2.,66.,errore.str().c_str());  
                             check = true;        
                         }                
                         if (j == 5) {  
                             errore.str("");  
                             errore << "* Execution error: " << ver[si][j];  
                             errore << " time(s)";  
                             t->DrawLatex(2.,62.,errore.str().c_str());  
                             check = true;        
                         }  
                         if (j == 6) {  
                             errore.str("");  
                             errore << "* CRC error (st. word): " << ver[si][j];  
                             errore << " time(s)";  
                             t->DrawLatex(2.,58.,errore.str().c_str());  
                             check = true;        
                         }  
                         if (j == 7) {  
                             errore.str("");  
                             errore << "View or command not recognized: " << ver[si][j];  
                             errore << " time(s)";  
                             t->DrawLatex(2.,54.,errore.str().c_str());  
                             check = true;        
                         }  
                         //  
                         if (j == 8) {  
                             errore.str("");  
                             errore << "Missing section: " << ver[si][j];  
                             errore << " time(s)";  
                             t->DrawLatex(2.,50.,errore.str().c_str());  
                             check = true;        
                         }  
                         if (j == 9) {  
                             errore.str("");  
                             errore << "RAW MODE COMMAND: " << ver[si][j];  
                             errore << " time(s)";  
                             t->DrawLatex(2.,42.,errore.str().c_str());  
                         }  
                         if (j == 11) {  
                             errore.str("");  
                             errore << "CRC error (data): " << ver[si][j];  
                             errore << " time(s)";  
                             t->DrawLatex(2.,38.,errore.str().c_str());  
                             check = true;        
                         }  
                         if (j == 16) {  
                             errore.str("");  
                             errore << "Number of calibrations: " << ver[si][j];  
                             t->SetTextColor(38);  
                             t->DrawLatex(2.,86.,errore.str().c_str());  
                         }  
                         if (j == 19) {  
                             errore.str("");  
                             errore << "Pedestal checksum wrong: " << ver[si][j];  
                             errore << " time(s)";  
                             t->DrawLatex(2.,14.,errore.str().c_str());  
                             check = true;        
                         }  
                         if (j == 20) {  
                             errore.str("");  
                             errore << "Thresholds checksum wrong: " << ver[si][j];  
                             errore << " time(s)";  
                             t->DrawLatex(2.,10.,errore.str().c_str());  
                             check = true;        
                         }  
                         if (j == 22) {  
                             errore.str("");  
                             errore << "Packet length is zero (YODA input error), skipped: " << ver[si][j];  
                             errore << " time(s)";  
                             t->DrawLatex(2.,3.,errore.str().c_str());  
                             check = true;        
                         };  
                     };  
                 };  
             };  
             rapporto->cd();  
             t->SetTextFont(32);  
             t->SetTextColor(1);  
             t->SetTextSize(0.035);  
             t->SetTextAlign(12);  
             t->DrawLatex(7.,95.,"Calorimeter CALIBRATION quick look: ");  
             //printf("vediamo: ccalped %f ccalrms %f ccalbad %f ccalthr %f ccalvar %f ccalbas %f \n",ccalped,ccalrms,ccalbad,ccalthr,ccalvar,ccalbas);  
             if ( check ) {  
                 t->SetTextColor(50);  
                 t->DrawLatex(65.,95.,"WARNING, CHECK!");                  
                 t->SetTextColor(1);  
             } else {  
                 t->SetTextColor(38);  
                 t->DrawLatex(65.,95.,"OK!");  
                 t->SetTextColor(1);  
             };      
             rapporto->Update();  
         };    
         //  
         if ( !strcmp(format,"ps") ) {  
             if ( ci == minev ) {  
                 figsave.str("");  
                 figsave << outdir << "/" ;  
                 figsave << figrec << "_chkcalib.";  
                 figsave << format;  
                 figsave << "(";  
             };                
             if ( figmatra ) {  
                 figura2->Print(figsave.str().c_str(),"Portrait");  
                 if ( ci == minev ) {  
                     figsave.str("");  
                     figsave << outdir << "/" ;  
                     figsave << figrec << "_chkcalib.";  
                     figsave << format;  
                 };  
             };  
             //  
             figura1->Print(figsave.str().c_str(),"Portrait");  
             if ( ci == minev ) {  
                 figsave.str("");  
                 figsave << outdir << "/" ;  
                 figsave << figrec << "_chkcalib.";  
                 figsave << format;  
             };  
             //        
             figura3->Print(figsave.str().c_str(),"Portrait");  
             //  
             if ( ci == maxev-4 ) {  
                 figsave.str("");  
                 figsave << outdir << "/" ;  
                 figsave << figrec << "_chkcalib.";  
                 figsave << format;  
                 figsave << ")";  
                 rapporto->Print(figsave.str().c_str(),"Portrait");  
             };                
         } else {  
             if ( figmatra ) {  
                 figsave.str("");  
                 figsave << outdir << "/" ;  
                 figsave << figrec << "_chkcalib1_";  
                 figsave << (i+1) << ".";  
                 figsave << format;  
                 figura2->SaveAs(figsave.str().c_str());  
             };  
             //  
             figsave1.str("");  
             figsave1 << outdir << "/" ;  
             figsave1 << figrec << "_chkcalib2_";  
             figsave1 << (i+1) << ".";  
             figsave1 << format;  
             figura1->SaveAs(figsave1.str().c_str());  
             //  
             figsave2.str("");  
             figsave2 << outdir << "/" ;  
             figsave2 << figrec << "_chkcalib3_";  
             figsave2 << (i+1) << ".";  
             figsave2 << format;  
             figura3->SaveAs(figsave2.str().c_str());  
             //  
             if ( ci == maxev-4 ) {  
                 figsave.str("");  
                 figsave << outdir << "/" ;  
                 figsave << figrec << "_chkcalib_report.";  
                 figsave << format;  
                 rapporto->SaveAs(figsave.str().c_str());  
             };                
1186          };          };
1187          };
1188        };
1189      };
1190      rapporto->cd();
1191      t->SetTextFont(32);
1192      t->SetTextColor(1);
1193      t->SetTextSize(0.035);
1194      t->SetTextAlign(12);
1195      t->DrawLatex(7.,95.,"Calorimeter CALIBRATION quick look: ");
1196      printf(" ccalped %f ccalrms %f ccalbad %f ccalthr %f ccalvar %f ccalbas %f \n",ccalped,ccalrms,ccalbad,ccalthr,ccalvar,ccalbas);
1197    
1198    
1199      if ( check ) {
1200        t->SetTextColor(50);
1201        t->DrawLatex(65.,95.,"WARNING, CHECK!");            
1202        t->SetTextColor(1);
1203      } else {
1204        t->SetTextColor(38);
1205        t->DrawLatex(65.,95.,"OK!");
1206        t->SetTextColor(1);
1207      };    
1208      rapporto->Update();
1209      //
1210      if ( !strcmp(format,"ps") ) {
1211        figsave.str("");
1212        figsave << outdir << "/" ;
1213        figsave << figrec << "_CaloCHKCALIB.";
1214        figsave << format;
1215        figsave << ")";
1216        rapporto->Print(figsave.str().c_str(),"Portrait");
1217      } else {
1218        figsave.str("");
1219        figsave << outdir << "/" ;
1220        figsave << figrec << "_CaloCHKCALIB_report.";
1221        figsave << format;
1222        rapporto->SaveAs(figsave.str().c_str());
1223      };
1224      if ( iactive && w4i ){
1225        while ( gROOT->GetListOfCanvases()->FindObject(rapporto) ){
1226          gSystem->ProcessEvents();
1227          gSystem->Sleep(10);
1228      };      };
1229      printf("\n");          };
1230      return;    printf("\n");
1231      return;
1232  }  }
1233            

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.13

  ViewVC Help
Powered by ViewVC 1.1.23