]>
Commit | Line | Data |
---|---|---|
c03351ac | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
c03351ac | 15 | //... |
16 | // Checks the quality assurance. | |
17 | // By comparing with reference data | |
18 | // Skeleton for T0 | |
f6c2d5e2 | 19 | //--------------------------------------------- |
20 | //checkig without reference data: | |
21 | //for RAW QA all histograms should have approximatly the same | |
22 | //number of entries as RefPoint | |
23 | //for Rec Points checks | |
24 | // - amplitude measured by 2 methos | |
25 | // - online and offline T0 measurements | |
26 | // for ESD quality of reconstruction ( and measurements): | |
27 | // RMS of vertex and T0 less than 75ps | |
28 | // | |
29 | // Alla.Maevskaya@cern.ch | |
c03351ac | 30 | //... |
31 | ||
32 | // --- ROOT system --- | |
b09247a2 | 33 | #include <Riostream.h> |
c03351ac | 34 | #include <TClass.h> |
35 | #include <TH1F.h> | |
0d849919 | 36 | #include <TH2.h> |
c03351ac | 37 | #include <TIterator.h> |
38 | #include <TKey.h> | |
39 | #include <TFile.h> | |
446d6ec4 | 40 | #include <TMath.h> |
0d849919 | 41 | #include <TString.h> |
c03351ac | 42 | |
43 | // --- Standard library --- | |
44 | ||
45 | // --- AliRoot header files --- | |
46 | #include "AliLog.h" | |
4e25ac79 | 47 | #include "AliQAv1.h" |
c03351ac | 48 | #include "AliQAChecker.h" |
49 | #include "AliT0QAChecker.h" | |
50 | ||
51 | ClassImp(AliT0QAChecker) | |
52 | ||
3685c21c | 53 | |
57acd2d2 | 54 | //____________________________________________________________________________ |
4e25ac79 | 55 | Double_t * AliT0QAChecker::Check(AliQAv1::ALITASK_t /*index*/) |
57acd2d2 | 56 | { |
57 | Double_t * rv = new Double_t[AliRecoParam::kNSpecies] ; | |
58 | for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) | |
59 | rv[specie] = 0.0 ; | |
60 | return rv ; | |
61 | } | |
62 | ||
4e67e173 | 63 | //__________________________________________________________________ |
4e25ac79 | 64 | Double_t * AliT0QAChecker::Check(AliQAv1::ALITASK_t index,TObjArray ** list) |
3685c21c | 65 | { |
66 | ||
67 | // Super-basic check on the QA histograms on the input list: | |
68 | // look whether they are empty! | |
446d6ec4 | 69 | |
57acd2d2 | 70 | Double_t * test = new Double_t[AliRecoParam::kNSpecies] ; |
71 | for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) | |
72 | test[specie] = 10.0 ; | |
c724dd64 | 73 | |
0d849919 | 74 | Double_t nent[250]; |
c4b97145 | 75 | TString hname[250]; |
5ed41460 | 76 | const char *cname; |
c4b97145 | 77 | memset(nent,0,250*sizeof(Double_t)); |
78 | Double_t w[250]; | |
79 | memset(w,1,250*sizeof(Double_t)); | |
0d849919 | 80 | TH2 *fhRecDiff[3]; |
81 | TH2 *fhRawEff[250]; | |
57acd2d2 | 82 | TH1 *fhESD[2]; |
83 | ||
84 | for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { | |
4e25ac79 | 85 | // TString dataType = AliQAv1::GetAliTaskName(index); |
57acd2d2 | 86 | if (list[specie]->GetEntries() == 0){ |
87 | test[specie] = 1. ; // nothing to check | |
88 | } | |
89 | else { | |
90 | TIter next(list[specie]) ; | |
3685c21c | 91 | TH1 * hdata ; |
0d849919 | 92 | TH2 * h ; |
5379c4a3 | 93 | // AliDebug(AliQAv1::GetQADebugLevel(), Form(" data type %i %s nentries %i\n", |
57acd2d2 | 94 | // index,dataType.Data(),list->GetEntries())); |
95 | for (Int_t ir=0; ir<list[specie]->GetEntries(); ir++) { | |
96 | //raw | |
97 | if(index==0 ){ | |
98 | /* | |
99 | if(ir < 205) { | |
100 | hdata = (TH1*) list[specie]->UncheckedAt(ir); | |
101 | if(hdata) { | |
102 | cname = hdata->GetName(); | |
103 | hname[ir] = cname; | |
5379c4a3 | 104 | AliDebug(AliQAv1::GetQADebugLevel(),Form("count %i %s \n",ir, hname[ir].Data())) ; |
57acd2d2 | 105 | fhRaw[ir] = hdata; |
106 | } | |
107 | }*/ | |
108 | if(ir > 204) { | |
109 | // else{ | |
110 | h = (TH2*) list[specie]->UncheckedAt(ir); | |
5379c4a3 | 111 | AliDebug(AliQAv1::GetQADebugLevel(), Form(" index %i ir %i \n", index,ir)); |
57acd2d2 | 112 | if(h) { |
113 | cname = h->GetName(); | |
114 | hname[ir] = cname; | |
5379c4a3 | 115 | AliDebug(AliQAv1::GetQADebugLevel(),Form("count %i %s \n",ir, hname[ir].Data())) ; |
57acd2d2 | 116 | fhRawEff[ir] = h; |
117 | } | |
118 | } | |
119 | } | |
0d849919 | 120 | |
57acd2d2 | 121 | //rec |
122 | if(index==2){ | |
123 | h = (TH2*) list[specie]->UncheckedAt(ir); | |
124 | if(h) { | |
125 | cname = h->GetName(); | |
126 | hname[ir] = cname; | |
5379c4a3 | 127 | AliDebug(AliQAv1::GetQADebugLevel(), Form("count %i %s \n",ir, hname[ir].Data())) ; |
57acd2d2 | 128 | fhRecDiff[ir] = h; |
129 | } | |
130 | } | |
131 | //esd | |
132 | if(index==3){ | |
5379c4a3 | 133 | // cout<<" ir "<<ir<<endl; |
57acd2d2 | 134 | hdata = (TH1*) list[specie]->UncheckedAt(ir); |
135 | if(hdata){ | |
136 | fhESD[ir] = hdata; | |
5379c4a3 | 137 | AliDebug(AliQAv1::GetQADebugLevel(), Form("count %i %s ",ir, hname[ir].Data()) ); |
57acd2d2 | 138 | } |
0d849919 | 139 | } |
57acd2d2 | 140 | } |
141 | if (index == 0) { | |
142 | //raw data | |
5ed41460 | 143 | |
57acd2d2 | 144 | for (Int_t icase=205; icase<207; icase++) { |
145 | for (Int_t idet=0; idet<24; idet++) { | |
146 | Double_t mean = fhRawEff[icase]->ProjectionY(Form("%s_py_%i_%i", | |
147 | fhRawEff[icase]->GetName(), idet,icase), | |
148 | idet,idet+1)->GetMean(); | |
149 | Double_t rms= fhRawEff[icase]->ProjectionY(Form("%s_py%i_%i", | |
150 | fhRawEff[icase]->GetName(), idet,icase), | |
151 | idet,idet+1)->GetRMS(); | |
5379c4a3 | 152 | AliDebug(AliQAv1::GetQADebugLevel(), Form("name %s icase %i idet %i mean %f, rms %f\n", |
57acd2d2 | 153 | fhRawEff[icase]->GetName(), icase, idet, mean,rms)); |
154 | if (mean<1.2 && mean> 0.8 ) { | |
155 | test[specie] = 1; | |
5379c4a3 | 156 | AliDebug(AliQAv1::GetQADebugLevel(), Form("All channels works meane efficieny %f with rms %f test %f", mean, rms, test[specie])) ; |
57acd2d2 | 157 | } |
158 | if (mean<=0.8 && mean>= 0.5 ){ | |
159 | test[specie] = 0.5; | |
5379c4a3 | 160 | AliDebug(AliQAv1::GetQADebugLevel(), Form("%s problem in channel %i efficieny %f test %f", |
57acd2d2 | 161 | fhRawEff[icase]->GetName(), idet, mean, test[specie])) ; |
162 | } | |
163 | if (mean<0.5 ) { | |
164 | test[specie] = 0.25; | |
5379c4a3 | 165 | AliDebug(AliQAv1::GetQADebugLevel(), Form("%s big problem in channel %i efficieny %f test %f", |
57acd2d2 | 166 | fhRawEff[icase]->GetName(), idet, mean, test[specie])) ; |
167 | } | |
168 | } | |
169 | } | |
3685c21c | 170 | } |
57acd2d2 | 171 | if(index == 2){ |
172 | //rec points | |
173 | for (Int_t icase=0; icase<2; icase++) { | |
174 | for (Int_t idet=0; idet<24; idet++) { | |
175 | Double_t mean = fhRecDiff[icase]-> | |
176 | ProjectionY(Form("%s_py", fhRecDiff[icase]->GetName()), | |
177 | idet,idet+1)->GetMean(); | |
178 | Double_t rms= fhRecDiff[icase]-> | |
179 | ProjectionY(Form("%s_py", fhRecDiff[icase]->GetName()), | |
180 | idet,idet+1)->GetRMS(); | |
5379c4a3 | 181 | AliDebug(AliQAv1::GetQADebugLevel(), Form("name %s icase %i idet %i mean %f, rms %f\n", |
57acd2d2 | 182 | fhRecDiff[icase]->GetName(), icase, idet, mean,rms)); |
0d849919 | 183 | |
57acd2d2 | 184 | if(TMath::Abs(mean) >1.5 || rms >1){ |
5379c4a3 | 185 | AliDebug(AliQAv1::GetQADebugLevel(), Form(" calibration is nor perfect; test=%f", test)) ; |
57acd2d2 | 186 | test[specie]=0.25; |
187 | } | |
188 | if(mean>3 || rms >5) { | |
189 | test[specie] = 0.1; | |
5379c4a3 | 190 | AliDebug(AliQAv1::GetQADebugLevel(), Form(" wrong calibration test=%f", test[specie])) ; |
57acd2d2 | 191 | } |
192 | } | |
193 | } | |
3685c21c | 194 | } |
57acd2d2 | 195 | if (index == 3) { |
196 | //ESD | |
197 | for (Int_t icase=0; icase<2; icase++) { | |
198 | Double_t rmsVertex = fhESD[icase]->GetRMS(); | |
199 | Double_t meanVertex = fhESD[icase]->GetMean(); | |
200 | test[specie]=1; | |
5379c4a3 | 201 | AliDebug(AliQAv1::GetQADebugLevel(), Form("numentries %d meanVertex %f rmsVertex %f", fhESD[icase]->GetEntries(), meanVertex, rmsVertex)); |
57acd2d2 | 202 | if (TMath::Abs(rmsVertex)>3) { |
203 | test[specie]=0.25; | |
5379c4a3 | 204 | AliDebug(AliQAv1::GetQADebugLevel(), Form("Vertex position resolution not good , rms= %f test=%f", |
57acd2d2 | 205 | rmsVertex, test[specie])) ; |
206 | } | |
207 | if (TMath::Abs(meanVertex)>3) { | |
208 | test[specie]=0.25; | |
5379c4a3 | 209 | AliDebug(AliQAv1::GetQADebugLevel(), Form("Vertex position bad calibrated , Mean= %f test=%f", |
57acd2d2 | 210 | meanVertex, test[specie])) ; |
211 | } | |
212 | } | |
213 | } | |
214 | } // if (list->GetEntries() != 0 | |
5379c4a3 | 215 | AliDebug(AliQAv1::GetQADebugLevel(), Form("Test Result = %f", test[specie])) ; |
57acd2d2 | 216 | } |
3685c21c | 217 | return test ; |
218 | } | |
5ed41460 | 219 |