ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/


/* $Id$ */

/*
  Produces the data needed to calculate the quality assurance. 
  All data must be mergeable objects.
  Y. Schutz CERN July 2007
*/

// --- ROOT system ---
#include <TClonesArray.h>
#include <TFile.h> 
#include <TH1F.h> 
#include <TH1I.h> 
#include <TH2F.h> 
#include <TTree.h>

// --- Standard library ---

// --- AliRoot header files ---
#include "AliESDCaloCluster.h"
#include "AliLog.h"
#include "AliPHOSDigit.h"
#include "AliPHOSHit.h"
#include "AliPHOSQADataMakerSim.h"
#include "AliQAChecker.h"

ClassImp(AliPHOSQADataMakerSim)
           
//____________________________________________________________________________ 
AliPHOSQADataMakerSim::AliPHOSQADataMakerSim() : 
  AliQADataMakerSim(AliQAv1::GetDetName(AliQAv1::kPHOS), "PHOS Quality Assurance Data Maker")
{
  // ctor
}

//____________________________________________________________________________ 
AliPHOSQADataMakerSim::AliPHOSQADataMakerSim(const AliPHOSQADataMakerSim& qadm) :
  AliQADataMakerSim()
{
  //copy ctor 
  SetName((const char*)qadm.GetName()) ; 
  SetTitle((const char*)qadm.GetTitle()); 
}

//__________________________________________________________________
AliPHOSQADataMakerSim& AliPHOSQADataMakerSim::operator = (const AliPHOSQADataMakerSim& qadm )
{
  // Assign operator.
  this->~AliPHOSQADataMakerSim();
  new(this) AliPHOSQADataMakerSim(qadm);
  return *this;
}
 
//____________________________________________________________________________ 
void AliPHOSQADataMakerSim::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list)
{
  //Detector specific actions at end of cycle
  // do the QA checking
  AliQAChecker::Instance()->Run(AliQAv1::kPHOS, task, list) ;  
}

//____________________________________________________________________________ 
void AliPHOSQADataMakerSim::InitHits()
{
  // create Hits histograms in Hits subdir
  const Bool_t expert   = kTRUE ; 
  const Bool_t image    = kTRUE ; 
  TH1F * h0 = new TH1F("hPhosHits",    "Hits energy distribution in PHOS;Energy [MeV];Counts",       100, 0., 100.) ; 
  h0->Sumw2() ;
  Add2HitsList(h0, kHits, !expert, image) ;
  TH1I * h1 = new TH1I("hPhosHitsMul", "Hits multiplicity distribution in PHOS;# of Hits;Entries", 500, 0., 10000) ; 
  h1->Sumw2() ;
  Add2HitsList(h1, kHitsMul, !expert, image) ;
  //
  ClonePerTrigClass(AliQAv1::kHITS); // this should be the last line  
}

//____________________________________________________________________________ 
void AliPHOSQADataMakerSim::InitDigits()
{
  // create Digits histograms in Digits subdir
  const Bool_t expert   = kTRUE ; 
  const Bool_t image    = kTRUE ; 
  TH1I * h0 = new TH1I("hPhosDigits",    "Digits amplitude distribution in PHOS;Amplitude [ADC counts];Counts",    500, 0, 1000) ; 
  h0->Sumw2() ;
  Add2DigitsList(h0, kDigits, !expert, image) ;
  TH1I * h1 = new TH1I("hPhosDigitsMul", "Digits multiplicity distribution in PHOS;# of Digits;Entries", 2000, 0, 10000) ; 
  h1->Sumw2() ;
  Add2DigitsList(h1, kDigitsMul, !expert, image) ;
  //
  ClonePerTrigClass(AliQAv1::kDIGITS); // this should be the last line
}

//____________________________________________________________________________ 
void AliPHOSQADataMakerSim::InitSDigits()
{
  // create SDigits histograms in SDigits subdir
  const Bool_t expert   = kTRUE ; 
  const Bool_t image    = kTRUE ; 
  TH1F * h0 = new TH1F("hPhosSDigits",    "SDigits energy distribution in PHOS; Energy [MeV];Counts",       500, 0., 1000.) ; 
  h0->Sumw2() ;
  Add2SDigitsList(h0, kSDigits, !expert, image) ;
  TH1I * h1 = new TH1I("hPhosSDigitsMul", "SDigits multiplicity distribution in PHOS;# of SDigits;Entries", 500, 0,  1000) ; 
  h1->Sumw2() ;
  Add2SDigitsList(h1, kSDigitsMul, !expert, image) ;
  //
  ClonePerTrigClass(AliQAv1::kSDIGITS); // this should be the last line
}

