1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 Based on the QA code for PHOS written by Yves Schutz July 2007
18 Authors: J.Klay (Cal Poly) May 2008
19 S. Salur LBL April 2008
23 // --- ROOT system ---
24 #include <TClonesArray.h>
30 // --- Standard library ---
32 // --- AliRoot header files ---
33 #include "AliESDCaloCluster.h"
34 #include "AliESDCaloCells.h"
35 #include "AliESDEvent.h"
37 #include "AliEMCALQADataMakerRec.h"
38 #include "AliQAChecker.h"
39 #include "AliEMCALRecPoint.h"
40 #include "AliEMCALRawUtils.h"
41 #include "AliEMCALReconstructor.h"
42 #include "AliEMCALRecParam.h"
43 #include "AliRawReader.h"
45 ClassImp(AliEMCALQADataMakerRec)
47 //____________________________________________________________________________
48 AliEMCALQADataMakerRec::AliEMCALQADataMakerRec() :
49 AliQADataMakerRec(AliQA::GetDetName(AliQA::kEMCAL), "EMCAL Quality Assurance Data Maker")
54 //____________________________________________________________________________
55 AliEMCALQADataMakerRec::AliEMCALQADataMakerRec(const AliEMCALQADataMakerRec& qadm) :
59 SetName((const char*)qadm.GetName()) ;
60 SetTitle((const char*)qadm.GetTitle());
63 //__________________________________________________________________
64 AliEMCALQADataMakerRec& AliEMCALQADataMakerRec::operator = (const AliEMCALQADataMakerRec& qadm )
67 this->~AliEMCALQADataMakerRec();
68 new(this) AliEMCALQADataMakerRec(qadm);
72 //____________________________________________________________________________
73 void AliEMCALQADataMakerRec::EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray * list)
75 //Detector specific actions at end of cycle
77 AliQAChecker::Instance()->Run(AliQA::kEMCAL, task, list) ;
80 //____________________________________________________________________________
81 void AliEMCALQADataMakerRec::InitESDs()
83 //Create histograms to controll ESD
84 TH1F * h1 = new TH1F("hESDCaloClusterE", "ESDs CaloCluster energy in EMCAL", 200, 0., 20.) ;
86 Add2ESDsList(h1, kESDCaloClusE) ;
88 TH1I * h2 = new TH1I("hESDCaloClusterM", "ESDs CaloCluster multiplicity in EMCAL", 100, 0, 100) ;
90 Add2ESDsList(h2, kESDCaloClusM) ;
92 TH1F * h3 = new TH1F("hESDCaloCellA", "ESDs CaloCell amplitude in EMCAL", 500, 0., 250.) ;
94 Add2ESDsList(h3, kESDCaloCellA) ;
96 TH1I * h4 = new TH1I("hESDCaloCellM", "ESDs CaloCell multiplicity in EMCAL", 200, 0, 1000) ;
98 Add2ESDsList(h4, kESDCaloCellM) ;
102 //____________________________________________________________________________
103 void AliEMCALQADataMakerRec::InitRecPoints()
105 // create Reconstructed Points histograms in RecPoints subdir
106 TH1F* h0 = new TH1F("hEMCALRpE","EMCAL RecPoint energies",200, 0.,20.); //GeV
108 Add2RecPointsList(h0,kRecPE);
110 TH1I* h1 = new TH1I("hEMCALRpM","EMCAL RecPoint multiplicities",100,0,100);
112 Add2RecPointsList(h1,kRecPM);
114 TH1I* h2 = new TH1I("hEMCALRpDigM","EMCAL RecPoint Digit Multiplicities",20,0,20);
116 Add2RecPointsList(h2,kRecPDigM);
120 //____________________________________________________________________________
121 void AliEMCALQADataMakerRec::InitRaws()
123 // create Raws histograms in Raws subdir
124 //these need more thought
126 TH1I * h0 = new TH1I("hLowEmcalSupermodules", "Low Gain digits in EMCAL supermodules", 12, 0, 12) ;
128 Add2RawsList(h0, kNsmodLG) ;
129 TH1I * h1 = new TH1I("hHighEmcalSupermodules", "High Gain Digits in EMCAL supermodules", 12, 0, 12) ;
131 Add2RawsList(h1, kNsmodHG) ;
133 TH1F * h2 = new TH1F("hLowEmcalRawtime", "Low Gain Time of raw digits in EMCAL", 500, -50., 200.) ;
135 Add2RawsList(h2, kLGtime) ;
136 TH1F * h3 = new TH1F("hHighEmcalRawtime", "High Gain Time of raw digits in EMCAL", 500, -50., 200.) ;
138 Add2RawsList(h3, kHGtime) ;
140 TH1F * h4 = new TH1F("hLowEmcalRawEnergy", "Low Gain Energy of raw digits in EMCAL", 500, 0., 1000.) ;
142 Add2RawsList(h4, kSpecLG) ;
143 TH1F * h5 = new TH1F("hHighEmcalRawEnergy", "High Gain Energy of raw digits in EMCAL",500,0., 1000.) ;
145 Add2RawsList(h5, kSpecHG) ;
147 TH1I * h6 = new TH1I("hLowNtot", "Low Gain Total Number of raw digits in EMCAL", 500, 0, 10000) ;
149 Add2RawsList(h6, kNtotLG) ;
150 TH1I * h7 = new TH1I("hHighNtot", "High Gain Total Number of raw digits in EMCAL",500,0, 10000) ;
152 Add2RawsList(h7, kNtotHG) ;
154 TH1F * h8 = new TH1F("hLowEtot", "Low Gain Total Energy of raw digits in EMCAL", 500, 0., 5000.) ;
156 Add2RawsList(h8, kEtotLG) ;
157 TH1F * h9 = new TH1F("hHighEtot", "High Gain Total Energy of raw digits in EMCAL",500,0., 100000.) ;
159 Add2RawsList(h9, kEtotHG) ;
164 //____________________________________________________________________________
165 void AliEMCALQADataMakerRec::MakeESDs(AliESDEvent * esd)
167 // make QA data from ESDs
170 for ( Int_t index = 0; index < esd->GetNumberOfCaloClusters() ; index++ ) {
171 AliESDCaloCluster * clu = esd->GetCaloCluster(index) ;
172 if( clu->IsEMCAL() ) {
173 GetESDsData(kESDCaloClusE)->Fill(clu->E()) ;
177 GetESDsData(kESDCaloClusM)->Fill(nTot) ;
180 AliESDCaloCells* cells = esd->GetEMCALCells();
181 GetESDsData(kESDCaloCellM)->Fill(cells->GetNumberOfCells()) ;
183 for ( Int_t index = 0; index < cells->GetNumberOfCells() ; index++ ) {
184 GetESDsData(kESDCaloCellA)->Fill(cells->GetAmplitude(index)) ;
189 //____________________________________________________________________________
190 void AliEMCALQADataMakerRec::MakeRaws(AliRawReader* rawReader)
192 //Fill prepared histograms with Raw digit properties
194 //Raw histogram filling not yet implemented
196 //Need to figure out how to get the info we want without having to
197 //actually run Raw2Digits twice.
198 //I suspect what we actually want is a raw digits method, not a true
199 //emcal raw data method, but this doesn't seem to be allowed in
200 //AliQADataMakerRec.h
205 //____________________________________________________________________________
206 void AliEMCALQADataMakerRec::MakeRecPoints(TTree * clustersTree)
208 // makes data from RecPoints
209 TBranch *emcbranch = clustersTree->GetBranch("EMCALECARP");
211 AliError("can't get the branch with the EMCAL clusters !");
214 TObjArray * emcrecpoints = new TObjArray(100) ;
215 emcbranch->SetAddress(&emcrecpoints);
216 emcbranch->GetEntry(0);
218 GetRecPointsData(kRecPM)->Fill(emcrecpoints->GetEntriesFast()) ;
219 TIter next(emcrecpoints) ;
220 AliEMCALRecPoint * rp ;
221 while ( (rp = dynamic_cast<AliEMCALRecPoint *>(next())) ) {
222 GetRecPointsData(kRecPE)->Fill( rp->GetEnergy()) ;
223 GetRecPointsData(kRecPDigM)->Fill(rp->GetMultiplicity());
225 emcrecpoints->Delete();
230 //____________________________________________________________________________
231 void AliEMCALQADataMakerRec::StartOfDetectorCycle()
233 //Detector specific actions at start of cycle