/[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.12 by mocchiut, Fri Jan 26 11:57:58 2007 UTC revision 1.17 by mocchiut, Tue Aug 11 14:19:52 2009 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.13  (2006-09-22)  //   FCaloCHKCALIB.c      version 1.14  (2007-07-18)
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.14 (2007-07-18): 05953 bug fixed (infinite loop).
11    //
12  //   1.12 - 1.13 (2006-09-22): Set upper limit in calvar plot.  //   1.12 - 1.13 (2006-09-22): Set upper limit in calvar plot.
13  //  //
14  //   1.07 - 1.12 (2006-08-04): bugs fixed.  //   1.07 - 1.12 (2006-08-04): bugs fixed.
# Line 31  Line 33 
33  //  //
34  #include <iostream>  #include <iostream>
35  #include <fstream>  #include <fstream>
36    #include <cstdlib>
37  //  //
38    #include <TROOT.h>
39  #include <TTree.h>  #include <TTree.h>
40  #include <TObject.h>  #include <TObject.h>
41  #include <TString.h>  #include <TString.h>
# Line 196  void FCaloCHKCALIB(TString filename, Lon Line 200  void FCaloCHKCALIB(TString filename, Lon
200    cpuhe->SetBranchAddress("Header",&ch);    cpuhe->SetBranchAddress("Header",&ch);
201    //    //
202    Long64_t ncalibs    = tr->GetEntries();//cerca il ramo Entries (calibrazioni)    Long64_t ncalibs    = tr->GetEntries();//cerca il ramo Entries (calibrazioni)
203    if ( ncalibs == 0 ){    if ( ncalibs == 0 || cpuhe->GetEntries() == 0){
204      printf(" No calibrations in this files! \n Exiting... \n");      printf(" No calibrations in this files! \n Exiting... \n");
205      return;      return;
206    };    };
207      //
208      UInt_t cpuhead[1000];
209      memset(cpuhead, 0, 1000*sizeof(UInt_t));
210      for (Int_t i=0; i<cpuhe->GetEntries(); i++){
211        cpuhe->GetEntry(i);
212        if ( i < 1000 ) cpuhead[i]=ch->GetPscuHeader()->GetOrbitalTime();
213        if ( i > 1000 ){
214          printf(" ERROR: too many calibrations in this file, cannot handle it \n Exiting... \n");
215          return;
216        };
217      };
218      //
219    printf("\n This file contains %i entries which corrispond to %i calibrations \n\n",(int)ncalibs,(int)ncalibs/4);    printf("\n This file contains %i entries which corrispond to %i calibrations \n\n",(int)ncalibs,(int)ncalibs/4);
220    Long64_t minev = 0;    Long64_t minev = 0;
221    Long64_t maxev = ncalibs;    Long64_t maxev = ncalibs;
# Line 240  void FCaloCHKCALIB(TString filename, Lon Line 256  void FCaloCHKCALIB(TString filename, Lon
256    stringstream figsave;    //definisco stringhe i/o    stringstream figsave;    //definisco stringhe i/o
257    stringstream figsave1;        stringstream figsave1;    
258    stringstream figsave2;        stringstream figsave2;    
259      if ( !strcmp(format,"ps") ) {
260        figsave.str("");
261        figsave << outdir << "/" ;
262        figsave << figrec << "_CaloCHKCALIB.";
263        figsave << format;
264        figsave << "(";
265      };                
266    //    //
267    
268  //-----------------inizio CHECK per ricerca errori dal calorimetro-------------------  //-----------------inizio CHECK per ricerca errori dal calorimetro-------------------
# Line 248  void FCaloCHKCALIB(TString filename, Lon Line 271  void FCaloCHKCALIB(TString filename, Lon
271    Bool_t check = false;//azzera flag presenza errori    Bool_t check = false;//azzera flag presenza errori
272        
273    //    //
274      Int_t hi = (minev/4)-1;
275    //inizio loop su tutti gli header degli eventi di calibrazione    //inizio loop su tutti gli header degli eventi di calibrazione
276    for (Int_t ci = minev; ci < maxev ; ci+=4){    //  for (Int_t ci = minev; ci < maxev ; ci+=4){
277      Int_t ci = minev;
278      while ( ci < maxev ){
279      //scorre i pacchetti di 4 in 4 (cioe scorre le calibrazioni)      //scorre i pacchetti di 4 in 4 (cioe scorre le calibrazioni)
280      Int_t incalrms = 0;      Int_t incalrms = 0;
281      Int_t outcalrms = 0;      Int_t outcalrms = 0;
# Line 263  void FCaloCHKCALIB(TString filename, Lon Line 289  void FCaloCHKCALIB(TString filename, Lon
289      Int_t incalbas = 0;      Int_t incalbas = 0;
290      Int_t outcalbas = 0;      Int_t outcalbas = 0;
291      //dall'albero calibheader, cerco obt dell cpu      //dall'albero calibheader, cerco obt dell cpu
292      cpuhe->GetEntry(ci/4);      //    cpuhe->GetEntry(ci/4);
293      cpuobt=ch->GetPscuHeader()->GetOrbitalTime();      hi++;
294        //    cpuobt=ch->GetPscuHeader()->GetOrbitalTime();
295        cpuobt=cpuhead[hi];
296      obt0=0;      obt0=0;
297      obt1=0;      obt1=0;
298      obt2=0;      obt2=0;
299      obt3=0;      obt3=0;
300            //
301        calib.iev=0;
302        memset(calib.cstwerr,0,4*sizeof(Int_t));
303        memset(calib.cperror,0,4*sizeof(Float_t));
304        memset(calib.calped,0,2*22*96*sizeof(Float_t));
305        memset(calib.calgood,0,2*22*96*sizeof(Float_t));
306        memset(calib.calrms,0,2*22*96*sizeof(Float_t));
307        memset(calib.calpuls,0,2*22*96*sizeof(Float_t));
308        memset(calib.calthr,0,2*22*6*sizeof(Float_t));
309        memset(calib.calvar,0,2*22*6*sizeof(Float_t));
310        memset(calib.calbase,0,2*22*6*sizeof(Float_t));
311        //
312      //inizio loop su i 4 pacchetti per ogni calibrazione (scorre 4 successivi)      //inizio loop su i 4 pacchetti per ogni calibrazione (scorre 4 successivi)
313      for ( Int_t s=0 ; s<4 ;s++  ){      //    for ( Int_t s=0 ; s<4 ;s++  ){
314        Int_t s = 0;
315        obt = cpuhead[hi];
316        //    printf(" qui cpu header : %i hi %i entry %i \n",obt,hi,ci);
317        if ( !obt ) break;
318        while ( (labs((Int_t)(obt-cpuhead[hi])) < 100000 && ci < maxev) || !cpuobt ){
319    
320        tr->GetEntry(ci+s);//sceglie la entry (calibrazione)del tree in cui ho tutte le sottostrutture        tr->GetEntry(ci);//sceglie la entry (calibrazione)del tree in cui ho tutte le sottostrutture
321          //      tr->GetEntry(ci+s);//sceglie la entry (calibrazione)del tree in cui ho tutte le sottostrutture
322                
323          //trovo l'OBT della entry (pacchetto)
 //trovo l'OBT della entry (pacchetto)  
324        obt=eh->GetPscuHeader()->GetOrbitalTime();//cerca orbitaltime all'interno di Pscu        obt=eh->GetPscuHeader()->GetOrbitalTime();//cerca orbitaltime all'interno di Pscu
325  ///        //
326          //printf(" qui pkt header : %i  \n",obt);
327    
328          ci++;
329          
330          if ( labs((Int_t)(obt-cpuhead[hi])) < 100000 ){
331    
332        calib.iev = ce->iev;          //      s++;
333        cestw = 0;          if ( ce->cstwerr[0] ) s = 0;
334        //cstwerr e' tutto l'header della sezione, mi interessano gli ultimi 2 Byte(errori del calorimetro)          if ( ce->cstwerr[1] ) s = 1;
335        if ( ce->cstwerr[s] ){          if ( ce->cstwerr[2] ) s = 2;
336          cestw =  ce->cstwerr[s] & cmask ; //confronto con la maschera per tenere solo gli          if ( ce->cstwerr[3] ) s = 3;
337          ver[s][16]++;//                     ultimi 2 Byte (assegnati a cestw)          //printf(" qua pkt header : %i s = %i hi %i \n",obt,s,hi);
338        };          //
339        if ( cestw ){//errori dal calorimetro          calib.iev = ce->iev;
340          if ( cestw & (1 << 0) ) ver[s][6]++ ;//spostati di uno e confronto se diverso 0          cestw = 0;
341          if ( cestw & (1 << 1) ) ver[s][5]++ ;          //cstwerr e' tutto l'header della sezione, mi interessano gli ultimi 2 Byte(errori del calorimetro)
342          if ( cestw & (1 << 2) ) ver[s][4]++ ;          if ( ce->cstwerr[s] ){
343          if ( cestw & (1 << 3) ) ver[s][3]++ ;            cestw =  ce->cstwerr[s] & cmask ; //confronto con la maschera per tenere solo gli
344          if ( cestw & (1 << 4) ) ver[s][2]++ ;            ver[s][16]++;//                     ultimi 2 Byte (assegnati a cestw)
         if ( cestw & (1 << 5) ) ver[s][1]++ ;  
         if ( cestw & (1 << 6) ) ver[s][0]++ ;            
       };  
       if ( ce->cperror[s] != 0. ){//errori dallo spacchettamento  
         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]--;  
345          };          };
346          if (ce->cperror[s] == 132) ver[s][11]++ ;          if ( cestw ){//errori dal calorimetro
347          if (ce->cperror[s] == 140) ver[s][19]++ ;            if ( cestw & (1 << 0) ) ver[s][6]++ ;//spostati di uno e confronto se diverso 0
348          if (ce->cperror[s] == 141) ver[s][20]++ ;            if ( cestw & (1 << 1) ) ver[s][5]++ ;
349          if (ce->cperror[s] == 142) ver[s][22]++ ;            if ( cestw & (1 << 2) )       ver[s][4]++ ;
350        };            if ( cestw & (1 << 3) ) ver[s][3]++ ;
351        //lato oscuro :p            if ( cestw & (1 << 4) ) ver[s][2]++ ;
352        for ( Int_t d=0 ; d<11 ;d++  ){            if ( cestw & (1 << 5) ) ver[s][1]++ ;
353          Int_t pre = -1;            if ( cestw & (1 << 6) ) ver[s][0]++ ;        
354          for ( Int_t j=0; j<96 ;j++){          };
355            if ( j%16 == 0 ) pre++;          if ( ce->cperror[s] != 0. ){//errori dallo spacchettamento
356            if ( s == 2 ){            if (ce->cperror[s] == 128) ver[s][7]++ ;
357              //aggiungo obt del pacchetto che sta leggendo(obt)            if (ce->cperror[s] == 129) ver[s][8]++ ;
358              obt2=obt;            if (ce->cperror[s] == 130) {
359              calib.calped[0][2*d+1][j] = ce->calped[3][d][j];              ver[s][9]++ ;
360              calib.cstwerr[3] = ce->cstwerr[3];              ver[s][16]--;
             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 ){  
             obt3=obt;  
             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 ){  
             obt0=obt;  
             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 ){  
             obt1=obt;  
             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];  
361            };            };
362              if (ce->cperror[s] == 132) ver[s][11]++ ;
363              if (ce->cperror[s] == 140) ver[s][19]++ ;
364              if (ce->cperror[s] == 141) ver[s][20]++ ;
365              if (ce->cperror[s] == 142) ver[s][22]++ ;
366          };          };
367        };//chiuso for su si(sezioni)          //lato oscuro :p
368            for ( Int_t d=0 ; d<11 ;d++  ){
369              Int_t pre = -1;
370              for ( Int_t j=0; j<96 ;j++){
371                if ( j%16 == 0 ) pre++;
372                if ( s == 2 ){
373                  //aggiungo obt del pacchetto che sta leggendo(obt)
374                  obt2=obt;
375                  calib.calped[0][2*d+1][j] = ce->calped[3][d][j];
376                  calib.cstwerr[3] = ce->cstwerr[3];
377                  calib.cperror[3] = ce->cperror[3];
378                  calib.calgood[0][2*d+1][j] = ce->calgood[3][d][j];
379                  calib.calthr[0][2*d+1][pre] = ce->calthr[3][d][pre];
380                  calib.calrms[0][2*d+1][j] = ce->calrms[3][d][j];
381                  calib.calbase[0][2*d+1][pre] = ce->calbase[3][d][pre];
382                  calib.calvar[0][2*d+1][pre] = ce->calvar[3][d][pre];
383                };
384                if ( s == 3 ){
385                  obt3=obt;
386                  calib.calped[0][2*d][j] = ce->calped[1][d][j];
387                  calib.cstwerr[1] = ce->cstwerr[1];
388                  calib.cperror[1] = ce->cperror[1];
389                  calib.calgood[0][2*d][j] = ce->calgood[1][d][j];
390                  calib.calthr[0][2*d][pre] = ce->calthr[1][d][pre];
391                  calib.calrms[0][2*d][j] = ce->calrms[1][d][j];
392                  calib.calbase[0][2*d][pre] = ce->calbase[1][d][pre];
393                  calib.calvar[0][2*d][pre] = ce->calvar[1][d][pre];
394                };
395                if ( s == 0 ){
396                  obt0=obt;
397                  calib.calped[1][2*d][j] = ce->calped[0][d][j];
398                  calib.cstwerr[0] = ce->cstwerr[0];
399                  calib.cperror[0] = ce->cperror[0];
400                  calib.calgood[1][2*d][j] = ce->calgood[0][d][j];
401                  calib.calthr[1][2*d][pre] = ce->calthr[0][d][pre];
402                  calib.calrms[1][2*d][j] = ce->calrms[0][d][j];
403                  calib.calbase[1][2*d][pre] = ce->calbase[0][d][pre];
404                  calib.calvar[1][2*d][pre] = ce->calvar[0][d][pre];
405                };
406                if ( s == 1 ){
407                  obt1=obt;
408                  calib.calped[1][2*d+1][j] = ce->calped[2][d][j];
409                  calib.cstwerr[2] = ce->cstwerr[2];
410                  calib.cperror[2] = ce->cperror[2];
411                  calib.calgood[1][2*d+1][j] = ce->calgood[2][d][j];
412                  calib.calthr[1][2*d+1][pre] = ce->calthr[2][d][pre];
413                  calib.calrms[1][2*d+1][j] = ce->calrms[2][d][j];
414                  calib.calbase[1][2*d+1][pre] = ce->calbase[2][d][pre];
415                  calib.calvar[1][2*d+1][pre] = ce->calvar[2][d][pre];
416                };
417            
418              };      
419            };//chiuso for su si(sezioni)
420          } else {
421            ci--;
422          };
423      };//chiuso for su ci(eventi)      };//chiuso for su ci(eventi)
424      //      //
425     //fine CHECK      //fine CHECK
426            
427      //      //
428      // Book the histograms:      // Book the histograms:
429      Int_t i = (ci-minev)/4;      //    Int_t i = (ci-minev)/4;
430        Int_t i = hi;
431      xviewev.str("");      xviewev.str("");
432      xviewev << "x-view event " << (i+1);      xviewev << "x-view event " << (i+1);
433      yviewev.str("");      yviewev.str("");
# Line 533  void FCaloCHKCALIB(TString filename, Lon Line 593  void FCaloCHKCALIB(TString filename, Lon
593                incalvar++;                incalvar++;
594              };              };
595              calbase->Fill((float)g,(float)calib.calbase[l][m][n]);//controlla baseline                                                                calbase->Fill((float)g,(float)calib.calbase[l][m][n]);//controlla baseline                                                  
596              if ( calib.calbase[l][m][n] > 4500. || calib.calbase[l][m][n] < 2000. ){              if ( calib.calbase[l][m][n] > 5500. || calib.calbase[l][m][n] < 2000. ){
597                outcalbas++;                outcalbas++;
598              } else {              } else {
599                incalbas++;                incalbas++;
# Line 885  void FCaloCHKCALIB(TString filename, Lon Line 945  void FCaloCHKCALIB(TString filename, Lon
945      calbase->SetYTitle("ADC channels");      calbase->SetYTitle("ADC channels");
946      calbase->Draw();      calbase->Draw();
947      Double_t xg[4] = {0.,264.,264.,0.};      Double_t xg[4] = {0.,264.,264.,0.};
948      Double_t yg[4] = {2000.,2000.,4500.,4500.};      Double_t yg[4] = {2000.,2000.,5500.,5500.};
949      banda1 = new TPolyLine(4,xg,yg);      banda1 = new TPolyLine(4,xg,yg);
950      banda1->SetLineColor(5);      banda1->SetLineColor(5);
951      banda1->SetFillColor(5);      banda1->SetFillColor(5);
# Line 900  void FCaloCHKCALIB(TString filename, Lon Line 960  void FCaloCHKCALIB(TString filename, Lon
960      //      //
961      //file output      //file output
962      if ( !strcmp(format,"ps") ) {      if ( !strcmp(format,"ps") ) {
       if ( ci == minev ) {  
         figsave.str("");  
         figsave << outdir << "/" ;  
         figsave << figrec << "_CaloCHKCALIB.";  
         figsave << format;  
         figsave << "(";  
       };                      
963        if ( figmatra ) {        if ( figmatra ) {
964          figura2->Print(figsave.str().c_str(),"Portrait");          figura2->Print(figsave.str().c_str(),"Portrait");
965          if ( ci == minev ) {          if ( ci == minev ) {
# Line 999  void FCaloCHKCALIB(TString filename, Lon Line 1052  void FCaloCHKCALIB(TString filename, Lon
1052    pad3->Draw();    pad3->Draw();
1053    pad4->Draw();    pad4->Draw();
1054    //    //
1055    char *sezione = 0;    const char *sezione = "";
1056    for (Int_t si = 0; si < 4; si++){    for (Int_t si = 0; si < 4; si++){
1057      if (si == 2)      if (si == 2)
1058        {        {

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.17

  ViewVC Help
Powered by ViewVC 1.1.23