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