//____________________________________________________________________________
void AliPHOSQADataMakerSim::MakeHits()
{
  //make QA data from Hits
  
  TIter next(fHitsArray) ; 
  AliPHOSHit * hit ; 
  while ( (hit = dynamic_cast<AliPHOSHit *>(next())) ) {
    FillHitsData(kHits, hit->GetEnergy()) ;
  }
}

//____________________________________________________________________________
void AliPHOSQADataMakerSim::MakeHits(TTree * hitTree)
{
  // make QA data from Hit Tree
  
  if (fHitsArray)
    fHitsArray->Clear() ; 
  else
    fHitsArray = new TClonesArray("AliPHOSHit", 1000);

  TBranch * branch = hitTree->GetBranch("PHOS") ;
  if ( ! branch ) { AliWarning("PHOS branch in Hit Tree not found"); return;}
  //
  Int_t nHits = 0;
  branch->SetAddress(&fHitsArray) ;
  for (Int_t ientry = 0 ; ientry < branch->GetEntries() ; ientry++) {
    branch->GetEntry(ientry) ;
    nHits += fHitsArray->GetEntriesFast();
    MakeHits() ; 
    fHitsArray->Clear();
  } 	
  FillHitsData(1,nHits) ;
  //  
  IncEvCountCycleHits();
  IncEvCountTotalHits();
  //
}

//____________________________________________________________________________
void AliPHOSQADataMakerSim::MakeDigits()
{
  // makes data from Digits
 
  FillDigitsData(1,fDigitsArray->GetEntriesFast()) ; 
  TIter next(fDigitsArray) ; 
  AliPHOSDigit * digit ; 
  while ( (digit = dynamic_cast<AliPHOSDigit *>(next())) ) {
    FillDigitsData(kDigits, digit->GetEnergy()) ;
  }  
}

//____________________________________________________________________________
void AliPHOSQADataMakerSim::MakeDigits(TTree * digitTree)
{
  // makes data from Digit Tree
  if (fDigitsArray) 
    fDigitsArray->Clear() ; 
  else
    fDigitsArray = new TClonesArray("AliPHOSDigit", 1000) ; 
  
  TBranch * branch = digitTree->GetBranch("PHOS") ;
  if ( ! branch ) {AliWarning("PHOS branch in Digit Tree not found"); return;}
  branch->SetAddress(&fDigitsArray) ;
  branch->GetEntry(0) ; 
  MakeDigits() ; 
  //
  IncEvCountCycleDigits();
  IncEvCountTotalDigits();
  //
}

//____________________________________________________________________________
void AliPHOSQADataMakerSim::MakeSDigits()
{
  // makes data from SDigits

  FillSDigitsData(1,fSDigitsArray->GetEntriesFast()) ; 
  TIter next(fSDigitsArray) ; 
  AliPHOSDigit * sdigit ; 
  while ( (sdigit = dynamic_cast<AliPHOSDigit *>(next())) ) {
    FillSDigitsData(kSDigits, sdigit->GetEnergy()) ;
  } 
}

//____________________________________________________________________________
void AliPHOSQADataMakerSim::MakeSDigits(TTree * sdigitTree)
{
	// makes data from SDigit Tree
  if (fSDigitsArray) 
    fSDigitsArray->Clear() ; 
  else
    fSDigitsArray = new TClonesArray("AliPHOSDigit", 1000) ; 
  
  TBranch * branch = sdigitTree->GetBranch("PHOS") ;
  if ( ! branch ) {AliWarning("PHOS branch in SDigit Tree not found"); return;}
  branch->SetAddress(&fSDigitsArray) ;
  branch->GetEntry(0) ;
  MakeSDigits() ; 
  //
  IncEvCountCycleSDigits();
  IncEvCountTotalSDigits();
  //
}

