ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2007, 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: $ */

/*
  Based on AliPHOSQADataMaker
  Produces the data needed to calculate the quality assurance. 
  All data must be mergeable objects.
  P. Christiansen, Lund, January 2008
*/

/*
  Implementation:

  We have chosen to have the histograms as non-persistent meber to
  allow better debugging. In the copy constructor we then have to
  assign the pointers to the existing histograms in the copied
  list. This have been implemented but not tested.
*/

#include "AliTPCQADataMakerSim.h"

// --- ROOT system ---

// --- Standard library ---

// --- AliRoot header files ---
#include "AliQAChecker.h"
#include "AliTPC.h"
#include "AliTPCv2.h"
#include "AliSimDigits.h"
#include <TTree.h>

ClassImp(AliTPCQADataMakerSim)

//____________________________________________________________________________ 
AliTPCQADataMakerSim::AliTPCQADataMakerSim() : 
  AliQADataMakerSim(AliQAv1::GetDetName(AliQAv1::kTPC), 
		    "TPC Sim Quality Assurance Data Maker")
{
  // ctor
}

//____________________________________________________________________________ 
AliTPCQADataMakerSim::AliTPCQADataMakerSim(const AliTPCQADataMakerSim& qadm) :
  AliQADataMakerSim()
{
  //copy ctor 
  SetName((const char*)qadm.GetName()) ; 
  SetTitle((const char*)qadm.GetTitle()); 
  
  //
  // Associate class histogram objects to the copies in the list
  // Could also be done with the indexes
  //
 }

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

//____________________________________________________________________________ 
void AliTPCQADataMakerSim::InitDigits()
{
  const Bool_t expert   = kTRUE ; 
  const Bool_t image    = kTRUE ; 
  TH1F * histDigitsADC = 
    new TH1F("hDigitsADC", "Digit ADC distribution; ADC; Counts",
	     1000, 0, 1000);
  histDigitsADC->Sumw2();
  Add2DigitsList(histDigitsADC, kDigitsADC, !expert, image);
  //
  ClonePerTrigClass(AliQAv1::kDIGITS); // this should be the last line
}

//____________________________________________________________________________ 
void AliTPCQADataMakerSim::InitHits()
{
  const Bool_t expert   = kTRUE ; 
  const Bool_t image    = kTRUE ; 
  TH1F * histHitsNhits = 
    new TH1F("hHitsNhits", "Interactions per track in the TPC volume; Number of interactions; Counts",
	     100, 0, 10000);
  histHitsNhits->Sumw2();
  Add2HitsList(histHitsNhits, kNhits, !expert, image);

  TH1F * histHitsElectrons = 
    new TH1F("hHitsElectrons", "Electrons per interaction; Electrons; Counts",
	     300, 0, 300);
  histHitsElectrons->Sumw2();
  Add2HitsList(histHitsElectrons, kElectrons, !expert, image);  

  TH1F * histHitsRadius = 
    new TH1F("hHitsRadius", "Position of interaction; Radius; Counts",
	     300, 0., 300.);  
  histHitsRadius->Sumw2();
  Add2HitsList(histHitsRadius, kRadius, !expert, image);  

  TH1F * histHitsPrimPerCm = 
    new TH1F("hHitsPrimPerCm", "Primaries per cm; Primaries; Counts",
	     100, 0., 100.);  
  histHitsPrimPerCm->Sumw2();
  Add2HitsList(histHitsPrimPerCm, kPrimPerCm, !expert, image);  

  TH1F * histHitsElectronsPerCm = 
    new TH1F("hHitsElectronsPerCm", "Electrons per cm; Electrons; Counts",
	     300, 0., 300.);  
  histHitsElectronsPerCm->Sumw2();
  Add2HitsList(histHitsElectronsPerCm, kElectronsPerCm, !expert, image);  
  //
  ClonePerTrigClass(AliQAv1::kHITS); // this should be the last line
}

//____________________________________________________________________________
void AliTPCQADataMakerSim::MakeDigits(TTree* digitTree)
{

  TBranch* branch = digitTree->GetBranch("Segment");
  AliSimDigits* digArray = 0;
  branch->SetAddress(&digArray);
  
  Int_t nEntries = Int_t(digitTree->GetEntries());
  
  for (Int_t n = 0; n < nEntries; n++) {
    
    digitTree->GetEvent(n);
    
    if (digArray->First())
      do {
        Float_t dig = digArray->CurrentDigit();
	
        FillDigitsData(kDigitsADC,dig);
      } while (digArray->Next());    
  }
  //
  IncEvCountCycleDigits();
  IncEvCountTotalDigits();  
  //
}

//____________________________________________________________________________
void AliTPCQADataMakerSim::MakeHits(TTree * hitTree)
{
  // make QA data from Hit Tree
 
  const Int_t nTracks = hitTree->GetEntries();
  TBranch* branch = hitTree->GetBranch("TPC2");
  AliTPCv2* tpc = (AliTPCv2*)gAlice->GetDetector("TPC");
  
  //
  // loop over tracks
  //
  for(Int_t n = 0; n < nTracks; n++){
    Int_t nHits = 0;
    branch->GetEntry(n);
    
    AliTPChit* tpcHit = (AliTPChit*)tpc->FirstHit(-1);  
    
    if (tpcHit) {
      Float_t dist  = 0.;
      Int_t   nprim = 0;
      Float_t xold  = tpcHit->X();
      Float_t yold  = tpcHit->Y();
      Float_t zold  = tpcHit->Z(); 
      Float_t radiusOld = TMath::Sqrt(xold*xold + yold*yold); 
      Int_t trackOld = tpcHit->GetTrack();
      Float_t q     = 0.;

      while(tpcHit) {

        Float_t x = tpcHit->X();
        Float_t y = tpcHit->Y();
        Float_t z = tpcHit->Z(); 
        Float_t radius = TMath::Sqrt(x*x + y*y);
	
        if(radius>50) { // Skip hits at interaction point
	  
          nHits++;
	  
          Int_t trackNo = tpcHit->GetTrack();
	  
	  FillHitsData(kElectrons,tpcHit->fQ);
	  FillHitsData(kRadius,radius);
	    
	  if(trackNo==trackOld) { // if the same track

	    // find the new distance
	    dist += TMath::Sqrt((x-xold)*(x-xold) + (y-yold)*(y-yold) + 
				(z-zold)*(z-zold));
	    if(dist<1.){ // add data to this 1 cm step
	      
	      nprim++;  
	      q += tpcHit->fQ;	      
	    } else{ // Fill the histograms normalized to per cm 
	      
	      // if(nprim==1)
	      // 	cout << radius << ", " << radiusOld << ", " << dist << endl; 
	      
	      FillHitsData(kPrimPerCm,(Float_t)nprim);
	      FillHitsData(kElectronsPerCm,q);
	      
	      dist  = 0;
	      q     = 0;
	      nprim = 0;
	    }
	  } else { // reset for new track
	    
	    dist  = 0;
	    q     = 0;
	    nprim = 0;
	  }
	}

	radiusOld = radius;
	xold = x;
	yold = y;
	zold = z;
	trackOld = tpcHit->GetTrack();
	
	tpcHit = (AliTPChit*) tpc->NextHit();
      }
    }

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