]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSQASDDChecker.cxx
Fixing segfault
[u/mrichter/AliRoot.git] / ITS / AliITSQASDDChecker.cxx
1
2 /**************************************************************************
3  * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
4  *                                                                        *
5  * Author: The ALICE Off-line Project.                                    *
6  * Contributors are mentioned in the code where appropriate.              *
7  *                                                                        *
8  * Permission to use, copy, modify and distribute this software and its   *
9  * documentation strictly for non-commercial purposes is hereby granted   *
10  * without fee, provided that the above copyright notice appears in all   *
11  * copies and that both the copyright notice and this permission notice   *
12  * appear in the supporting documentation. The authors make no claims     *
13  * about the suitability of this software for any purpose. It is          *
14  * provided "as is" without express or implied warranty.                  *
15  **************************************************************************/
16
17 /* $Id$ */
18
19 // *****************************************
20 //  Checks the quality assurance 
21 //  by comparing with reference data
22 //  P. Cerello Apr 2008
23 //  INFN Torino
24
25 // --- ROOT system ---
26 #include "TH1.h"
27 #include <TCanvas.h>
28
29 // --- AliRoot header files ---
30 #include "AliITSQASDDChecker.h"
31 #include "AliLog.h"
32 #include "AliCDBEntry.h"
33 #include "AliQAManager.h"
34 #include "AliQACheckerBase.h"
35 #include "TSystem.h"
36
37
38 ClassImp(AliITSQASDDChecker)
39 //__________________________________________________________________
40 AliITSQASDDChecker& AliITSQASDDChecker::operator = (const AliITSQASDDChecker& qac ) 
41 {
42   // Equal operator.
43   this->~AliITSQASDDChecker();
44   new(this) AliITSQASDDChecker(qac);
45   return *this;
46 }
47
48 //__________________________________________________________________
49 Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, TObjArray * list) 
50 {  
51   AliDebug(1,Form("AliITSQASDDChecker called with offset: %d\n", fSubDetOffset));
52   /* char * detOCDBDir = Form("ITS/%s/%s", AliQAv1::GetRefOCDBDirName(), AliQAv1::GetRefDataDirName()) ; 
53   AliCDBEntry *QARefObj = AliQAManager::QAManager()->Get(detOCDBDir);
54   if( !QARefObj){
55     AliError("Calibration object retrieval failed! SDD will not be processed");
56     return 1.;
57   }
58   */
59   Double_t test = 0.0;
60   Int_t offset = 0;
61
62   if(index==AliQAv1::kRAW){  //analizing RAWS
63     if (list->GetEntries() == 0){
64       test = 1. ; // nothing to check
65     }
66     else {
67       TIter next(list) ;
68       TH1 * hdata ;
69       for(offset =0;offset < fSubDetOffset; offset++){
70         hdata = dynamic_cast<TH1 *>(next());  
71       }
72
73       while ( (hdata = dynamic_cast<TH1 *>(next())) ){
74         if (hdata) {
75           if(offset == fSubDetOffset){ //ModPattern check
76             if ( hdata->Integral() == 0 ) {
77               AliWarning(Form("Spectrum %s is empty", hdata->GetName())) ; 
78               return 0.5 ;
79             }
80             test = hdata->Chi2Test(hdata,"UU,p");
81           }  // ModPattern check
82         }
83         else{
84           AliError("Data type cannot be processed") ;
85         }
86         offset++;
87       }  //SDD histo
88
89       while ( (hdata = dynamic_cast<TH1 *>(next()))) {
90         offset++;
91       }
92     } //else entries !=0
93   AliInfo(Form("Test Result for RAWS = %f", test)) ;
94   } // if(index==0)
95
96   
97   if( index==AliQAv1::kREC){ //analizing RECP
98     //printf("analizing recp, offset %d \n",fSubDetOffset);
99     if (list->GetEntries() == 0){
100       test = 1. ; // nothing to check
101     }
102     else {
103       TIter next(list) ;
104       TH1 * hdata ;
105       for(offset =0;offset < fSubDetOffset; offset++){
106         hdata = dynamic_cast<TH1 *>(next());    // magari TIter++ ?? 
107         //printf("Skipping histo %s, offset %d \n",hdata->GetName(),fSubDetOffset);
108       }
109         
110       while ( (hdata = dynamic_cast<TH1 *>(next())) ){
111         /*if (hdata) { // offset=9 ModPatternRP
112           //printf("Treating histo %s, offset %d \n",hdata->GetName(),fSubDetOffset);
113           if( offset == 9 && hdata->GetEntries()>0)test = 0.1;    
114         }
115         else{
116           AliError("Data type cannot be processed") ;
117         }
118         offset++;*/
119       }
120     } // GetEntries loop
121   AliInfo(Form("Test Result for RECP = %f", test)) ; 
122
123   } // if(index==1) loop
124
125   return test;  
126 }
127  
128 //__________________________________________________________________
129 void AliITSQASDDChecker::SetTaskOffset(Int_t TaskOffset)
130 {
131   fSubDetOffset = TaskOffset;
132 }