//____________________________________________________________________________ 
void AliPHOSQADataMakerSim::StartOfDetectorCycle()
{
  //Detector specific actions at start of cycle
  
}
 AliPHOSQADataMakerSim.cxx:1
 AliPHOSQADataMakerSim.cxx:2
 AliPHOSQADataMakerSim.cxx:3
 AliPHOSQADataMakerSim.cxx:4
 AliPHOSQADataMakerSim.cxx:5
 AliPHOSQADataMakerSim.cxx:6
 AliPHOSQADataMakerSim.cxx:7
 AliPHOSQADataMakerSim.cxx:8
 AliPHOSQADataMakerSim.cxx:9
 AliPHOSQADataMakerSim.cxx:10
 AliPHOSQADataMakerSim.cxx:11
 AliPHOSQADataMakerSim.cxx:12
 AliPHOSQADataMakerSim.cxx:13
 AliPHOSQADataMakerSim.cxx:14
 AliPHOSQADataMakerSim.cxx:15
 AliPHOSQADataMakerSim.cxx:16
 AliPHOSQADataMakerSim.cxx:17
 AliPHOSQADataMakerSim.cxx:18
 AliPHOSQADataMakerSim.cxx:19
 AliPHOSQADataMakerSim.cxx:20
 AliPHOSQADataMakerSim.cxx:21
 AliPHOSQADataMakerSim.cxx:22
 AliPHOSQADataMakerSim.cxx:23
 AliPHOSQADataMakerSim.cxx:24
 AliPHOSQADataMakerSim.cxx:25
 AliPHOSQADataMakerSim.cxx:26
 AliPHOSQADataMakerSim.cxx:27
 AliPHOSQADataMakerSim.cxx:28
 AliPHOSQADataMakerSim.cxx:29
 AliPHOSQADataMakerSim.cxx:30
 AliPHOSQADataMakerSim.cxx:31
 AliPHOSQADataMakerSim.cxx:32
 AliPHOSQADataMakerSim.cxx:33
 AliPHOSQADataMakerSim.cxx:34
 AliPHOSQADataMakerSim.cxx:35
 AliPHOSQADataMakerSim.cxx:36
 AliPHOSQADataMakerSim.cxx:37
 AliPHOSQADataMakerSim.cxx:38
 AliPHOSQADataMakerSim.cxx:39
 AliPHOSQADataMakerSim.cxx:40
 AliPHOSQADataMakerSim.cxx:41
 AliPHOSQADataMakerSim.cxx:42
 AliPHOSQADataMakerSim.cxx:43
 AliPHOSQADataMakerSim.cxx:44
 AliPHOSQADataMakerSim.cxx:45
 AliPHOSQADataMakerSim.cxx:46
 AliPHOSQADataMakerSim.cxx:47
 AliPHOSQADataMakerSim.cxx:48
 AliPHOSQADataMakerSim.cxx:49
 AliPHOSQADataMakerSim.cxx:50
 AliPHOSQADataMakerSim.cxx:51
 AliPHOSQADataMakerSim.cxx:52
 AliPHOSQADataMakerSim.cxx:53
 AliPHOSQADataMakerSim.cxx:54
 AliPHOSQADataMakerSim.cxx:55
 AliPHOSQADataMakerSim.cxx:56
 AliPHOSQADataMakerSim.cxx:57
 AliPHOSQADataMakerSim.cxx:58
 AliPHOSQADataMakerSim.cxx:59
 AliPHOSQADataMakerSim.cxx:60
 AliPHOSQADataMakerSim.cxx:61
 AliPHOSQADataMakerSim.cxx:62
 AliPHOSQADataMakerSim.cxx:63
 AliPHOSQADataMakerSim.cxx:64
 AliPHOSQADataMakerSim.cxx:65
 AliPHOSQADataMakerSim.cxx:66
 AliPHOSQADataMakerSim.cxx:67
 AliPHOSQADataMakerSim.cxx:68
 AliPHOSQADataMakerSim.cxx:69
 AliPHOSQADataMakerSim.cxx:70
 AliPHOSQADataMakerSim.cxx:71
 AliPHOSQADataMakerSim.cxx:72
 AliPHOSQADataMakerSim.cxx:73
 AliPHOSQADataMakerSim.cxx:74
 AliPHOSQADataMakerSim.cxx:75
 AliPHOSQADataMakerSim.cxx:76
 AliPHOSQADataMakerSim.cxx:77
 AliPHOSQADataMakerSim.cxx:78
 AliPHOSQADataMakerSim.cxx:79
 AliPHOSQADataMakerSim.cxx:80
 AliPHOSQADataMakerSim.cxx:81
 AliPHOSQADataMakerSim.cxx:82
 AliPHOSQADataMakerSim.cxx:83
 AliPHOSQADataMakerSim.cxx:84
 AliPHOSQADataMakerSim.cxx:85
 AliPHOSQADataMakerSim.cxx:86
 AliPHOSQADataMakerSim.cxx:87
 AliPHOSQADataMakerSim.cxx:88
 AliPHOSQADataMakerSim.cxx:89
 AliPHOSQADataMakerSim.cxx:90
 AliPHOSQADataMakerSim.cxx:91
 AliPHOSQADataMakerSim.cxx:92
 AliPHOSQADataMakerSim.cxx:93
 AliPHOSQADataMakerSim.cxx:94
 AliPHOSQADataMakerSim.cxx:95
 AliPHOSQADataMakerSim.cxx:96
 AliPHOSQADataMakerSim.cxx:97
 AliPHOSQADataMakerSim.cxx:98
 AliPHOSQADataMakerSim.cxx:99
 AliPHOSQADataMakerSim.cxx:100
 AliPHOSQADataMakerSim.cxx:101
 AliPHOSQADataMakerSim.cxx:102
 AliPHOSQADataMakerSim.cxx:103
 AliPHOSQADataMakerSim.cxx:104
 AliPHOSQADataMakerSim.cxx:105
 AliPHOSQADataMakerSim.cxx:106
 AliPHOSQADataMakerSim.cxx:107
 AliPHOSQADataMakerSim.cxx:108
 AliPHOSQADataMakerSim.cxx:109
 AliPHOSQADataMakerSim.cxx:110
 AliPHOSQADataMakerSim.cxx:111
 AliPHOSQADataMakerSim.cxx:112
 AliPHOSQADataMakerSim.cxx:113
 AliPHOSQADataMakerSim.cxx:114
 AliPHOSQADataMakerSim.cxx:115
 AliPHOSQADataMakerSim.cxx:116
 AliPHOSQADataMakerSim.cxx:117
 AliPHOSQADataMakerSim.cxx:118
 AliPHOSQADataMakerSim.cxx:119
 AliPHOSQADataMakerSim.cxx:120
 AliPHOSQADataMakerSim.cxx:121
 AliPHOSQADataMakerSim.cxx:122
 AliPHOSQADataMakerSim.cxx:123
 AliPHOSQADataMakerSim.cxx:124
 AliPHOSQADataMakerSim.cxx:125
 AliPHOSQADataMakerSim.cxx:126
 AliPHOSQADataMakerSim.cxx:127
 AliPHOSQADataMakerSim.cxx:128
 AliPHOSQADataMakerSim.cxx:129
 AliPHOSQADataMakerSim.cxx:130
 AliPHOSQADataMakerSim.cxx:131
 AliPHOSQADataMakerSim.cxx:132
 AliPHOSQADataMakerSim.cxx:133
 AliPHOSQADataMakerSim.cxx:134
 AliPHOSQADataMakerSim.cxx:135
 AliPHOSQADataMakerSim.cxx:136
 AliPHOSQADataMakerSim.cxx:137
 AliPHOSQADataMakerSim.cxx:138
 AliPHOSQADataMakerSim.cxx:139
 AliPHOSQADataMakerSim.cxx:140
 AliPHOSQADataMakerSim.cxx:141
 AliPHOSQADataMakerSim.cxx:142
 AliPHOSQADataMakerSim.cxx:143
 AliPHOSQADataMakerSim.cxx:144
 AliPHOSQADataMakerSim.cxx:145
 AliPHOSQADataMakerSim.cxx:146
 AliPHOSQADataMakerSim.cxx:147
 AliPHOSQADataMakerSim.cxx:148
 AliPHOSQADataMakerSim.cxx:149
 AliPHOSQADataMakerSim.cxx:150
 AliPHOSQADataMakerSim.cxx:151
 AliPHOSQADataMakerSim.cxx:152
 AliPHOSQADataMakerSim.cxx:153
 AliPHOSQADataMakerSim.cxx:154
 AliPHOSQADataMakerSim.cxx:155
 AliPHOSQADataMakerSim.cxx:156
 AliPHOSQADataMakerSim.cxx:157
 AliPHOSQADataMakerSim.cxx:158
 AliPHOSQADataMakerSim.cxx:159
 AliPHOSQADataMakerSim.cxx:160
 AliPHOSQADataMakerSim.cxx:161
 AliPHOSQADataMakerSim.cxx:162
 AliPHOSQADataMakerSim.cxx:163
 AliPHOSQADataMakerSim.cxx:164
 AliPHOSQADataMakerSim.cxx:165
 AliPHOSQADataMakerSim.cxx:166
 AliPHOSQADataMakerSim.cxx:167
 AliPHOSQADataMakerSim.cxx:168
 AliPHOSQADataMakerSim.cxx:169
 AliPHOSQADataMakerSim.cxx:170
 AliPHOSQADataMakerSim.cxx:171
 AliPHOSQADataMakerSim.cxx:172
 AliPHOSQADataMakerSim.cxx:173
 AliPHOSQADataMakerSim.cxx:174
 AliPHOSQADataMakerSim.cxx:175
 AliPHOSQADataMakerSim.cxx:176
 AliPHOSQADataMakerSim.cxx:177
 AliPHOSQADataMakerSim.cxx:178
 AliPHOSQADataMakerSim.cxx:179
 AliPHOSQADataMakerSim.cxx:180
 AliPHOSQADataMakerSim.cxx:181
 AliPHOSQADataMakerSim.cxx:182
 AliPHOSQADataMakerSim.cxx:183
 AliPHOSQADataMakerSim.cxx:184
 AliPHOSQADataMakerSim.cxx:185
 AliPHOSQADataMakerSim.cxx:186
 AliPHOSQADataMakerSim.cxx:187
 AliPHOSQADataMakerSim.cxx:188
 AliPHOSQADataMakerSim.cxx:189
 AliPHOSQADataMakerSim.cxx:190
 AliPHOSQADataMakerSim.cxx:191
 AliPHOSQADataMakerSim.cxx:192
 AliPHOSQADataMakerSim.cxx:193
 AliPHOSQADataMakerSim.cxx:194
 AliPHOSQADataMakerSim.cxx:195
 AliPHOSQADataMakerSim.cxx:196
 AliPHOSQADataMakerSim.cxx:197
 AliPHOSQADataMakerSim.cxx:198
 AliPHOSQADataMakerSim.cxx:199
 AliPHOSQADataMakerSim.cxx:200
 AliPHOSQADataMakerSim.cxx:201
 AliPHOSQADataMakerSim.cxx:202
 AliPHOSQADataMakerSim.cxx:203
 AliPHOSQADataMakerSim.cxx:204
 AliPHOSQADataMakerSim.cxx:205
 AliPHOSQADataMakerSim.cxx:206
 AliPHOSQADataMakerSim.cxx:207
 AliPHOSQADataMakerSim.cxx:208
 AliPHOSQADataMakerSim.cxx:209
 AliPHOSQADataMakerSim.cxx:210
 AliPHOSQADataMakerSim.cxx:211
 AliPHOSQADataMakerSim.cxx:212
 AliPHOSQADataMakerSim.cxx:213
 AliPHOSQADataMakerSim.cxx:214
 AliPHOSQADataMakerSim.cxx:215
 AliPHOSQADataMakerSim.cxx:216
 AliPHOSQADataMakerSim.cxx:217
 AliPHOSQADataMakerSim.cxx:218
 AliPHOSQADataMakerSim.cxx:219
 AliPHOSQADataMakerSim.cxx:220
 AliPHOSQADataMakerSim.cxx:221
 AliPHOSQADataMakerSim.cxx:222
 AliPHOSQADataMakerSim.cxx:223
 AliPHOSQADataMakerSim.cxx:224
 AliPHOSQADataMakerSim.cxx:225
 AliPHOSQADataMakerSim.cxx:226
 AliPHOSQADataMakerSim.cxx:227
 AliPHOSQADataMakerSim.cxx:228
 AliPHOSQADataMakerSim.cxx:229
 AliPHOSQADataMakerSim.cxx:230
 AliPHOSQADataMakerSim.cxx:231
 AliPHOSQADataMakerSim.cxx:232
 AliPHOSQADataMakerSim.cxx:233
 AliPHOSQADataMakerSim.cxx:234
 AliPHOSQADataMakerSim.cxx:235
 AliPHOSQADataMakerSim.cxx:236
 AliPHOSQADataMakerSim.cxx:237