366b82eb35dc37ca42ca650db8a1ba16ac7102e5
[u/mrichter/AliRoot.git] / ESDCheck / AliPMDQATask.cxx
1
2 /**************************************************************************
3  * Copyright(c) 1998-1999, 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 // An analysis task to check the PMD data in simulated data
21 //
22 //*-- Yves Schutz 
23 //////////////////////////////////////////////////////////////////////////////
24
25 #include <TCanvas.h>
26 #include <TChain.h>
27 #include <TFile.h> 
28 #include <TH1F.h>
29 #include <TH2F.h>
30 #include <TLine.h> 
31 #include <TROOT.h>
32 #include <TStyle.h> 
33
34 #include "AliPMDQATask.h" 
35 #include "AliPMDUtility.h" 
36 #include "AliESD.h" 
37 #include "AliLog.h"
38
39 //______________________________________________________________________________
40 AliPMDQATask::AliPMDQATask(const char *name) : 
41   AliAnalysisTask(name,""),  
42   fChain(0),
43   fESD(0), 
44   fhPMDP1(0),
45   fhPMDC2(0),
46   fhPMDP2(0),
47   fhPMDC3(0),
48   fhPMDP3(0),
49   fhPMDP4(0),
50   fhPMDC5(0),
51   fhPMDP5(0),
52   fhPMDCP0(0),
53   fhPMDCP1(0),
54   fhPMDCP2(0),
55   fhPMDCP3(0),
56   fhPMDCP4(0),
57   fhPMDSM1(0),
58   fhPMDSM2(0),
59   fhPMDSM3(0),
60   fhPMDSM4(0),
61   fhPMDSM5(0),
62   fhPMDSM6(0),
63   fhPMDSM7(0),
64   fhPMDSM8(0),
65   fhPMDSM9(0),
66   fhPMDSM10(0),
67   fhPMDSM11(0),
68   fhPMDSM12(0),
69   fhPMDSM13(0),
70   fhPMDSM14(0),
71   fhPMDSM15(0),
72   fhPMDSM16(0),
73   fhPMDSM17(0),
74   fhPMDSM18(0),
75   fhPMDSM19(0),
76   fhPMDSM20(0),
77   fhPMDSM21(0),
78   fhPMDSM22(0),
79   fhPMDSM23(0),
80   fhPMDSM24(0),
81   fhPMDSM (0)
82 {
83   // Constructor.
84   // Input slot #0 works with an Ntuple
85   DefineInput(0, TChain::Class());
86   // Output slot #0 writes into a TH1 container
87   DefineOutput(0,  TObjArray::Class()) ; 
88 }
89
90 //______________________________________________________________________________
91 AliPMDQATask::~AliPMDQATask()
92 {
93   // dtor
94   fOutputContainer->Clear() ; 
95   delete fOutputContainer ;
96   
97   delete fhPMDP1  ;
98   delete fhPMDC2  ;
99   delete fhPMDP2  ;
100   delete fhPMDC3  ;
101   delete fhPMDP3  ;
102   delete fhPMDP4  ;
103   delete fhPMDC5  ;
104   delete fhPMDP5  ;
105   delete fhPMDCP0 ;
106   delete fhPMDCP1 ;
107   delete fhPMDCP2 ;
108   delete fhPMDCP3 ;
109   delete fhPMDCP4 ;
110   delete fhPMDSM1  ;
111   delete fhPMDSM2  ;
112   delete fhPMDSM3  ;
113   delete fhPMDSM4  ;
114   delete fhPMDSM5  ;
115   delete fhPMDSM6  ;
116   delete fhPMDSM7  ;
117   delete fhPMDSM8  ;
118   delete fhPMDSM9  ;
119   delete fhPMDSM10 ;
120   delete fhPMDSM11 ;
121   delete fhPMDSM12 ;
122   delete fhPMDSM13 ;
123   delete fhPMDSM14 ;
124   delete fhPMDSM15 ;
125   delete fhPMDSM16 ;
126   delete fhPMDSM17 ;
127   delete fhPMDSM18 ;
128   delete fhPMDSM19 ;
129   delete fhPMDSM20 ;
130   delete fhPMDSM21 ;
131   delete fhPMDSM22 ;
132   delete fhPMDSM23 ;
133   delete fhPMDSM24 ;
134   delete fhPMDSM   ;
135   
136 }
137
138 //______________________________________________________________________________
139 void AliPMDQATask::ConnectInputData(const Option_t*)
140 {
141   // Initialisation of branch container and histograms 
142     
143   AliInfo(Form("*** Initialization of %s", GetName())) ; 
144     
145   // Get input data
146   fChain = dynamic_cast<TChain *>(GetInputData(0)) ;
147   if (!fChain) {
148     AliError(Form("Input 0 for %s not found\n", GetName()));
149     return ;
150   }
151   
152   // One should first check if the branch address was taken by some other task
153   char ** address = (char **)GetBranchAddress(0, "ESD");
154   if (address) {
155     fESD = (AliESD*)(*address);
156   } else {
157     fESD = new AliESD();
158     SetBranchAddress(0, "ESD", &fESD);
159   }
160 }
161
162 //________________________________________________________________________
163 void AliPMDQATask::CreateOutputObjects()
164 {  
165   // create histograms 
166   
167   OpenFile(0) ; 
168
169   fhPMDP1   = new TH2F("fhPMDP1","XY of Clusters",100,-100.,100.,100,-100.,100.);
170   fhPMDC2   = new TH1F("fhPMDC2","CPV  PHI",200,-1,9);
171   fhPMDP2   = new TH1F("fhPMDP2","PRE  PHI",200,-1,9);
172   fhPMDC3   = new TH1F("fhPMDC3","CPV  Clus",30,0.,500.);
173   fhPMDP3   = new TH1F("fhPMDP3","PRE  N-gammalike",20,0.,500.);
174   fhPMDP4   = new TH1F("fhPMDP4","PRE  EDEP",30,0.,1000.);
175   fhPMDC5   = new TH1F("fhPMDC5","CPV  n-cell",20,0.,100.);
176   fhPMDP5   = new TH1F("fhPMDP5","PMD  n-cell",20,0.,100.);
177   fhPMDCP0  = new TH2F("fhPMDCP0","PRE CLUS Quad.1 vs 2",150,0.,300.,150,0.,300.);
178   fhPMDCP1  = new TH2F("fhPMDCP1","PRE CLUS Quad.3 vs 4",150,0.,300.,150,0.,300.);
179   fhPMDCP2  = new TH2F("fhPMDCP2","PRE EDEP Quad.3 vs 4",50,0.,300.,50,0.,300.);
180   fhPMDCP3  = new TH2F("fhPMDCP3","PRE EDEP vs Tot Clus ",10,0.,1000.,10,0.,300.);
181   fhPMDCP4  = new TH2F("fhPMDCP4","PRE Clus vs CPV Clus ",150,0.,200.,150,0.,200.);
182
183   fhPMDSM1  = new TH2F("fhPMDSM1","PRE Cluster XY",200,-100,100,200,-100,100);
184   fhPMDSM2  = new TH2F("fhPMDSM2","",999,-100.0,100.0,999,-100.0,100.0);
185   fhPMDSM3  = new TH2F("fhPMDSM3","",999,-100.0,100.0,999,-100.0,100.0);
186   fhPMDSM4  = new TH2F("fhPMDSM4","",999,-100.0,100.0,999,-100.0,100.0);
187   fhPMDSM5  = new TH2F("fhPMDSM5","",999,-100.0,100.0,999,-100.0,100.0);
188   fhPMDSM6  = new TH2F("fhPMDSM6","",999,-100.0,100.0,999,-100.0,100.0);
189   fhPMDSM7  = new TH2F("fhPMDSM7","",999,-100.0,100.0,999,-100.0,100.0);
190   fhPMDSM8  = new TH2F("fhPMDSM8","",999,-100.0,100.0,999,-100.0,100.0);
191   fhPMDSM9  = new TH2F("fhPMDSM9","",999,-100.0,100.0,999,-100.0,100.0);
192   fhPMDSM10 = new TH2F("fhPMDSM10","",999,-100.0,100.0,999,-100.0,100.0);
193   fhPMDSM11 = new TH2F("fhPMDSM11","",999,-100.0,100.0,999,-100.0,100.0);
194   fhPMDSM12 = new TH2F("fhPMDSM12","",999,-100.0,100.0,999,-100.0,100.0);
195   fhPMDSM13 = new TH2F("fhPMDSM13","",999,-100.0,100.0,999,-100.0,100.0);
196   fhPMDSM14 = new TH2F("fhPMDSM14","",999,-100.0,100.0,999,-100.0,100.0);
197   fhPMDSM15 = new TH2F("fhPMDSM15","",999,-100.0,100.0,999,-100.0,100.0);
198   fhPMDSM16 = new TH2F("fhPMDSM16","",999,-100.0,100.0,999,-100.0,100.0);
199   fhPMDSM17 = new TH2F("fhPMDSM17","",999,-100.0,100.0,999,-100.0,100.0);
200   fhPMDSM18 = new TH2F("fhPMDSM18","",999,-100.0,100.0,999,-100.0,100.0);
201   fhPMDSM19 = new TH2F("fhPMDSM19","",999,-100.0,100.0,999,-100.0,100.0);
202   fhPMDSM20 = new TH2F("fhPMDSM20","",999,-100.0,100.0,999,-100.0,100.0);
203   fhPMDSM21 = new TH2F("fhPMDSM21","",999,-100.0,100.0,999,-100.0,100.0);
204   fhPMDSM22 = new TH2F("fhPMDSM22","",999,-100.0,100.0,999,-100.0,100.0);
205   fhPMDSM23 = new TH2F("fhPMDSM23","",999,-100.0,100.0,999,-100.0,100.0);
206   fhPMDSM24 = new TH2F("fhPMDSM24","",999,-100.0,100.0,999,-100.0,100.0);
207   fhPMDSM   = new TH1F("fhPMDSM","Plot of all 24 Super Modules",24,0,24);
208   
209   // create output container
210   
211   fOutputContainer = new TObjArray(38) ; 
212   fOutputContainer->SetName("PMD") ; 
213
214   fOutputContainer->AddAt(fhPMDP1,    0 );
215   fOutputContainer->AddAt(fhPMDC2,    1 );
216   fOutputContainer->AddAt(fhPMDP2,    2 );
217   fOutputContainer->AddAt(fhPMDC3,    3 );
218   fOutputContainer->AddAt(fhPMDP3,    4 );
219   fOutputContainer->AddAt(fhPMDP4,    5 );
220   fOutputContainer->AddAt(fhPMDC5,    6 );
221   fOutputContainer->AddAt(fhPMDP5,    7 );
222   fOutputContainer->AddAt(fhPMDCP0,   8 );
223   fOutputContainer->AddAt(fhPMDCP1,   9);
224   fOutputContainer->AddAt(fhPMDCP2,  10 );
225   fOutputContainer->AddAt(fhPMDCP3,  11 );
226   fOutputContainer->AddAt(fhPMDCP4,  12 );
227   
228   fOutputContainer->AddAt(fhPMDSM1,  13 );
229   fOutputContainer->AddAt(fhPMDSM2,  14 );
230   fOutputContainer->AddAt(fhPMDSM3,  15 );
231   fOutputContainer->AddAt(fhPMDSM4,  16 );
232   fOutputContainer->AddAt(fhPMDSM5,  17 );
233   fOutputContainer->AddAt(fhPMDSM6,  18 );
234   fOutputContainer->AddAt(fhPMDSM7,  19 );
235   fOutputContainer->AddAt(fhPMDSM8,  20 );
236   fOutputContainer->AddAt(fhPMDSM9,  21 );
237   fOutputContainer->AddAt(fhPMDSM10, 22 );
238   fOutputContainer->AddAt(fhPMDSM11, 23 );
239   fOutputContainer->AddAt(fhPMDSM12, 24 );
240   fOutputContainer->AddAt(fhPMDSM13, 25 );
241   fOutputContainer->AddAt(fhPMDSM14, 26 );
242   fOutputContainer->AddAt(fhPMDSM15, 27 );
243   fOutputContainer->AddAt(fhPMDSM16, 28 );
244   fOutputContainer->AddAt(fhPMDSM17, 29 );
245   fOutputContainer->AddAt(fhPMDSM18, 30 );
246   fOutputContainer->AddAt(fhPMDSM19, 31 );
247   fOutputContainer->AddAt(fhPMDSM20, 32 );
248   fOutputContainer->AddAt(fhPMDSM21, 33 );
249   fOutputContainer->AddAt(fhPMDSM22, 34 );
250   fOutputContainer->AddAt(fhPMDSM23, 35 );
251   fOutputContainer->AddAt(fhPMDSM24, 36 );
252   fOutputContainer->AddAt(fhPMDSM,   37 );
253 }
254
255 //______________________________________________________________________________
256 void AliPMDQATask::Exec(Option_t *) 
257 {
258   // Processing of one event
259   
260   Long64_t entry = fChain->GetReadEntry() ;
261   
262   if (!fESD) {
263     AliError("fESD is not connected to the input!") ; 
264     return ; 
265   }
266   
267   if ( !((entry-1)%100) ) 
268     AliInfo(Form("%s ----> Processing event # %lld",  (dynamic_cast<TChain *>(fChain))->GetFile()->GetName(), entry)) ; 
269   
270   // ************************ PMD
271
272   AliPMDUtility *cc = new AliPMDUtility(); 
273   
274   Int_t smn;
275   Int_t n=0;
276   Float_t totCPVClus     ;
277   Float_t totPREClus     ;
278   Float_t totPREEdep  ;
279   Float_t totCPVCell     ;
280   Float_t totPRECell     ;
281   Float_t preCluQUAD[4]  ;
282   Float_t cpvCluQUAD[4]  ;
283   Float_t preADCQUAD[4]  ;
284   Float_t cpvADCQUAD[4]  ;
285   Float_t preCelQUAD[4]  ;
286   Float_t cpvCelQUAD[4]  ;
287
288   Int_t npmdCl = fESD->GetNumberOfPmdTracks();
289   
290   // ****** The loop over PMD clusters
291
292   for (Int_t kk = 0; kk < 4 ; kk++) {
293     cpvCluQUAD[kk] = 0.0 ;
294     preCluQUAD[kk] = 0.0 ;
295     cpvCelQUAD[kk] = 0.0 ;
296     preCelQUAD[kk] = 0.0 ;
297     preADCQUAD[kk] = 0.0 ;
298   } 
299  
300   while (npmdCl--) {
301     
302     AliESDPmdTrack * pmdtr = fESD->GetPmdTrack(npmdCl);
303     Int_t   det   = pmdtr->GetDetector();
304     Float_t clsX  = pmdtr->GetClusterX();
305     Float_t clsY  = pmdtr->GetClusterY();
306     Float_t clsZ  = pmdtr->GetClusterZ();
307     Float_t ncell = pmdtr->GetClusterCells();
308     Float_t adc   = pmdtr->GetClusterADC();
309     
310     cc->SetXYZ(clsX,clsY,clsZ);
311     cc->CalculateEta();
312     cc->CalculatePhi();
313     Float_t eta = cc->GetEta();
314     Float_t phi = cc->GetPhi();
315     
316    // Calculating S.Module Number from Cluster .
317     
318     CalculateSMN(clsX, clsY, smn);
319     if( det == 1)
320       {
321         if(smn >= 0 && smn <= 5) {
322           ++cpvCluQUAD[0] ;
323           cpvADCQUAD[0] =+ adc  ;
324           cpvCelQUAD[0] =+ ncell ;
325         }
326         if(smn >= 6 && smn <=11) {
327           ++cpvCluQUAD[1] ;
328           cpvADCQUAD[1] =+ adc  ;
329           cpvCelQUAD[1] =+ ncell ;
330         }
331         if(smn >=12 && smn <=17) {
332           ++cpvCluQUAD[2] ;
333           cpvADCQUAD[2] =+ adc  ;
334           cpvCelQUAD[2] =+ ncell ;
335         }
336         if(smn >=18 && smn <=23) {
337           ++cpvCluQUAD[3] ;
338           cpvADCQUAD[3] =+ adc  ;
339           cpvCelQUAD[3] =+ ncell ;
340         }
341         
342         if(eta >= 2.3 && eta <= 3.5)
343           {
344             fhPMDC2->Fill(phi);
345           }
346       }
347     if( det == 0)
348       {
349         if(smn >= 0 && smn <= 5) { 
350           ++preCluQUAD[0] ;
351           preADCQUAD[0] =+ adc  ;    
352           preCelQUAD[0] =+ ncell ;    
353         }    
354         if(smn >= 6 && smn <=11) { 
355           ++preCluQUAD[1] ;
356           preADCQUAD[1] =+ adc  ;    
357           preCelQUAD[1] =+ ncell ;    
358         }    
359         if(smn >=12 && smn <=17) { 
360           ++preCluQUAD[2] ;
361           preADCQUAD[2] =+ adc  ;    
362           preCelQUAD[2] =+ ncell ;    
363         }    
364         if(smn >=18 && smn <=23) { 
365           ++preCluQUAD[3] ;
366           preADCQUAD[3] =+ adc  ;    
367           preCelQUAD[3] =+ ncell ;    
368         }    
369         if ( n <= 100 ) { 
370           fhPMDSM->Fill(smn);
371           if(smn == 0) fhPMDSM1->Fill(-clsX,clsY);
372           if(smn == 0) fhPMDSM1->Fill(-clsX,clsY);
373           if(smn == 1) fhPMDSM2->Fill(-clsX,clsY);
374           if(smn == 2) fhPMDSM3->Fill(-clsX,clsY);
375           if(smn == 3) fhPMDSM4->Fill(-clsX,clsY);
376           if(smn == 4) fhPMDSM5->Fill(-clsX,clsY);
377           if(smn == 5) fhPMDSM6->Fill(-clsX,clsY);
378           if(smn == 6) fhPMDSM7->Fill(-clsX,clsY);
379           if(smn == 7) fhPMDSM8->Fill(-clsX,clsY);
380           if(smn == 8) fhPMDSM9->Fill(-clsX,clsY);
381           if(smn == 9) fhPMDSM10->Fill(-clsX,clsY);
382           if(smn ==10) fhPMDSM11->Fill(-clsX,clsY);
383           if(smn ==11) fhPMDSM12->Fill(-clsX,clsY);
384           if(smn ==12) fhPMDSM13->Fill(-clsX,clsY);
385           if(smn ==13) fhPMDSM14->Fill(-clsX,clsY);
386           if(smn ==14) fhPMDSM15->Fill(-clsX,clsY);
387           if(smn ==15) fhPMDSM16->Fill(-clsX,clsY);
388           if(smn ==16) fhPMDSM17->Fill(-clsX,clsY);
389           if(smn ==17) fhPMDSM18->Fill(-clsX,clsY);
390           if(smn ==18) fhPMDSM19->Fill(-clsX,clsY);
391           if(smn ==19) fhPMDSM20->Fill(-clsX,clsY);
392           if(smn ==20) fhPMDSM21->Fill(-clsX,clsY);
393           if(smn ==21) fhPMDSM22->Fill(-clsX,clsY);
394           if(smn ==22) fhPMDSM23->Fill(-clsX,clsY);
395           if(smn ==23) fhPMDSM24->Fill(-clsX,clsY);
396         }     
397         if(eta >= 2.3 && eta <= 3.5)
398           {
399             fhPMDP2->Fill(phi);
400           }
401         fhPMDP1->Fill(clsX,clsY);
402       }
403   } 
404   for (Int_t k = 0 ; k < 4 ; k++) {
405     totCPVClus =+ cpvCluQUAD [k] ;
406     totPREClus =+ preCluQUAD [k] ;
407     totCPVCell =+ cpvCelQUAD [k] ;
408     totPRECell =+ preCelQUAD [k] ;
409     totPREEdep =+ preADCQUAD [k] ;     
410     }
411   Float_t totCPVpreClus = totPREClus + totCPVClus ;
412
413   //  if(eta >= 2.3 && eta <= 3.5) {
414   fhPMDC3->Fill(totCPVClus);
415   fhPMDP3->Fill(totPREClus);
416   fhPMDP4->Fill(totPREEdep);
417   fhPMDP5->Fill(totPRECell);
418   fhPMDCP0->Fill(preCluQUAD[0],preCluQUAD[1]);
419   fhPMDCP1->Fill(preCluQUAD[2],preCluQUAD[3]);
420   fhPMDCP2->Fill(preADCQUAD[2],preADCQUAD[3]);
421   fhPMDCP3->Fill(totPREEdep,totCPVpreClus);
422   fhPMDCP4->Fill(totPREClus,totCPVClus);
423   //    }
424   totCPVClus = 0.0; 
425   totPREClus = 0.0; 
426   totCPVCell = 0.0; 
427   totPRECell = 0.0; 
428   totPREEdep = 0.0; 
429
430   PostData(0, fOutputContainer);
431
432
433 //______________________________________________________________________________
434 void AliPMDQATask::Terminate(Option_t *)
435 {
436   // Processing when the event loop is ended
437   fOutputContainer = (TObjArray*)GetOutputData(0);
438   
439   fhPMDP1   = (TH2F*)fOutputContainer->At(0);
440   fhPMDC2   = (TH1F*)fOutputContainer->At(1);
441   fhPMDP2   = (TH1F*)fOutputContainer->At(2);
442   fhPMDC3   = (TH1F*)fOutputContainer->At(3);
443   fhPMDP3   = (TH1F*)fOutputContainer->At(4);
444   fhPMDP4   = (TH1F*)fOutputContainer->At(5);
445   fhPMDC5   = (TH1F*)fOutputContainer->At(6);
446   fhPMDP5   = (TH1F*)fOutputContainer->At(7);
447   fhPMDCP0  = (TH2F*)fOutputContainer->At(8);
448   fhPMDCP1  = (TH2F*)fOutputContainer->At(9);
449   fhPMDCP2  = (TH2F*)fOutputContainer->At(10);
450   fhPMDCP3  = (TH2F*)fOutputContainer->At(11);
451   fhPMDCP4  = (TH2F*)fOutputContainer->At(12);
452
453   fhPMDSM1  = (TH2F*)fOutputContainer->At(13);
454   fhPMDSM2  = (TH2F*)fOutputContainer->At(14);
455   fhPMDSM3  = (TH2F*)fOutputContainer->At(15);
456   fhPMDSM4  = (TH2F*)fOutputContainer->At(16);
457   fhPMDSM5  = (TH2F*)fOutputContainer->At(17);
458   fhPMDSM6  = (TH2F*)fOutputContainer->At(18);
459   fhPMDSM7  = (TH2F*)fOutputContainer->At(19);
460   fhPMDSM8  = (TH2F*)fOutputContainer->At(20);
461   fhPMDSM9  = (TH2F*)fOutputContainer->At(21);
462   fhPMDSM10 = (TH2F*)fOutputContainer->At(22);
463   fhPMDSM11 = (TH2F*)fOutputContainer->At(23);
464   fhPMDSM12 = (TH2F*)fOutputContainer->At(24);
465   fhPMDSM13 = (TH2F*)fOutputContainer->At(25);
466   fhPMDSM14 = (TH2F*)fOutputContainer->At(26);
467   fhPMDSM15 = (TH2F*)fOutputContainer->At(27);
468   fhPMDSM16 = (TH2F*)fOutputContainer->At(28);
469   fhPMDSM17 = (TH2F*)fOutputContainer->At(29);
470   fhPMDSM18 = (TH2F*)fOutputContainer->At(30);
471   fhPMDSM19 = (TH2F*)fOutputContainer->At(31);
472   fhPMDSM20 = (TH2F*)fOutputContainer->At(32);
473   fhPMDSM21 = (TH2F*)fOutputContainer->At(33);
474   fhPMDSM22 = (TH2F*)fOutputContainer->At(34);
475   fhPMDSM23 = (TH2F*)fOutputContainer->At(35);
476   fhPMDSM24 = (TH2F*)fOutputContainer->At(36);
477   fhPMDSM   = (TH1F*)fOutputContainer->At(37);
478
479   Bool_t problem = kFALSE ; 
480   AliInfo(Form(" *** %s Report:", GetName())) ; 
481
482   gStyle->SetOptStat(110000);
483   gStyle->SetOptFit(1);
484
485   TCanvas *cPMD0 = new TCanvas("cPMD0","PMD ESD Test #1", 10,10, 600, 600);
486   cPMD0->Range(-100, -100,100 ,100 );
487   fhPMDSM1->SetMarkerColor(2);
488   fhPMDSM1->Draw();
489   fhPMDSM1->GetXaxis()->SetTitle("Cluster X");
490   fhPMDSM1->GetYaxis()->SetTitle("Cluster Y");
491   fhPMDSM2->SetMarkerColor(2);
492   fhPMDSM2->Draw("same");
493   fhPMDSM3->SetMarkerColor(2);
494   fhPMDSM3->Draw("same");
495   fhPMDSM4->SetMarkerColor(2);
496   fhPMDSM4->Draw("same");
497   fhPMDSM5->SetMarkerColor(2);
498   fhPMDSM5->Draw("same");
499   fhPMDSM6->SetMarkerColor(2);
500   fhPMDSM6->Draw("same");
501   fhPMDSM7->SetMarkerColor(4);
502   fhPMDSM7->Draw("same");
503   fhPMDSM8->SetMarkerColor(4);
504   fhPMDSM8->Draw("same");
505   fhPMDSM9->SetMarkerColor(4);
506   fhPMDSM9->Draw("same");
507   fhPMDSM10->SetMarkerColor(4);
508   fhPMDSM10->Draw("same");
509   fhPMDSM11->SetMarkerColor(4);
510   fhPMDSM11->Draw("same");
511   fhPMDSM12->SetMarkerColor(4);
512   fhPMDSM12->Draw("same");
513   fhPMDSM13->SetMarkerColor(6);
514   fhPMDSM13->Draw("same");
515   fhPMDSM14->SetMarkerColor(6);
516   fhPMDSM14->Draw("same");
517   fhPMDSM15->SetMarkerColor(6);
518   fhPMDSM15->Draw("same");
519   fhPMDSM16->SetMarkerColor(6);
520   fhPMDSM16->Draw("same");
521   fhPMDSM17->SetMarkerColor(6);
522   fhPMDSM17->Draw("same");
523   fhPMDSM18->SetMarkerColor(6);
524   fhPMDSM18->Draw("same");
525   fhPMDSM19->SetMarkerColor(8);
526   fhPMDSM19->Draw("same");
527   fhPMDSM20->SetMarkerColor(8);
528   fhPMDSM20->Draw("same");
529   fhPMDSM21->SetMarkerColor(8);
530   fhPMDSM21->Draw("same");
531   fhPMDSM22->SetMarkerColor(8);
532   fhPMDSM22->Draw("same");
533   fhPMDSM23->SetMarkerColor(8);
534   fhPMDSM23->Draw("same");
535   fhPMDSM24->SetMarkerColor(8);
536   fhPMDSM24->Draw("same");
537
538   DrawPMDBoundary();
539   DrawPMDBoundarySM1();
540   DrawPMDBoundarySM2();
541   DrawPMDBoundarySM3();
542   DrawPMDBoundarySM4();
543   cPMD0->Print("ClusterXY.eps");
544   
545   TCanvas *cPMD1 = new TCanvas("cPMD1"," PMD ESD Test #2",10, 10, 600,600);
546   cPMD1->Divide(1,2);
547   cPMD1->cd(1);
548   cPMD1->SetFillColor(0);
549   fhPMDC2->SetLineColor(4);
550   fhPMDC2->Draw();
551   cPMD1->cd(2);
552   fhPMDP2->SetLineColor(2);
553   fhPMDP2->Draw();
554   cPMD1->Print("CPVPREphi.eps");
555
556   TCanvas *cPMD2 = new TCanvas("cPMD2","PMD ESD test #3",10, 10, 600, 600);
557   cPMD2->cd();
558   fhPMDSM->SetFillColor(2);
559   fhPMDSM->Draw();
560   cPMD2->Print("AllSMN.eps");
561
562   TCanvas *cPMD3 = new TCanvas("cPMD3", "PMD ESD test #4",10, 10, 600, 600);
563   cPMD3->Divide(2,2);
564   cPMD3->cd(1);
565   fhPMDCP0->SetMarkerColor(9);
566   fhPMDCP0->Draw();
567   cPMD3->cd(2);
568   fhPMDCP1->SetMarkerColor(6);
569   fhPMDCP1->Draw();
570   cPMD3->cd(3);
571   fhPMDP3->SetLineColor(2);
572   fhPMDP3->Draw();
573   cPMD3->cd(4);
574   fhPMDCP4->SetMarkerColor(3);
575   fhPMDCP4->Draw();
576   cPMD3->Print("CPVPREClus.eps");
577
578   TCanvas *cPMD4 = new TCanvas("cPMD4","PMD ESD test #5", 10, 10, 600, 600);
579   cPMD4->Divide(1,2);
580   cPMD4->cd(1);
581   fhPMDC3->SetLineColor(4);
582   fhPMDC3->Draw();
583   cPMD4->cd(2);
584   fhPMDP4->SetLineColor(2);
585   fhPMDP4->Draw();
586   cPMD4->Print("CPVPREAdc.eps");
587
588   char line[1024] ; 
589   sprintf(line, ".!tar -zcf %s.tar.gz *.eps", GetName()) ; 
590   gROOT->ProcessLine(line);
591   
592   AliInfo(Form("!!! All the eps files are in %s.tar.gz !!!", GetName())) ;
593   
594   char * report ; 
595   if(problem)
596     report="Problems found, please check!!!";  
597   else 
598     report="OK";
599
600   AliInfo(Form("*** %s Summary Report: %s \n",GetName(), report)) ; 
601 }
602
603 //______________________________________________________________________________
604 void AliPMDQATask::CalculateSMN( Float_t clsX, Float_t clsY, Int_t & smn)
605 {
606   Double_t xcon[96] = {75.133, 54.204, 53.254, 32.326, 31.376,10.447,
607                        75.133, 54.204, 53.254, 32.326, 31.376,10.447,
608                        75.133, 54.204, 53.254, 32.326, 31.376,10.447,
609                        75.133, 54.204, 53.254, 32.326, 31.376,10.447,
610                        -75.133, -54.204, -53.254, -32.326, -31.376,-10.447,
611                        -75.133, -54.204, -53.254, -32.326, -31.376,-10.447,
612                        -75.133, -54.204, -53.254, -32.326, -31.376,-10.447,
613                        -75.133, -54.204, -53.254, -32.326, -31.376,-10.447,
614                        9.167, -32.543, -33.493, -75.133,
615                        9.167, -32.543, -33.493, -75.133,
616                        9.167, -32.543, -33.493, -75.133,
617                        9.167, -32.543, -33.493, -75.133,
618                        9.167, -32.543, -33.493, -75.133,
619                        9.167, -32.543, -33.493, -75.133,
620                        -9.167, 32.543, 33.493, 75.133,
621                        -9.167, 32.543, 33.493, 75.133,
622                        -9.167, 32.543, 33.493, 75.133,
623                        -9.167, 32.543, 33.493, 75.133,
624                        -9.167, 32.543, 33.493, 75.133,
625                        -9.167, 32.543, 33.493, 75.133};
626   
627   Double_t ycon[96] =  {86.475,  86.475,  86.475, 86.475,  86.475,  86.475,
628                         38.225,  38.225,  38.225, 38.225,  38.225,  38.225,
629                         37.325,  37.325,  37.325, 37.325,  37.325,  37.325,
630                         -10.925, -10.925, -10.925, -10.925, -10.925, -10.925,
631                         -86.475, -86.475, -86.475, -86.475, -86.475, -86.475,
632                         -38.225,  -38.225,  -38.225, -38.225, -38.225, -38.225,
633                         -37.325,  -37.325,  -37.325, -37.325,  -37.325,  -37.325,
634                         10.925, 10.925, 10.925, 10.925, 10.925, 10.925,
635                         86.475,  86.475, 86.475,  86.475,
636                         62.225,  62.225, 62.225,  62.225,
637                         61.325,  61.325, 61.325,  61.325,
638                         37.075, 37.075, 37.075, 37.075,
639                         36.175,  36.175, 36.175,  36.175,
640                         11.925, 11.925, 11.925 , 11.925,
641                         -86.475,  -86.475, -86.475,  -86.475,
642                         -62.225,  -62.225, -62.225,  -62.225,
643                         -61.325,  -61.325, -61.325,  -61.325,
644                         -37.075,  -37.075, -37.075,  -37.075,
645                         -36.175,  -36.175, -36.175,  -36.175,
646                         -11.925, -11.925,  -11.925 , -11.925 };
647   
648   if((clsX <= xcon[0]) && (clsX >= xcon[1]) &&
649      (clsY <= ycon[0]) && (clsY >= ycon[6])) smn = 0 ;
650   
651   else if((clsX <=xcon[2]) && (clsX >= xcon[3]) &&
652           (clsY <= ycon[1]) && (clsY >= ycon[7]))smn = 1 ;
653   
654   else if((clsX <=xcon[4]) && (clsX >= xcon[5]) &&
655           (clsY <= ycon[3]) && (clsY >= ycon[8]))smn = 2 ;
656   
657   else if((clsX <= xcon[0]) && (clsX >= xcon[1]) &&
658           (clsY <= ycon[12]) && (clsY >= ycon[18])) smn = 3 ;
659   
660   else if((clsX <=xcon[2]) && (clsX >= xcon[3]) &&
661           (clsY <= ycon[12]) && (clsY >= ycon[18]))smn = 4 ;
662   
663   else if((clsX <=xcon[4]) && (clsX >= xcon[5]) &&
664           (clsY <= ycon[12]) && (clsY >= ycon[18]))smn = 5 ;
665   //------------------------------------------------------------------
666   else if((clsX >= xcon[24]) && (clsX <= xcon[25]) &&
667           (clsY >= ycon[24]) && (clsY <= ycon[30])) smn = 6 ;
668   
669   else if((clsX >=xcon[26]) && (clsX <= xcon[27]) &&
670           (clsY >= ycon[25]) && (clsY <= ycon[31]))smn = 7 ;
671   
672   else if((clsX >=xcon[28]) && (clsX <= xcon[29]) &&
673           (clsY >= ycon[26]) && (clsY <= ycon[32]))smn = 8 ;
674   
675   else if((clsX >= xcon[24]) && (clsX <= xcon[25]) &&
676           (clsY >= ycon[36]) && (clsY <= ycon[42])) smn = 9 ;
677   
678   else if((clsX >=xcon[26]) && (clsX <= xcon[27]) &&
679           (clsY >= ycon[36]) && (clsY <= ycon[42]))smn = 10;
680   
681   else if((clsX >=xcon[28]) && (clsX <= xcon[29]) &&
682           (clsY >= ycon[36]) && (clsY <= ycon[42]))smn = 11;
683   //------------------------------------------------------------------
684   else if((clsX <= xcon[48]) && (clsX >= xcon[49]) &&
685           (clsY <= ycon[48]) && (clsY >= ycon[52])) smn = 12 ;
686   
687   else if((clsX <=xcon[50]) && (clsX >= xcon[51]) &&
688           (clsY <= ycon[48]) && (clsY >= ycon[52]))smn = 13 ;
689   
690   else if((clsX <=xcon[48]) && (clsX >= xcon[49]) &&
691           (clsY <= ycon[56]) && (clsY >= ycon[60]))smn = 14 ;
692   
693   else if((clsX <=xcon[50]) && (clsX >= xcon[51]) &&
694           (clsY <= ycon[56]) && (clsY >= ycon[60]))smn = 15 ;
695   
696   else if((clsX <=xcon[48]) && (clsX >= xcon[49]) &&
697           (clsY <= ycon[64]) && (clsY >= ycon[68]))smn = 16 ;
698   
699   else if((clsX <=xcon[50]) && (clsX >= xcon[51]) &&
700           (clsY <= ycon[64]) && (clsY >= ycon[68]))smn = 17 ;
701   //--------------------------------------------------------------
702   else if((clsX >= xcon[72]) && (clsX <= xcon[73]) &&
703           (clsY >= ycon[72]) && (clsY <= ycon[76])) smn = 18 ;
704   
705   else if((clsX >=xcon[74]) && (clsX <= xcon[75]) &&
706           (clsY >= ycon[72]) && (clsY <= ycon[76]))smn = 19 ;
707   
708   else if((clsX >=xcon[72]) && (clsX <= xcon[73]) &&
709           (clsY >= ycon[80]) && (clsY <= ycon[84]))smn = 20 ;
710   
711   else if((clsX >=xcon[74]) && (clsX <= xcon[75]) &&
712           (clsY >= ycon[80]) && (clsY <= ycon[84]))smn = 21;
713   
714   else if((clsX >= xcon[72]) && (clsX <= xcon[73]) &&
715           (clsY >= ycon[88]) && (clsY <= ycon[92])) smn = 22 ;
716   
717   else if((clsX >=xcon[74]) && (clsX <= xcon[75]) &&
718           (clsY >= ycon[88]) && (clsY <= ycon[92]))smn = 23 ;
719   else smn = 111;
720  }
721
722 //______________________________________________________________________________
723 void AliPMDQATask::DrawPMDBoundary()
724 {
725   // Draw PMD boundaries 
726   
727   gStyle->SetLineWidth(2);
728   gStyle->SetLineColor(2);
729   TLine * l;
730   l = new TLine(75.1333, 86.475, -75.1333, 86.475); l->Draw("same");
731   l = new TLine(-75.1333, 86.470,-75.1333, -86.475); l->Draw("same");
732   l = new TLine(-75.1333, -86.475,75.1333, -86.475); l->Draw("same");
733   l = new TLine(75.1333, -86.475,75.1333, 86.475); l->Draw("same");
734 }
735
736 //______________________________________________________________________________
737 void AliPMDQATask::DrawPMDBoundarySM1()
738 {
739   // Draw boundaries of Super Module 1 
740
741   gStyle->SetLineWidth(1);
742   gStyle->SetLineColor(4);
743   TLine * l;
744   l = new TLine(-75.1333, 86.475, -10.447,  86.475); l->Draw("same");
745   l = new TLine(-10.447, 86.475, -10.446, -10.925); l->Draw("same");
746   l = new TLine(-10.446, -10.925, -75.1333,-10.925); l->Draw("same");
747   l = new TLine(-75.1333,-10.925, -75.1333, 86.475); l->Draw("same");
748 }
749
750 //______________________________________________________________________________
751 void AliPMDQATask::DrawPMDBoundarySM2()
752 {
753   // Draw boundaries of Super Module 2 
754
755   gStyle->SetLineWidth(1);
756   gStyle->SetLineColor(4);
757   TLine * l;
758   l = new TLine(75.1333, -86.475, 10.446,  -86.475); l->Draw("same");
759   l = new TLine(10.446,  -86.475, 10.446,  10.925); l->Draw("same");
760   l = new TLine(10.446,   10.925, 75.1333, 10.925); l->Draw("same");
761   l = new TLine(75.1333,  10.925, 75.1333, -86.475); l->Draw("same");
762 }
763
764
765 //______________________________________________________________________________
766 void AliPMDQATask::DrawPMDBoundarySM3()
767 {
768   // Draw boundaries of Super Module 3 
769
770   gStyle->SetLineWidth(1);
771   gStyle->SetLineColor(1);
772   TLine * l;
773   l = new TLine(  -9.167, 86.475, 75.1333, 86.475); l->Draw("same");
774   l = new TLine(75.1333,86.475, 75.1333, 11.925); l->Draw("same");
775   l = new TLine(75.1333,11.925,   -9.167,  11.925); l->Draw("same");
776   l = new TLine(  -9.167, 11.925,   -9.167,  86.475); l->Draw("same");
777 }
778
779 //______________________________________________________________________________
780 void AliPMDQATask::DrawPMDBoundarySM4()
781 {
782   // Draw boundaries of Super Module 4 
783
784   gStyle->SetLineWidth(1);
785   gStyle->SetLineColor(1);
786   TLine * l;
787   l = new TLine(9.167, -86.475, -75.1333,-86.475); l->Draw("same");
788   l = new TLine(-75.1333,-86.475, -75.1333,-11.925); l->Draw("same");
789   l = new TLine(-75.1333,-11.925, 9.167, -11.925); l->Draw("same");
790   l = new TLine(9.167, -11.925, 9.167, -86.475); l->Draw("same");
791 }