Crucial bug-fix. The raw-data events should be never skipped inside the QA data makers
[u/mrichter/AliRoot.git] / ACORDE / AliACORDEQADataMakerSim.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
18 //---
19 //  Produces the data needed to calculate the quality assurance. 
20 //  All data must be mergeable objects.
21
22 //  Authors:
23 //
24 //  Luciano Diaz Gonzalez <luciano.diaz@nucleares.unam.mx> (ICN-UNAM)
25 //  Mario Rodriguez Cahuantzi <mrodrigu@mail.cern.ch> (FCFM-BUAP)
26 //  Arturo Fernandez Tellez <afernan@mail.cern.ch (FCFM-BUAP)
27 //
28 //  Created: June 13th 2008
29 //---
30 // Last Update: Aug. 27th 2008 ---> Implementation to declare QA expert histogram 
31
32
33 // --- ROOT system ---
34 #include <TClonesArray.h>
35 #include <TFile.h> 
36 #include <TH1F.h> 
37 #include <TH2F.h>
38 #include <TDirectory.h>
39 // --- Standard library ---
40
41 // --- AliRoot header files ---
42 #include "AliESDEvent.h"
43 #include "AliLog.h"
44 #include "AliACORDEdigit.h" 
45 #include "AliACORDEhit.h"
46 #include "AliACORDEQADataMakerSim.h"
47 #include "AliQAChecker.h"
48 #include "AliACORDERawReader.h"
49 ClassImp(AliACORDEQADataMakerSim)
50            
51 //____________________________________________________________________________ 
52 AliACORDEQADataMakerSim::AliACORDEQADataMakerSim():AliQADataMakerSim(AliQA::GetDetName(AliQA::kACORDE), "ACORDE Quality Assurance Data Maker")
53 {
54 }
55 //____________________________________________________________________________ 
56 AliACORDEQADataMakerSim::AliACORDEQADataMakerSim(const AliACORDEQADataMakerSim& qadm) :
57   AliQADataMakerSim() 
58 {
59   SetName((const char*)qadm.GetName()) ; 
60   SetTitle((const char*)qadm.GetTitle()); 
61 }
62 //__________________________________________________________________
63 AliACORDEQADataMakerSim& AliACORDEQADataMakerSim::operator = (const AliACORDEQADataMakerSim& qadm )
64 {
65   // Equal operator.
66   this->~AliACORDEQADataMakerSim();
67   new(this) AliACORDEQADataMakerSim(qadm);
68   return *this;
69 }
70 //____________________________________________________________________________
71 void AliACORDEQADataMakerSim::EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray * list)
72 {
73   //Detector specific actions at end of cycle
74   // do the QA checking
75    printf("ACORDE---->Detector specific actions at END of cycle\n................\n");
76
77   AliQAChecker::Instance()->Run(AliQA::kACORDE, task, list) ;
78 }
79 //____________________________________________________________________________
80 void AliACORDEQADataMakerSim::StartOfDetectorCycle()
81 {
82   //Detector specific actions at start of cycle
83   printf("ACORDE---->Detector specific actions at START of cycle\n................\n");
84 }
85 //____________________________________________________________________________ 
86 void AliACORDEQADataMakerSim::InitHits()
87 {
88   // create Hits histograms in Hits subdir
89         
90         TH1F *   fHitsACORDE;
91         fHitsACORDE = new TH1F("hACORDEBitPattern","Distribution of fired modules",60,0,60);
92         Add2HitsList(fHitsACORDE,0,kFALSE);
93 }
94 //____________________________________________________________________________ 
95 void AliACORDEQADataMakerSim::InitDigits()
96 {
97   // create Digits histograms in Digits subdir
98
99    TH1F *    fhDigitsModule;
100    TString   modulename;
101    modulename = "hDigitsModule";
102    fhDigitsModule = new TH1F(modulename.Data(),"hDigitsModuleSingle",60,0,60);
103    Add2DigitsList(fhDigitsModule,0,kFALSE);
104
105 }
106 //____________________________________________________________________________
107
108 void AliACORDEQADataMakerSim::MakeHits(TTree *hitTree)
109 {
110   // Here we fill the QA histos for Hits declared above
111
112         TClonesArray * hits = new TClonesArray("AliACORDEhit",1000);
113         TBranch * branch = hitTree->GetBranch("ACORDE");
114         if (!branch)
115         {
116                 AliWarning("ACORDE branch in Hit Tree not found");
117         }else
118         {
119                 if (branch)
120                 {
121                         branch->SetAddress(&hits);
122                 }else
123                 {
124                         AliError("Branch ACORDE hit not found");
125                         exit(111);
126                 }
127                 Int_t ntracks = (Int_t)hitTree->GetEntries();
128                 if (ntracks<=0) return;
129                 for(Int_t track=0;track<ntracks;track++)
130                 {
131                         branch->GetEntry(track);
132                         Int_t nhits = hits->GetEntriesFast();
133                         for(Int_t ihit=1;ihit<=nhits;ihit++)
134                         {
135                                 AliACORDEhit *AcoHit = (AliACORDEhit*) hits->UncheckedAt(ihit);
136                                 if(!AcoHit)
137                                 {
138                                         AliError("The unchecked hit doesn't exist");
139                                         break;
140                                 }
141                                 GetHitsData(0)->Fill(AcoHit->GetModule()-1);
142                         }
143                 }
144         }
145
146 }
147 //____________________________________________________________________________
148 void AliACORDEQADataMakerSim::MakeDigits( TTree *digitsTree)
149 {
150   //fills QA histos for Digits
151
152
153         TClonesArray * digits = new TClonesArray("AliACORDEdigit",1000);
154         TBranch * branch = digitsTree->GetBranch("ACORDEdigit");
155         if (!branch)
156         {
157                 AliWarning("ACORDE branch in Digits Tree not found");
158         }else
159         {
160                 if (branch)
161                 {
162                         branch->SetAddress(&digits);
163                 }else
164                 {
165                         AliError("Branch ACORDE digit not found");
166                         exit(111);
167                 }
168                 Int_t ntracks = (Int_t)digitsTree->GetEntries();
169                 if (ntracks<=0) return;
170                 printf("Entries in DigitsTree:%d\n",ntracks);
171                 for(Int_t track=0;track<ntracks;track++)
172                 {
173                         branch->GetEntry(track);
174                         Int_t ndigits = digits->GetEntriesFast();
175                         for(Int_t idigit=0;idigit<ndigits;idigit++)
176                         {
177                                 AliACORDEdigit *AcoDigit = (AliACORDEdigit*) digits->UncheckedAt(idigit);
178                                 if (!AcoDigit)
179                                 {
180                                         AliError("The unchecked digit doesn't exist");
181                                         break;
182                                 }
183                                 GetDigitsData(0)->Fill(AcoDigit->GetModule()-1);
184                         }
185                 }
186
187
188         }
189
190 }