- add new classes
[u/mrichter/AliRoot.git] / VZERO / AliVZEROQADataMakerSim.cxx
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  **************************************************************************/
15
16
17 /* $Id: AliVZEROQADataMakerSim.cxx 23123 2007-12-18 09:08:18Z hristov $ */
18
19 //---
20 //  Produces the data needed to calculate the quality assurance. 
21 //  All data must be mergeable objects.
22 //  Author : BC
23 //---
24
25 // --- ROOT system ---
26 #include <TClonesArray.h>
27 #include <TFile.h> 
28 #include <TH1F.h> 
29 #include <TDirectory.h>
30 // --- Standard library ---
31
32 // --- AliRoot header files ---
33 #include "AliESDEvent.h"
34 #include "AliLog.h"
35 #include "AliVZEROdigit.h" 
36 #include "AliVZEROhit.h"
37 #include "AliVZEROQADataMakerSim.h"
38 #include "AliQAChecker.h"
39
40 ClassImp(AliVZEROQADataMakerSim)
41            
42 //____________________________________________________________________________ 
43   AliVZEROQADataMakerSim::AliVZEROQADataMakerSim() : 
44   AliQADataMakerSim(AliQAv1::GetDetName(AliQAv1::kVZERO), "VZERO Quality Assurance Data Maker")
45
46 {
47   // constructor
48
49   
50 }
51
52 //____________________________________________________________________________ 
53 AliVZEROQADataMakerSim::AliVZEROQADataMakerSim(const AliVZEROQADataMakerSim& qadm) :
54   AliQADataMakerSim() 
55 {
56   //copy constructor 
57
58   SetName((const char*)qadm.GetName()) ; 
59   SetTitle((const char*)qadm.GetTitle()); 
60 }
61
62 //__________________________________________________________________
63 AliVZEROQADataMakerSim& AliVZEROQADataMakerSim::operator = (const AliVZEROQADataMakerSim& qadm )
64 {
65   // Assign operator.
66   this->~AliVZEROQADataMakerSim();
67   new(this) AliVZEROQADataMakerSim(qadm);
68   return *this;
69 }
70 //____________________________________________________________________________
71 void AliVZEROQADataMakerSim::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list)
72 {
73   //Detector specific actions at end of cycle
74   // do the QA checking
75   ResetEventTrigClasses();
76   AliQAChecker::Instance()->Run(AliQAv1::kVZERO, task, list) ;
77 }
78
79  
80 //____________________________________________________________________________ 
81 void AliVZEROQADataMakerSim::InitHits()
82 {
83  
84   // create Hits histograms in Hits subdir
85   const Bool_t expert   = kTRUE ; 
86   const Bool_t image    = kTRUE ; 
87   
88   TH1I * h0 = new TH1I("hHitMultiplicity", "Hit multiplicity distribution in VZERO;# of Hits;Entries", 300, 0, 299) ; 
89   h0->Sumw2() ;
90   Add2HitsList(h0, 0, !expert, image) ;  
91   
92   TH1I * h1 = new TH1I("hHitCellNumber", "Hit cell distribution in VZERO;# of Hits;Entries", 80, 0, 79) ; 
93   h1->Sumw2() ;
94   Add2HitsList(h1, 1, !expert, image) ;  
95   //
96   ClonePerTrigClass(AliQAv1::kHITS); // this should be the last line    
97 }
98
99 //____________________________________________________________________________ 
100 void AliVZEROQADataMakerSim::InitDigits()
101 {
102   // create Digits histograms in Digits subdir
103   const Bool_t expert   = kTRUE ; 
104   const Bool_t image    = kTRUE ; 
105   
106   TH1I *fhDigTDC[64]; 
107   TH1I *fhDigADC[64]; 
108
109   // create Digits histograms in Digits subdir
110   TH1I * h0 = new TH1I("hDigitMultiplicity", "Digits multiplicity distribution in VZERO;# of Digits;Entries", 100, 0, 99) ; 
111   h0->Sumw2() ;
112   Add2DigitsList(h0, 0, !expert, image) ;
113   
114   for (Int_t i=0; i<64; i++)
115     {
116        fhDigTDC[i] = new TH1I(Form("hDigitTDC%d", i),Form("Digit TDC in cell %d; TDC value;Entries",i),300,0.,149.);
117        fhDigADC[i]= new TH1I(Form("hDigitADC%d", i),Form("Digit ADC in cell %d;ADC value;Entries",i),1024,0.,1023.);
118        
119        Add2DigitsList(fhDigTDC[i],i+1, !expert, image);
120        Add2DigitsList(fhDigADC[i],i+1+64, !expert, image);  
121      }  
122   //
123   ClonePerTrigClass(AliQAv1::kDIGITS); // this should be the last line
124 }
125
126
127 //____________________________________________________________________________
128 void AliVZEROQADataMakerSim::MakeHits()
129 {
130         //make QA data from Hits
131
132   Int_t nhits = fHitsArray->GetEntriesFast();
133   FillHitsData(0,nhits) ;    // fills Hit multiplicity
134   for (Int_t ihit=0;ihit<nhits;ihit++) 
135     {
136            AliVZEROhit  * VZEROHit   = (AliVZEROhit*) fHitsArray->UncheckedAt(ihit);
137            if (!VZEROHit) {
138               AliError("The unchecked hit doesn't exist");
139               break;
140            }
141            FillHitsData(1,VZEROHit->Cell());
142         }
143 }
144
145
146 //____________________________________________________________________________
147
148 void AliVZEROQADataMakerSim::MakeHits(TTree *hitTree)
149 {
150   //fills QA histos for Hits
151  if (fHitsArray)
152    fHitsArray->Clear() ; 
153   else 
154     fHitsArray = new TClonesArray("AliVZEROhit", 1000);
155   
156   TBranch * branch = hitTree->GetBranch("VZERO") ;
157   if ( ! branch ) {
158     AliWarning("VZERO branch in Hit Tree not found") ;
159   } else {
160
161    if (branch) {
162       branch->SetAddress(&fHitsArray);
163     }else{
164       AliError("Branch VZERO hit not found");
165       exit(111);
166     } 
167     // Check id histograms already created for this Event Specie
168     if ( ! GetHitsData(0) )
169       InitHits() ;
170     
171     Int_t ntracks    = (Int_t) hitTree->GetEntries();
172     
173     if (ntracks<=0) return;
174     // Start loop on tracks in the hits containers
175     for (Int_t track=0; track<ntracks;track++) {
176       branch->GetEntry(track);
177       Int_t nhits = fHitsArray->GetEntriesFast();
178       FillHitsData(0,nhits) ;    // fills Hit multiplicity
179       for (Int_t ihit=0;ihit<nhits;ihit++) 
180         {
181           AliVZEROhit  * VZEROHit   = (AliVZEROhit*) fHitsArray->UncheckedAt(ihit);
182           if (!VZEROHit) {
183             AliError("The unchecked hit doesn't exist");
184             break;
185           }
186           FillHitsData(1,VZEROHit->Cell());      
187         }
188     }
189   }
190   //
191   IncEvCountCycleHits();
192   IncEvCountTotalHits();
193   //
194 }
195
196
197 //____________________________________________________________________________
198 void AliVZEROQADataMakerSim::MakeDigits()
199 {
200   // makes data from Digits
201
202   FillDigitsData(0,fDigitsArray->GetEntriesFast()) ; 
203   TIter next(fDigitsArray) ; 
204     AliVZEROdigit *VZERODigit ; 
205     while ( (VZERODigit = dynamic_cast<AliVZEROdigit *>(next())) ) {
206          Int_t   PMNumber  = VZERODigit->PMNumber();         
207          FillDigitsData(PMNumber +1, VZERODigit->Time()) ;    // in 100 of picoseconds
208          FillDigitsData(PMNumber +1+64, VZERODigit->ADC()) ;
209     }  
210 }
211
212
213 //____________________________________________________________________________
214 void AliVZEROQADataMakerSim::MakeDigits(TTree *digitTree)
215 {
216     // makes data from Digit Tree
217         
218   if (fDigitsArray)
219     fDigitsArray->Clear() ; 
220   else 
221     fDigitsArray = new TClonesArray("AliVZEROdigit", 1000) ; 
222
223     TBranch * branch = digitTree->GetBranch("VZERODigit") ;
224     if ( ! branch ) {
225          AliWarning("VZERO branch in Digit Tree not found") ; 
226     } else {
227          branch->SetAddress(&fDigitsArray) ;
228          branch->GetEntry(0) ; 
229          MakeDigits() ; 
230     }  
231     //
232     IncEvCountCycleDigits();
233     IncEvCountTotalDigits();
234     //    
235 }
236
237
238 //____________________________________________________________________________
239 void AliVZEROQADataMakerSim::StartOfDetectorCycle()
240 {
241   //Detector specific actions at start of cycle
242
243 }