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. 
//  Alla.Maevskaya@cern.ch
//  
//---

// --- ROOT system ---
#include <TClonesArray.h>
#include <TFile.h> 
#include <TH1F.h> 
#include <TH2F.h> 
#include <TDirectory.h>
// --- Standard library ---

// --- AliRoot header files ---
#include "AliESDEvent.h"
#include "AliLog.h"
#include "AliT0digit.h" 
#include "AliT0hit.h"
#include "AliT0RecPoint.h"
#include "AliT0QADataMakerSim.h"
#include "AliQAChecker.h"
#include "AliT0RawReader.h"

#include <Riostream.h>

ClassImp(AliT0QADataMakerSim)
           
//____________________________________________________________________________ 
  AliT0QADataMakerSim::AliT0QADataMakerSim() : 
  AliQADataMakerSim(AliQAv1::GetDetName(AliQAv1::kT0), "T0 Quality Assurance Data Maker")

{
  // ctor
 //   fDetectorDir = fOutput->GetDirectory(GetName()) ;  
//   if (!fDetectorDir) 
//     fDetectorDir = fOutput->mkdir(GetName()) ;  
}

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

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

//____________________________________________________________________________
void AliT0QADataMakerSim::StartOfDetectorCycle()
{
  //Detector specific actions at start of cycle

}
 
//____________________________________________________________________________ 
void AliT0QADataMakerSim::InitHits()
{
  // create Hits histograms in Hits subdir
  // create Hits histograms in Hits subdir
  const Bool_t expert   = kTRUE ; 
  const Bool_t image    = kTRUE ; 

  TString timename;
  
  TH2F *fhHitsTimeA = new TH2F("hHitsTimeA", "Hits Efficiency;#PMT; Time [ns];", 13, 12, 25, 100,12,15 );
  fhHitsTimeA->SetOption("COLZ");
  Add2HitsList(fhHitsTimeA,0, !expert, image);
  TH2F *fhHitsTimeC = new TH2F("hHitsTimeC", "Hits Efficiency;#PMT; Time [ns];", 13, 0, 13, 100,2,5 );
  fhHitsTimeC->SetOption("COLZ");
  Add2HitsList(fhHitsTimeC,1, !expert, image);
  //
  ClonePerTrigClass(AliQAv1::kHITS); // this should be the last line
}

//____________________________________________________________________________ 
void AliT0QADataMakerSim::InitDigits()
{
  // create Digits histograms in Digits subdir
  const Bool_t expert   = kTRUE ; 
  const Bool_t image    = kTRUE ; 
  
  TH2F * fhDigCFD = new TH2F("fhDigCFD", " CFD digits; #PMT; CFD time [#channel]",25,-0.5,24.5,100,0,1000);
  fhDigCFD->SetOption("COLZ");
  Add2DigitsList( fhDigCFD,0);
  TH2F *fhDigLEDamp = new TH2F("fhDigLEDamp", " LED-CFD digits; #PMT; amplitude  LED-CFD [#channel]",25,-0.5,24.5,100,100,1000);
  fhDigLEDamp->SetOption("COLZ");
  Add2DigitsList( fhDigLEDamp,1, !expert, image);
  TH2F * fhDigQTC = new TH2F("fhDigQTC", " QTC digits; #PMT; amplitude QTC [#channel]",25,-0.5,24.5,200,500,10000);
  fhDigQTC->SetOption("COLZ");
  Add2DigitsList( fhDigQTC,2, !expert, image);
  //
  ClonePerTrigClass(AliQAv1::kDIGITS); // this should be the last line 
}

//____________________________________________________________________________

void AliT0QADataMakerSim::MakeHits(TTree *hitTree)
{
  //fills QA histos for Hits
  if (fHitsArray) 
    fHitsArray->Clear() ; 
  else 
    fHitsArray = new TClonesArray("AliT0hit", 1000);
  
  TBranch * branch = hitTree->GetBranch("T0") ;
  if ( ! branch ) {
    AliWarning("T0 branch in Hit Tree not found") ;
  } else {

   if (branch) {
      branch->SetAddress(&fHitsArray);
    }else{
      AliError("Branch T0 hit not found");
      exit(111);
    } 
    Int_t ntracks    = (Int_t) hitTree->GetEntries();
    
    if (ntracks<=0) return;
    // Start loop on tracks in the hits containers

    for (Int_t track=0; track<ntracks;track++) {
      branch->GetEntry(track);
      Int_t nhits = fHitsArray->GetEntriesFast();
      for (Int_t ihit=0;ihit<nhits;ihit++) 
	{
	  AliT0hit  * startHit   = (AliT0hit*) fHitsArray->UncheckedAt(ihit);
	  if (!startHit) {
 	    AliError("The unchecked hit doesn't exist");
	    continue;
	  }
	  Int_t pmt=startHit->Pmt();
	  Float_t time = 0.001 * startHit->Time();
	  if(pmt<13) FillHitsData(1,pmt,time) ;
	  if(pmt>12) FillHitsData(0,pmt,time) ;
	}
    }
  }
  //
  IncEvCountCycleHits();
  IncEvCountTotalHits();
  //
}

//____________________________________________________________________________
void AliT0QADataMakerSim::MakeDigits( TTree *digitsTree)
{
  //fills QA histos for Digits
 
  TArrayI *digCFD = new TArrayI(24);
  TArrayI *digLED = new TArrayI(24);
  TArrayI *digQT0 = new TArrayI(24);
  TArrayI *digQT1 = new TArrayI(24);
  Int_t refpoint=0;

  TBranch *brDigits=digitsTree->GetBranch("T0");
  AliT0digit *fDigits = new AliT0digit() ;
  if (brDigits) {
    brDigits->SetAddress(&fDigits);
  }else{
    AliError(Form("EXEC Branch T0 digits not found"));
     return;
  }

  digitsTree->GetEvent(0);
  digitsTree->GetEntry(0);
  brDigits->GetEntry(0);
  fDigits->GetTimeCFD(*digCFD);
  fDigits->GetTimeLED(*digLED);
  fDigits->GetQT0(*digQT0);
  fDigits->GetQT1(*digQT1);
  refpoint = fDigits->RefPoint();

   for (Int_t i=0; i<24; i++)
    {
      if (digCFD->At(i)>0) {
	Int_t cfd=digCFD->At(i)- refpoint;
	FillDigitsData(0, i,cfd);
	FillDigitsData(1, i,(digLED->At(i) - digCFD->At(i)));
	FillDigitsData(2, i, (digQT1->At(i) - digQT0->At(i)));

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