]>
Commit | Line | Data |
---|---|---|
c0af1be2 | 1 | /* |
2 | The class for calculating the global (not detector specific) quality assurance. | |
3 | It reuses the following TLists from its base class | |
4 | AliQADataMaker::fRecPointsQAList (for keeping the track residuals) | |
5 | AliQADataMaker::fESDsQAList (for keeping global ESD QA data) | |
6 | */ | |
7 | ||
542c6c71 | 8 | #include <TPDGCode.h> |
c0af1be2 | 9 | #include <TH1F.h> |
10 | ||
fb774831 | 11 | #include "AliQAChecker.h" |
c0af1be2 | 12 | #include "AliGlobalQADataMaker.h" |
13 | #include "AliGeomManager.h" | |
d7259b2e | 14 | #include "AliESDEvent.h" |
542c6c71 | 15 | #include "AliESDv0.h" |
fb774831 | 16 | #include "AliRawReader.h" |
c0af1be2 | 17 | |
18 | ClassImp(AliGlobalQADataMaker) | |
19 | ||
fb774831 | 20 | //____________________________________________________________________________ |
4e25ac79 | 21 | void AliGlobalQADataMaker::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list) |
fb774831 | 22 | { |
23 | //Detector specific actions at end of cycle | |
24 | // do the QA checking | |
4e25ac79 | 25 | AliQAChecker::Instance()->Run(AliQAv1::kGLOBAL, task, list) ; |
fb774831 | 26 | } |
27 | ||
28 | //____________________________________________________________________________ | |
29 | void AliGlobalQADataMaker::InitRaws() | |
30 | { | |
31 | // create Raws histograms in Raws subdir | |
32 | } | |
33 | ||
34 | //____________________________________________________________________________ | |
c0af1be2 | 35 | void AliGlobalQADataMaker::InitRecPoints() { |
36 | //------------------------------------------------------ | |
d7259b2e | 37 | // This function books the histograms of *track*residuals* |
c0af1be2 | 38 | // as a part of global QA |
39 | //------------------------------------------------------ | |
a6e0ebfe | 40 | const Char_t *name[]={ |
dd1b15c4 | 41 | "hGlobalSPD1ResidualsY","SPD1ResidualsZ", |
42 | "hGlobalSPD2ResidualsY","SPD2ResidualsZ", | |
43 | "hGlobalSDD1ResidualsY","SDD1ResidualsZ", | |
44 | "hGlobalSDD2ResidualsY","SDD2ResidualsZ", | |
45 | "hGlobalSSD1ResidualsY","SSD1ResidualsZ", | |
46 | "hGlobalSSD2ResidualsY","SSD2ResidualsZ", | |
47 | ||
48 | "hGlobalTPC1ResidualsY","TPC1ResidualsZ", | |
49 | "hGlobalTPC2ResidualsY","TPC2ResidualsZ", | |
50 | ||
51 | "hGlobalTRD1ResidualsY","TRD1ResidualsZ", | |
52 | "hGlobalTRD2ResidualsY","TRD2ResidualsZ", | |
53 | "hGlobalTRD3ResidualsY","TRD3ResidualsZ", | |
54 | "hGlobalTRD4ResidualsY","TRD4ResidualsZ", | |
55 | "hGlobalTRD5ResidualsY","TRD5ResidualsZ", | |
56 | "hGlobalTRD6ResidualsY","TRD6ResidualsZ", | |
57 | ||
58 | "hGlobalTOFResidualsY","TOFResidualsZ", | |
59 | ||
60 | "hGlobalPHOS1ResidualsY","PHOS1ResidualsZ", | |
61 | "hGlobalPHOS2ResidualsY","PHOS2ResidualsZ", | |
62 | ||
63 | "hGlobalHMPIDResidualsY","HMPIDResidualsZ", | |
64 | ||
65 | "hGlobalMUONResidualsY","MUONResidualsZ", | |
66 | ||
67 | "hGlobalEMCALResidualsY","EMCALResidualsZ" | |
68 | }; | |
69 | const Char_t *title[]={ | |
c0af1be2 | 70 | "SPD1 residuals Y","SPD1 residuals Z", |
71 | "SPD2 residuals Y","SPD2 residuals Z", | |
72 | "SDD1 residuals Y","SDD1 residuals Z", | |
73 | "SDD2 residuals Y","SDD2 residuals Z", | |
74 | "SSD1 residuals Y","SSD1 residuals Z", | |
75 | "SSD2 residuals Y","SSD2 residuals Z", | |
dd1b15c4 | 76 | |
c0af1be2 | 77 | "TPC1 residuals Y","TPC1 residuals Z", |
78 | "TPC2 residuals Y","TPC2 residuals Z", | |
dd1b15c4 | 79 | |
c0af1be2 | 80 | "TRD1 residuals Y","TRD1 residuals Z", |
81 | "TRD2 residuals Y","TRD2 residuals Z", | |
82 | "TRD3 residuals Y","TRD3 residuals Z", | |
83 | "TRD4 residuals Y","TRD4 residuals Z", | |
84 | "TRD5 residuals Y","TRD5 residuals Z", | |
85 | "TRD6 residuals Y","TRD6 residuals Z", | |
dd1b15c4 | 86 | |
c0af1be2 | 87 | "TOF residuals Y","TOF residuals Z", |
dd1b15c4 | 88 | |
c0af1be2 | 89 | "PHOS1 residuals Y","PHOS1 residuals Z", |
90 | "PHOS2 residuals Y","PHOS2 residuals Z", | |
dd1b15c4 | 91 | |
c0af1be2 | 92 | "HMPID residuals Y","HMPID residuals Z", |
dd1b15c4 | 93 | |
c0af1be2 | 94 | "MUON residuals Y","MUON residuals Z", |
dd1b15c4 | 95 | |
c0af1be2 | 96 | "EMCAL residuals Y","EMCAL residuals Z" |
97 | }; | |
dd1b15c4 | 98 | |
c0af1be2 | 99 | for (Int_t m=1; m<AliGeomManager::kLastLayer; m++) { |
100 | Int_t i=2*m-2; | |
dd1b15c4 | 101 | TH1F *h=new TH1F(name[i],title[i],100,-5.,5.); |
c0af1be2 | 102 | Add2RecPointsList(h,i); |
dd1b15c4 | 103 | h=new TH1F(name[i+1],title[i+1],100,-5.,5.); |
c0af1be2 | 104 | Add2RecPointsList(h,i+1); |
105 | } | |
a935c6c0 | 106 | |
49ab451d | 107 | Add2RecPointsList( |
dd1b15c4 | 108 | new TH1F("hGlobalSSD1AbsoluteResidualsYNegZ", |
109 | "SSD1 Absolute Residuals Y Neg Z",100,-2.,2.),40); | |
a935c6c0 | 110 | Add2RecPointsList( |
dd1b15c4 | 111 | new TH1F("hGlobalSSD1AbsoluteResidualsZNegZ", |
112 | "SSD1 Absolute Residuals Z Neg Z",100,-2.,2.),41); | |
49ab451d | 113 | Add2RecPointsList( |
dd1b15c4 | 114 | new TH1F("hGlobalSSD1AbsoluteResidualsYPosZ", |
115 | "SSD1 Absolute Residuals Y Pos Z",100,-2.,2.),42); | |
a935c6c0 | 116 | Add2RecPointsList( |
dd1b15c4 | 117 | new TH1F("hGlobalSSD1AbsoluteResidualsZPosZ", |
118 | "SSD1 Absolute Residuals Z Pos Z",100,-2.,2.),43); | |
49ab451d | 119 | |
120 | ||
121 | Add2RecPointsList( | |
dd1b15c4 | 122 | new TH1F("hGlobalSSD2AbsoluteResidualsYNegZ", |
123 | "SSD2 Absolute Residuals Y Neg Z",100,-3.,3.),44); | |
a935c6c0 | 124 | Add2RecPointsList( |
dd1b15c4 | 125 | new TH1F("hGlobalSSD2AbsoluteResidualsZNegZ", |
126 | "SSD2 Absolute Residuals Z Neg Z",100,-3.,3.),45); | |
49ab451d | 127 | Add2RecPointsList( |
dd1b15c4 | 128 | new TH1F("hGlobalSSD2AbsoluteResidualsYPosZ", |
129 | "SSD2 Absolute Residuals Y Pos Z",100,-3.,3.),46); | |
a935c6c0 | 130 | Add2RecPointsList( |
dd1b15c4 | 131 | new TH1F("hGlobalSSD2AbsoluteResidualsZPosZ", |
132 | "SSD2Absolute Residuals Z Pos Z",100,-3.,3.),47); | |
a935c6c0 | 133 | |
c0af1be2 | 134 | } |
d7259b2e | 135 | |
fb774831 | 136 | //____________________________________________________________________________ |
d7259b2e | 137 | void AliGlobalQADataMaker::InitESDs() { |
138 | //------------------------------------------------------ | |
139 | // This function books the ESD QA histograms | |
140 | // as a part of global QA | |
141 | //------------------------------------------------------ | |
542c6c71 | 142 | |
143 | {// Cluster related QA | |
dd1b15c4 | 144 | const Char_t *name[]={ |
145 | "hGlobalFractionAssignedClustersITS", | |
146 | "hGlobalFractionAssignedClustersTPC", | |
147 | "hGlobalFractionAssignedClustersTRD" | |
148 | }; | |
149 | const Char_t *title[]={ | |
150 | "Fraction of the assigned clusters in ITS", | |
151 | "Fraction of the assigned clusters in TPC", | |
152 | "Fraction of the assigned clusters in TRD" | |
153 | }; | |
154 | Add2ESDsList(new TH1F(name[0],title[0],100,0.,2.),kClr0); | |
155 | Add2ESDsList(new TH1F(name[1],title[1],100,0.,2.),kClr1); | |
156 | Add2ESDsList(new TH1F(name[2],title[2],100,0.,2.),kClr2); | |
542c6c71 | 157 | } |
158 | ||
159 | {// Track related QA | |
dd1b15c4 | 160 | const Char_t *name[]={ |
161 | "hGlobalTrackAzimuthe", // kTrk0 | |
162 | "hGlobalTrackEta", // kTrk1 | |
163 | "hGlobalTPCTrackpT", // kTrk2 | |
164 | "hGlobalTPCITSMatchedpT", // kTrk3 | |
165 | "hGlobalTPCTOFMatchedpT", // kTrk4 | |
166 | "hGlobalTPCITSMatchingProbability", // kTrk5 | |
167 | "hGlobalTPCTOFMatchingProbability" // kTrk6 | |
542c6c71 | 168 | }; |
dd1b15c4 | 169 | const Char_t *title[]={ |
170 | "Track azimuthal distribution (rad)", // kTrk0 | |
171 | "Track pseudo-rapidity distribution", // kTrk1 | |
172 | "TPC: track momentum distribution (GeV)", // kTrk2 | |
173 | "TPC-ITS matched: track momentum distribution (GeV)", // kTrk3 | |
174 | "TPC-TOF matched: track momentum distribution (GeV)", // kTrk4 | |
175 | "TPC-ITS track-matching probability", // kTrk5 | |
176 | "TPC-TOF track-matching probability" // kTrk6 | |
177 | }; | |
178 | Add2ESDsList(new TH1F(name[0],title[0],100, 0.,TMath::TwoPi()),kTrk0); | |
179 | Add2ESDsList(new TH1F(name[1],title[1],100,-2.00,2.00),kTrk1); | |
180 | Add2ESDsList(new TH1F(name[2],title[2],50, 0.20,5.00),kTrk2); | |
181 | Add2ESDsList(new TH1F(name[3],title[3],50, 0.20,5.00),kTrk3); | |
182 | Add2ESDsList(new TH1F(name[4],title[4],50, 0.20,5.00),kTrk4); | |
183 | Add2ESDsList(new TH1F(name[5],title[5],50, 0.20,5.00),kTrk5); | |
184 | Add2ESDsList(new TH1F(name[6],title[6],50, 0.20,5.00),kTrk6); | |
542c6c71 | 185 | } |
186 | ||
187 | {// V0 related QA | |
dd1b15c4 | 188 | const Char_t *name[]={ |
189 | "hGlobalPromptK0sMass", | |
190 | "hGlobalOfflineK0sMass", | |
191 | "hGlobalPromptLambda0Lambda0BarMass", | |
192 | "hGlobalOfflineLambda0Lambda0BarMass" | |
193 | }; | |
194 | const Char_t *title[]={ | |
195 | "On-the-fly K0s mass (GeV)", | |
196 | "Offline K0s mass (GeV)", | |
197 | "On-the-fly Lambda0 + Lambda0Bar mass (GeV)", | |
198 | "Offline Lambda0 + Lambda0Bar mass (GeV)" | |
199 | }; | |
200 | Add2ESDsList(new TH1F(name[0],title[0],50, 0.4477,0.5477),kK0on); | |
201 | Add2ESDsList(new TH1F(name[1],title[1],50, 0.4477,0.5477),kK0off); | |
202 | Add2ESDsList(new TH1F(name[2],title[2],50, 1.0657,1.1657),kL0on); | |
203 | Add2ESDsList(new TH1F(name[3],title[3],50, 1.0657,1.1657),kL0off); | |
542c6c71 | 204 | } |
205 | ||
206 | {// PID related QA | |
a6e0ebfe | 207 | const Char_t *name[]={ |
c9622234 | 208 | "hGlobalITSdEdx", |
209 | "hGlobalTPCdEdx", | |
210 | "hGlobalTOFTrackingvsMeasured" | |
542c6c71 | 211 | }; |
dd1b15c4 | 212 | const Char_t *title[]={ |
213 | "ITS: dEdx (ADC) for particles with momentum 0.4 - 0.5 (GeV)", | |
214 | "TPC: dEdx (ADC) for particles with momentum 0.4 - 0.5 (GeV)", | |
215 | "TOF: tracking - measured (ps)" | |
216 | }; | |
217 | Add2ESDsList(new TH1F(name[0],title[0],50,0.00,200.),kPid0); | |
218 | Add2ESDsList(new TH1F(name[1],title[1],50,0.00,100.),kPid1); | |
219 | Add2ESDsList(new TH1F(name[2],title[2],50,-3500.,3500.),kPid2); | |
542c6c71 | 220 | } |
221 | ||
d7259b2e | 222 | } |
223 | ||
fb774831 | 224 | //____________________________________________________________________________ |
225 | void AliGlobalQADataMaker::MakeRaws(AliRawReader* rawReader) | |
226 | { | |
227 | //Fill prepared histograms with Raw digit properties | |
228 | rawReader->Reset() ; | |
229 | ||
230 | } | |
231 | ||
232 | //____________________________________________________________________________ | |
542c6c71 | 233 | void AliGlobalQADataMaker::MakeESDs(AliESDEvent * event) { |
d7259b2e | 234 | //----------------------------------------------------------- |
235 | // This function fills the ESD QA histograms | |
236 | // as a part of global QA | |
237 | //----------------------------------------------------------- | |
eca4fa66 | 238 | // Check id histograms already created for this Event Specie |
239 | if ( ! GetESDsData(kClr0) ) | |
240 | InitESDs() ; | |
241 | ||
c9622234 | 242 | |
542c6c71 | 243 | const AliESDEvent *esd=event; |
244 | ||
d7259b2e | 245 | Int_t ntrk=esd->GetNumberOfTracks() ; |
246 | for (Int_t i=0; i<ntrk; i++) { | |
542c6c71 | 247 | const AliESDtrack *track=esd->GetTrack(i); |
d7259b2e | 248 | |
542c6c71 | 249 | // Cluster related QA |
d7259b2e | 250 | if (track->IsOn(AliESDtrack::kITSrefit)) { |
251 | Int_t n=track->GetITSclusters(0); | |
542c6c71 | 252 | GetESDsData(kClr0)->Fill(Float_t(n)/6.); //6 is the number of ITS layers |
d7259b2e | 253 | } |
254 | ||
255 | if (track->IsOn(AliESDtrack::kTPCrefit)) { | |
256 | Int_t n =track->GetTPCNcls(); | |
257 | Int_t nf=track->GetTPCNclsF(); // number of crossed TPC pad rows | |
1aaf4118 | 258 | if (nf>0) { |
259 | Double_t val = n*1.0/nf; | |
260 | GetESDsData(kClr1)->Fill(val); | |
261 | } | |
d7259b2e | 262 | } |
263 | ||
264 | if (track->IsOn(AliESDtrack::kTRDrefit)) { | |
265 | Int_t n=track->GetTRDclusters(0); | |
e3bd5382 | 266 | GetESDsData(kClr2)->Fill(Float_t(n)/(6*24));//(6*24) is the number of TRD time bins |
542c6c71 | 267 | } |
268 | ||
269 | Double_t p=track->GetP(); | |
270 | ||
271 | // Track related QA | |
272 | if (track->IsOn(AliESDtrack::kTPCrefit)) { | |
273 | Float_t dz[2]; | |
274 | track->GetDZ(0.,0.,0.,esd->GetMagneticField(),dz); | |
275 | if ((TMath::Abs(dz[0])<3.) && (TMath::Abs(dz[1])<3.)) { // beam pipe | |
276 | Double_t phi=track->Phi(); | |
277 | GetESDsData(kTrk0)->Fill(phi); | |
44f14df0 | 278 | Double_t y=track->Eta(); |
542c6c71 | 279 | GetESDsData(kTrk1)->Fill(y); |
280 | ||
cecff4fc | 281 | if (TMath::Abs(y)<0.9) { |
282 | GetESDsData(kTrk2)->Fill(p); | |
283 | if (track->IsOn(AliESDtrack::kITSrefit)) GetESDsData(kTrk3)->Fill(p); | |
4d9ba05c | 284 | //if (track->IsOn(AliESDtrack::kTOFout)) GetESDsData(kTrk4)->Fill(p); |
285 | if (track->GetTOFsignal()>0) GetESDsData(kTrk4)->Fill(p); | |
cecff4fc | 286 | } |
542c6c71 | 287 | } |
288 | } | |
289 | ||
290 | // PID related QA | |
291 | if ((p>0.4) && (p<0.5)) { | |
292 | if (track->IsOn(AliESDtrack::kITSpid)) { | |
293 | Double_t dedx=track->GetITSsignal(); | |
294 | GetESDsData(kPid0)->Fill(dedx); | |
295 | } | |
296 | if (track->IsOn(AliESDtrack::kTPCpid)) { | |
297 | Double_t dedx=track->GetTPCsignal(); | |
298 | GetESDsData(kPid1)->Fill(dedx); | |
299 | } | |
d7259b2e | 300 | } |
542c6c71 | 301 | if (p>1.0) { |
302 | if (track->IsOn(AliESDtrack::kTOFpid)) { | |
303 | Double_t times[10]; | |
304 | track->GetIntegratedTimes(times); | |
305 | Double_t tof=track->GetTOFsignal(); | |
306 | GetESDsData(kPid2)->Fill(times[2]-tof); | |
307 | } | |
308 | } | |
309 | } | |
d7259b2e | 310 | |
cecff4fc | 311 | TH1 *tpc=GetESDsData(kTrk2); tpc->Sumw2(); |
312 | TH1 *its=GetESDsData(kTrk3); its->Sumw2(); | |
313 | TH1 *tof=GetESDsData(kTrk4); tof->Sumw2(); | |
542c6c71 | 314 | GetESDsData(kTrk5)->Divide(its,tpc,1,1.,"b"); |
315 | GetESDsData(kTrk6)->Divide(tof,tpc,1,1.,"b"); | |
316 | ||
317 | // V0 related QA | |
318 | Int_t nV0=esd->GetNumberOfV0s(); | |
319 | for (Int_t i=0; i<nV0; i++) { | |
320 | Double_t mass; | |
321 | AliESDv0 v0(*esd->GetV0(i)); | |
322 | ||
323 | v0.ChangeMassHypothesis(kK0Short); | |
324 | mass=v0.GetEffMass(); | |
b72280b3 | 325 | if (v0.GetOnFlyStatus()) |
326 | GetESDsData(kK0on)->Fill(mass); | |
327 | else | |
328 | GetESDsData(kK0off)->Fill(mass); | |
542c6c71 | 329 | |
330 | v0.ChangeMassHypothesis(kLambda0); | |
331 | mass=v0.GetEffMass(); | |
b72280b3 | 332 | if (v0.GetOnFlyStatus()) |
333 | GetESDsData(kL0on)->Fill(mass); | |
334 | else | |
335 | GetESDsData(kL0off)->Fill(mass); | |
542c6c71 | 336 | |
337 | v0.ChangeMassHypothesis(kLambda0Bar); | |
338 | mass=v0.GetEffMass(); | |
b72280b3 | 339 | if (v0.GetOnFlyStatus()) |
340 | GetESDsData(kL0on)->Fill(mass); | |
341 | else | |
342 | GetESDsData(kL0off)->Fill(mass); | |
d7259b2e | 343 | } |
542c6c71 | 344 | |
f92b626a | 345 | } |