ROOT logo
/**************************************************************************
 * Copyright(c) 2004, 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.                  *
 **************************************************************************/
// --- ROOT system ---
#include <iostream>
#include <TClonesArray.h>
#include <TFile.h> 
#include <TH1F.h> 
#include <TH1I.h> 

// --- AliRoot header files ---
#include "AliESDEvent.h"
#include "AliLog.h"
#include "AliFMDQADataMakerSim.h"
#include "AliFMDDigit.h"
#include "AliFMDHit.h"
#include "AliQAChecker.h"
#include "AliFMDParameters.h"
#include "AliFMDSDigit.h"

//_____________________________________________________________________
// This is the class that collects the QA data for the FMD during simulation.
// The following data types are picked up:
// - hits
// - digits
// The following data types are not supported (yet):
// - raws
// - sdigits
// Author : Hans Hjersing Dalsgaard, Niels Bohr Institute, hans.dalsgaard@cern.ch
//_____________________________________________________________________

ClassImp(AliFMDQADataMakerSim)
#if 0
; // This line is for Emacs - do not delete!
#endif
//_____________________________________________________________________
AliFMDQADataMakerSim::AliFMDQADataMakerSim() 
  :  AliQADataMakerSim(AliQAv1::GetDetName(AliQAv1::kFMD),
		       "FMD Quality Assurance Data Maker")
{
  // ctor

}

//_____________________________________________________________________
AliFMDQADataMakerSim::AliFMDQADataMakerSim(const AliFMDQADataMakerSim& /*qadm*/) 
  : AliQADataMakerSim()
{
  // copy ctor 
  // 
  // Parameters: 
  //    qadm    Object to copy from
  
}
//_____________________________________________________________________
AliFMDQADataMakerSim& 
AliFMDQADataMakerSim::operator = (const AliFMDQADataMakerSim& ) 
{
  
  return *this;
}
//_____________________________________________________________________
AliFMDQADataMakerSim::~AliFMDQADataMakerSim()
{

}

//_____________________________________________________________________
void AliFMDQADataMakerSim::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, 
					      TObjArray ** list)
{
  //Detector specific actions at end of cycle
  // do the QA checking
  ResetEventTrigClasses(); // reset triggers list to select all histos
  AliLog::Message(5,"FMD: end of detector cycle",
		  "AliFMDQADataMakerSim","AliFMDQADataMakerSim",
		  "AliFMDQADataMakerSim::EndOfDetectorCycle",
		  "AliFMDQADataMakerSim.cxx",83);
  AliQAChecker::Instance()->Run(AliQAv1::kFMD, task, list) ;  
  
}
//_____________________________________________________________________
void AliFMDQADataMakerSim::InitSDigits()
{
  // create SDigits histograms in SDigits subdir
  const Bool_t expert   = kTRUE ; 
  const Bool_t image    = kTRUE ; 
  
  TH1I* hADCCounts = new TH1I("hADCCounts",
			      "Dist of ADC counts;ADC counts;Entries",
			      1024,0,1024);
  hADCCounts->SetXTitle("ADC counts");
  Add2SDigitsList(hADCCounts, 0, !expert, image);
  //
  ClonePerTrigClass(AliQAv1::kSDIGITS); // this should be the last line
}

//____________________________________________________________________ 
void AliFMDQADataMakerSim::InitHits()
{
  // create Digits histograms in Digits subdir
  const Bool_t expert   = kTRUE ; 
  const Bool_t image    = kTRUE ; 
  
  TH1F* hEnergyOfHits = new TH1F("hEnergyOfHits",
				 "Energy distribution;Energy [MeV];Counts",
				 100,0,3);
  hEnergyOfHits->SetXTitle("Edep");
  hEnergyOfHits->SetYTitle("Counts");
  Add2HitsList(hEnergyOfHits, 0, !expert, image);
  //
  ClonePerTrigClass(AliQAv1::kHITS); // this should be the last line
}

//_____________________________________________________________________
void AliFMDQADataMakerSim::InitDigits()
{
  // create Digits histograms in Digits subdir
  const Bool_t expert   = kTRUE ; 
  const Bool_t image    = kTRUE ; 
  
  TH1I* hADCCounts = new TH1I("hADCCounts",
			      "Dist of ADC counts; ADC counts;Entries",
			      1024,0,1024);
  hADCCounts->SetXTitle("ADC counts");
  Add2DigitsList(hADCCounts, 0, !expert, image);
  //
  ClonePerTrigClass(AliQAv1::kDIGITS); // this should be the last line
}

//_____________________________________________________________________
void AliFMDQADataMakerSim::MakeHits()
{
  // Check id histograms already created for this Event Specie
  if ( ! GetHitsData(0) )
    InitHits() ;

  TIter next(fHitsArray);
  AliFMDHit * hit;
  while ((hit = static_cast<AliFMDHit *>(next()))) FillHitsData(0,hit->Edep()/hit->Length()*0.032);
  //
}

//_____________________________________________________________________
void AliFMDQADataMakerSim::MakeHits(TTree * hitTree)
{
  // make QA data from Hit Tree
  // 
  // Parameters: 
  //   hitTree    Hits container 
  //
  if (!fHitsArray) 
    fHitsArray = new TClonesArray("AliFMDHit", 1000) ; 
  fHitsArray->Clear() ; 
  
  TBranch * branch = hitTree->GetBranch("FMD") ;
  if (!branch) {
    AliWarning("FMD branch in Hit Tree not found") ; 
    return;
  }
    
  branch->SetAddress(&fHitsArray) ;
  //  
  for (Int_t ientry = 0 ; ientry < branch->GetEntries() ; ientry++) {
    branch->GetEntry(ientry);
    MakeHits();   //tmp); 
    fHitsArray->Clear() ; 
  } 
  //
  IncEvCountCycleHits();
  IncEvCountTotalHits();
  //	
}

//_____________________________________________________________________
void AliFMDQADataMakerSim::MakeDigits()
{
  // makes data from Digits
  // 
  // Parameters: 
  //    none
  if(!fDigitsArray) return;
  
  for(Int_t i = 0 ; i < fDigitsArray->GetEntriesFast() ; i++) {
    //Raw ADC counts
    AliFMDDigit* digit = static_cast<AliFMDDigit*>(fDigitsArray->At(i));
    FillDigitsData(0,digit->Counts());
  }
  //
}

//_____________________________________________________________________
void AliFMDQADataMakerSim::MakeDigits(TTree * digitTree)
{
  // Make data from digits. 
  // 
  // Parameters: 
  //    digitTree    Tree holding digits. 
  // RS: counters are incremented in MakeDigits()
  
  if (!fDigitsArray) 
    fDigitsArray = new TClonesArray("AliFMDDigit", 1000) ; 
  fDigitsArray->Clear();
  
  TBranch * branch = digitTree->GetBranch("FMD") ;
  if (!branch)    {
      AliWarning("FMD branch in Digit Tree not found") ; 
      return;
  } 
  branch->SetAddress(&fDigitsArray) ;

  if (fDigitsArray) fDigitsArray->Clear();

  branch->GetEntry(0) ; 
  MakeDigits() ; 
  //
  IncEvCountCycleDigits();
  IncEvCountTotalDigits();
  //
}

//_____________________________________________________________________
void AliFMDQADataMakerSim::MakeSDigits()
{
  // makes data from Digits
  // 
  // Parameters: 
  //   none 
  if(!fSDigitsArray) return;
  
  for(Int_t i = 0 ; i < fSDigitsArray->GetEntriesFast() ; i++) {
    //Raw ADC counts
    AliFMDSDigit* sdigit = static_cast<AliFMDSDigit*>(fSDigitsArray->At(i));
    FillSDigitsData(0,sdigit->Counts());
  }
  //
}

//_____________________________________________________________________
void AliFMDQADataMakerSim::MakeSDigits(TTree * sdigitTree)
{
  // Make data from digits. 
  // 
  // Parameters: 
  //    digitTree    Tree holding digits. 
  //
  if (!fSDigitsArray) 
    fSDigitsArray = new TClonesArray("AliFMDSDigit", 1000) ; 
  fSDigitsArray->Clear() ;

  TBranch * branch = sdigitTree->GetBranch("FMD") ;
  if (!branch)    {
    AliWarning("FMD branch in SDigit Tree not found") ; 
    return;
  } 
  branch->SetAddress(&fSDigitsArray) ;
  branch->GetEntry(0) ; 
  MakeSDigits() ; 
  //
  IncEvCountCycleSDigits();
  IncEvCountTotalSDigits();
  //
}

//_____________________________________________________________________ 
void AliFMDQADataMakerSim::StartOfDetectorCycle()
{
  // Does 
  // not 
  // do 
  // anything 
}
//_____________________________________________________________________ 
//
// EOF
//
 AliFMDQADataMakerSim.cxx:1
 AliFMDQADataMakerSim.cxx:2
 AliFMDQADataMakerSim.cxx:3
 AliFMDQADataMakerSim.cxx:4
 AliFMDQADataMakerSim.cxx:5
 AliFMDQADataMakerSim.cxx:6
 AliFMDQADataMakerSim.cxx:7
 AliFMDQADataMakerSim.cxx:8
 AliFMDQADataMakerSim.cxx:9
 AliFMDQADataMakerSim.cxx:10
 AliFMDQADataMakerSim.cxx:11
 AliFMDQADataMakerSim.cxx:12
 AliFMDQADataMakerSim.cxx:13
 AliFMDQADataMakerSim.cxx:14
 AliFMDQADataMakerSim.cxx:15
 AliFMDQADataMakerSim.cxx:16
 AliFMDQADataMakerSim.cxx:17
 AliFMDQADataMakerSim.cxx:18
 AliFMDQADataMakerSim.cxx:19
 AliFMDQADataMakerSim.cxx:20
 AliFMDQADataMakerSim.cxx:21
 AliFMDQADataMakerSim.cxx:22
 AliFMDQADataMakerSim.cxx:23
 AliFMDQADataMakerSim.cxx:24
 AliFMDQADataMakerSim.cxx:25
 AliFMDQADataMakerSim.cxx:26
 AliFMDQADataMakerSim.cxx:27
 AliFMDQADataMakerSim.cxx:28
 AliFMDQADataMakerSim.cxx:29
 AliFMDQADataMakerSim.cxx:30
 AliFMDQADataMakerSim.cxx:31
 AliFMDQADataMakerSim.cxx:32
 AliFMDQADataMakerSim.cxx:33
 AliFMDQADataMakerSim.cxx:34
 AliFMDQADataMakerSim.cxx:35
 AliFMDQADataMakerSim.cxx:36
 AliFMDQADataMakerSim.cxx:37
 AliFMDQADataMakerSim.cxx:38
 AliFMDQADataMakerSim.cxx:39
 AliFMDQADataMakerSim.cxx:40
 AliFMDQADataMakerSim.cxx:41
 AliFMDQADataMakerSim.cxx:42
 AliFMDQADataMakerSim.cxx:43
 AliFMDQADataMakerSim.cxx:44
 AliFMDQADataMakerSim.cxx:45
 AliFMDQADataMakerSim.cxx:46
 AliFMDQADataMakerSim.cxx:47
 AliFMDQADataMakerSim.cxx:48
 AliFMDQADataMakerSim.cxx:49
 AliFMDQADataMakerSim.cxx:50
 AliFMDQADataMakerSim.cxx:51
 AliFMDQADataMakerSim.cxx:52
 AliFMDQADataMakerSim.cxx:53
 AliFMDQADataMakerSim.cxx:54
 AliFMDQADataMakerSim.cxx:55
 AliFMDQADataMakerSim.cxx:56
 AliFMDQADataMakerSim.cxx:57
 AliFMDQADataMakerSim.cxx:58
 AliFMDQADataMakerSim.cxx:59
 AliFMDQADataMakerSim.cxx:60
 AliFMDQADataMakerSim.cxx:61
 AliFMDQADataMakerSim.cxx:62
 AliFMDQADataMakerSim.cxx:63
 AliFMDQADataMakerSim.cxx:64
 AliFMDQADataMakerSim.cxx:65
 AliFMDQADataMakerSim.cxx:66
 AliFMDQADataMakerSim.cxx:67
 AliFMDQADataMakerSim.cxx:68
 AliFMDQADataMakerSim.cxx:69
 AliFMDQADataMakerSim.cxx:70
 AliFMDQADataMakerSim.cxx:71
 AliFMDQADataMakerSim.cxx:72
 AliFMDQADataMakerSim.cxx:73
 AliFMDQADataMakerSim.cxx:74
 AliFMDQADataMakerSim.cxx:75
 AliFMDQADataMakerSim.cxx:76
 AliFMDQADataMakerSim.cxx:77
 AliFMDQADataMakerSim.cxx:78
 AliFMDQADataMakerSim.cxx:79
 AliFMDQADataMakerSim.cxx:80
 AliFMDQADataMakerSim.cxx:81
 AliFMDQADataMakerSim.cxx:82
 AliFMDQADataMakerSim.cxx:83
 AliFMDQADataMakerSim.cxx:84
 AliFMDQADataMakerSim.cxx:85
 AliFMDQADataMakerSim.cxx:86
 AliFMDQADataMakerSim.cxx:87
 AliFMDQADataMakerSim.cxx:88
 AliFMDQADataMakerSim.cxx:89
 AliFMDQADataMakerSim.cxx:90
 AliFMDQADataMakerSim.cxx:91
 AliFMDQADataMakerSim.cxx:92
 AliFMDQADataMakerSim.cxx:93
 AliFMDQADataMakerSim.cxx:94
 AliFMDQADataMakerSim.cxx:95
 AliFMDQADataMakerSim.cxx:96
 AliFMDQADataMakerSim.cxx:97
 AliFMDQADataMakerSim.cxx:98
 AliFMDQADataMakerSim.cxx:99
 AliFMDQADataMakerSim.cxx:100
 AliFMDQADataMakerSim.cxx:101
 AliFMDQADataMakerSim.cxx:102
 AliFMDQADataMakerSim.cxx:103
 AliFMDQADataMakerSim.cxx:104
 AliFMDQADataMakerSim.cxx:105
 AliFMDQADataMakerSim.cxx:106
 AliFMDQADataMakerSim.cxx:107
 AliFMDQADataMakerSim.cxx:108
 AliFMDQADataMakerSim.cxx:109
 AliFMDQADataMakerSim.cxx:110
 AliFMDQADataMakerSim.cxx:111
 AliFMDQADataMakerSim.cxx:112
 AliFMDQADataMakerSim.cxx:113
 AliFMDQADataMakerSim.cxx:114
 AliFMDQADataMakerSim.cxx:115
 AliFMDQADataMakerSim.cxx:116
 AliFMDQADataMakerSim.cxx:117
 AliFMDQADataMakerSim.cxx:118
 AliFMDQADataMakerSim.cxx:119
 AliFMDQADataMakerSim.cxx:120
 AliFMDQADataMakerSim.cxx:121
 AliFMDQADataMakerSim.cxx:122
 AliFMDQADataMakerSim.cxx:123
 AliFMDQADataMakerSim.cxx:124
 AliFMDQADataMakerSim.cxx:125
 AliFMDQADataMakerSim.cxx:126
 AliFMDQADataMakerSim.cxx:127
 AliFMDQADataMakerSim.cxx:128
 AliFMDQADataMakerSim.cxx:129
 AliFMDQADataMakerSim.cxx:130
 AliFMDQADataMakerSim.cxx:131
 AliFMDQADataMakerSim.cxx:132
 AliFMDQADataMakerSim.cxx:133
 AliFMDQADataMakerSim.cxx:134
 AliFMDQADataMakerSim.cxx:135
 AliFMDQADataMakerSim.cxx:136
 AliFMDQADataMakerSim.cxx:137
 AliFMDQADataMakerSim.cxx:138
 AliFMDQADataMakerSim.cxx:139
 AliFMDQADataMakerSim.cxx:140
 AliFMDQADataMakerSim.cxx:141
 AliFMDQADataMakerSim.cxx:142
 AliFMDQADataMakerSim.cxx:143
 AliFMDQADataMakerSim.cxx:144
 AliFMDQADataMakerSim.cxx:145
 AliFMDQADataMakerSim.cxx:146
 AliFMDQADataMakerSim.cxx:147
 AliFMDQADataMakerSim.cxx:148
 AliFMDQADataMakerSim.cxx:149
 AliFMDQADataMakerSim.cxx:150
 AliFMDQADataMakerSim.cxx:151
 AliFMDQADataMakerSim.cxx:152
 AliFMDQADataMakerSim.cxx:153
 AliFMDQADataMakerSim.cxx:154
 AliFMDQADataMakerSim.cxx:155
 AliFMDQADataMakerSim.cxx:156
 AliFMDQADataMakerSim.cxx:157
 AliFMDQADataMakerSim.cxx:158
 AliFMDQADataMakerSim.cxx:159
 AliFMDQADataMakerSim.cxx:160
 AliFMDQADataMakerSim.cxx:161
 AliFMDQADataMakerSim.cxx:162
 AliFMDQADataMakerSim.cxx:163
 AliFMDQADataMakerSim.cxx:164
 AliFMDQADataMakerSim.cxx:165
 AliFMDQADataMakerSim.cxx:166
 AliFMDQADataMakerSim.cxx:167
 AliFMDQADataMakerSim.cxx:168
 AliFMDQADataMakerSim.cxx:169
 AliFMDQADataMakerSim.cxx:170
 AliFMDQADataMakerSim.cxx:171
 AliFMDQADataMakerSim.cxx:172
 AliFMDQADataMakerSim.cxx:173
 AliFMDQADataMakerSim.cxx:174
 AliFMDQADataMakerSim.cxx:175
 AliFMDQADataMakerSim.cxx:176
 AliFMDQADataMakerSim.cxx:177
 AliFMDQADataMakerSim.cxx:178
 AliFMDQADataMakerSim.cxx:179
 AliFMDQADataMakerSim.cxx:180
 AliFMDQADataMakerSim.cxx:181
 AliFMDQADataMakerSim.cxx:182
 AliFMDQADataMakerSim.cxx:183
 AliFMDQADataMakerSim.cxx:184
 AliFMDQADataMakerSim.cxx:185
 AliFMDQADataMakerSim.cxx:186
 AliFMDQADataMakerSim.cxx:187
 AliFMDQADataMakerSim.cxx:188
 AliFMDQADataMakerSim.cxx:189
 AliFMDQADataMakerSim.cxx:190
 AliFMDQADataMakerSim.cxx:191
 AliFMDQADataMakerSim.cxx:192
 AliFMDQADataMakerSim.cxx:193
 AliFMDQADataMakerSim.cxx:194
 AliFMDQADataMakerSim.cxx:195
 AliFMDQADataMakerSim.cxx:196
 AliFMDQADataMakerSim.cxx:197
 AliFMDQADataMakerSim.cxx:198
 AliFMDQADataMakerSim.cxx:199
 AliFMDQADataMakerSim.cxx:200
 AliFMDQADataMakerSim.cxx:201
 AliFMDQADataMakerSim.cxx:202
 AliFMDQADataMakerSim.cxx:203
 AliFMDQADataMakerSim.cxx:204
 AliFMDQADataMakerSim.cxx:205
 AliFMDQADataMakerSim.cxx:206
 AliFMDQADataMakerSim.cxx:207
 AliFMDQADataMakerSim.cxx:208
 AliFMDQADataMakerSim.cxx:209
 AliFMDQADataMakerSim.cxx:210
 AliFMDQADataMakerSim.cxx:211
 AliFMDQADataMakerSim.cxx:212
 AliFMDQADataMakerSim.cxx:213
 AliFMDQADataMakerSim.cxx:214
 AliFMDQADataMakerSim.cxx:215
 AliFMDQADataMakerSim.cxx:216
 AliFMDQADataMakerSim.cxx:217
 AliFMDQADataMakerSim.cxx:218
 AliFMDQADataMakerSim.cxx:219
 AliFMDQADataMakerSim.cxx:220
 AliFMDQADataMakerSim.cxx:221
 AliFMDQADataMakerSim.cxx:222
 AliFMDQADataMakerSim.cxx:223
 AliFMDQADataMakerSim.cxx:224
 AliFMDQADataMakerSim.cxx:225
 AliFMDQADataMakerSim.cxx:226
 AliFMDQADataMakerSim.cxx:227
 AliFMDQADataMakerSim.cxx:228
 AliFMDQADataMakerSim.cxx:229
 AliFMDQADataMakerSim.cxx:230
 AliFMDQADataMakerSim.cxx:231
 AliFMDQADataMakerSim.cxx:232
 AliFMDQADataMakerSim.cxx:233
 AliFMDQADataMakerSim.cxx:234
 AliFMDQADataMakerSim.cxx:235
 AliFMDQADataMakerSim.cxx:236
 AliFMDQADataMakerSim.cxx:237
 AliFMDQADataMakerSim.cxx:238
 AliFMDQADataMakerSim.cxx:239
 AliFMDQADataMakerSim.cxx:240
 AliFMDQADataMakerSim.cxx:241
 AliFMDQADataMakerSim.cxx:242
 AliFMDQADataMakerSim.cxx:243
 AliFMDQADataMakerSim.cxx:244
 AliFMDQADataMakerSim.cxx:245
 AliFMDQADataMakerSim.cxx:246
 AliFMDQADataMakerSim.cxx:247
 AliFMDQADataMakerSim.cxx:248
 AliFMDQADataMakerSim.cxx:249
 AliFMDQADataMakerSim.cxx:250
 AliFMDQADataMakerSim.cxx:251
 AliFMDQADataMakerSim.cxx:252
 AliFMDQADataMakerSim.cxx:253
 AliFMDQADataMakerSim.cxx:254
 AliFMDQADataMakerSim.cxx:255
 AliFMDQADataMakerSim.cxx:256
 AliFMDQADataMakerSim.cxx:257
 AliFMDQADataMakerSim.cxx:258
 AliFMDQADataMakerSim.cxx:259
 AliFMDQADataMakerSim.cxx:260
 AliFMDQADataMakerSim.cxx:261
 AliFMDQADataMakerSim.cxx:262
 AliFMDQADataMakerSim.cxx:263
 AliFMDQADataMakerSim.cxx:264
 AliFMDQADataMakerSim.cxx:265
 AliFMDQADataMakerSim.cxx:266
 AliFMDQADataMakerSim.cxx:267
 AliFMDQADataMakerSim.cxx:268
 AliFMDQADataMakerSim.cxx:269
 AliFMDQADataMakerSim.cxx:270
 AliFMDQADataMakerSim.cxx:271
 AliFMDQADataMakerSim.cxx:272
 AliFMDQADataMakerSim.cxx:273
 AliFMDQADataMakerSim.cxx:274
 AliFMDQADataMakerSim.cxx:275
 AliFMDQADataMakerSim.cxx:276
 AliFMDQADataMakerSim.cxx:277
 AliFMDQADataMakerSim.cxx:278
 AliFMDQADataMakerSim.cxx:279
 AliFMDQADataMakerSim.cxx:280
 AliFMDQADataMakerSim.cxx:281
 AliFMDQADataMakerSim.cxx:282
 AliFMDQADataMakerSim.cxx:283
 AliFMDQADataMakerSim.cxx:284
 AliFMDQADataMakerSim.cxx:285
 AliFMDQADataMakerSim.cxx:286
 AliFMDQADataMakerSim.cxx:287