#include "AliTPC.h"
#include "AliTPCv2.h"
#include "AliSimDigits.h"
+#include <TTree.h>
ClassImp(AliTPCQADataMakerSim)
//____________________________________________________________________________
AliTPCQADataMakerSim::AliTPCQADataMakerSim() :
- AliQADataMakerSim(AliQA::GetDetName(AliQA::kTPC),
- "TPC Sim Quality Assurance Data Maker"),
- fHistDigitsADC(0),
- fHistHitsNhits(0),
- fHistHitsElectrons(0),
- fHistHitsRadius(0),
- fHistHitsPrimPerCm(0),
- fHistHitsElectronsPerCm(0)
+ AliQADataMakerSim(AliQAv1::GetDetName(AliQAv1::kTPC),
+ "TPC Sim Quality Assurance Data Maker")
{
// ctor
}
//____________________________________________________________________________
AliTPCQADataMakerSim::AliTPCQADataMakerSim(const AliTPCQADataMakerSim& qadm) :
- AliQADataMakerSim(),
- fHistDigitsADC(0),
- fHistHitsNhits(0),
- fHistHitsElectrons(0),
- fHistHitsRadius(0),
- fHistHitsPrimPerCm(0),
- fHistHitsElectronsPerCm(0)
+ AliQADataMakerSim()
{
//copy ctor
SetName((const char*)qadm.GetName()) ;
// Associate class histogram objects to the copies in the list
// Could also be done with the indexes
//
- fHistDigitsADC = (TH1F*)fDigitsQAList->FindObject("hDigitsADC");
-
- fHistHitsNhits = (TH1F*)fHitsQAList->FindObject("hHitsNhits");
- fHistHitsElectrons = (TH1F*)fHitsQAList->FindObject("hHitsElectrons");
- fHistHitsRadius = (TH1F*)fHitsQAList->FindObject("hHitsRadius");
- fHistHitsPrimPerCm = (TH1F*)fHitsQAList->FindObject("hHitsPrimPerCm");
- fHistHitsElectronsPerCm = (TH1F*)fHitsQAList->FindObject("hHitsElectronsPerCm");
-}
+ }
//__________________________________________________________________
AliTPCQADataMakerSim& AliTPCQADataMakerSim::operator = (const AliTPCQADataMakerSim& qadm )
}
//____________________________________________________________________________
-void AliTPCQADataMakerSim::EndOfDetectorCycle(AliQA::TASKINDEX task, TObjArray * list)
+void AliTPCQADataMakerSim::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list)
{
//Detector specific actions at end of cycle
// do the QA checking
- AliQAChecker::Instance()->Run(AliQA::kTPC, task, list) ;
+ AliQAChecker::Instance()->Run(AliQAv1::kTPC, task, list) ;
}
//____________________________________________________________________________
void AliTPCQADataMakerSim::InitDigits()
{
- fHistDigitsADC =
+ const Bool_t expert = kTRUE ;
+ const Bool_t image = kTRUE ;
+ TH1F * histDigitsADC =
new TH1F("hDigitsADC", "Digit ADC distribution; ADC; Counts",
1000, 0, 1000);
- fHistDigitsADC->Sumw2();
- Add2DigitsList(fHistDigitsADC, 0);
+ histDigitsADC->Sumw2();
+ Add2DigitsList(histDigitsADC, kDigitsADC, !expert, image);
+ //
+ ClonePerTrigClass(AliQAv1::kDIGITS); // this should be the last line
}
//____________________________________________________________________________
void AliTPCQADataMakerSim::InitHits()
{
- fHistHitsNhits =
- new TH1F("hHitsNhits", "Interactions per primary track in the TPC volume; Number of primary interactions; Counts",
+ 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);
- fHistHitsNhits->Sumw2();
- Add2HitsList(fHistHitsNhits, 0);
+ histHitsNhits->Sumw2();
+ Add2HitsList(histHitsNhits, kNhits, !expert, image);
- fHistHitsElectrons =
- new TH1F("hHitsElectrons", "Electrons per interaction (primaries); Electrons; Counts",
+ TH1F * histHitsElectrons =
+ new TH1F("hHitsElectrons", "Electrons per interaction; Electrons; Counts",
300, 0, 300);
- fHistHitsElectrons->Sumw2();
- Add2HitsList(fHistHitsElectrons, 1);
+ histHitsElectrons->Sumw2();
+ Add2HitsList(histHitsElectrons, kElectrons, !expert, image);
- fHistHitsRadius =
- new TH1F("hHitsRadius", "Position of interaction (Primary tracks only); Radius; Counts",
+ TH1F * histHitsRadius =
+ new TH1F("hHitsRadius", "Position of interaction; Radius; Counts",
300, 0., 300.);
- fHistHitsRadius->Sumw2();
- Add2HitsList(fHistHitsRadius, 2);
+ histHitsRadius->Sumw2();
+ Add2HitsList(histHitsRadius, kRadius, !expert, image);
- fHistHitsPrimPerCm =
- new TH1F("hHitsPrimPerCm", "Primaries per cm (Primary tracks only); Primaries; Counts",
+ TH1F * histHitsPrimPerCm =
+ new TH1F("hHitsPrimPerCm", "Primaries per cm; Primaries; Counts",
100, 0., 100.);
- fHistHitsPrimPerCm->Sumw2();
- Add2HitsList(fHistHitsPrimPerCm, 3);
+ histHitsPrimPerCm->Sumw2();
+ Add2HitsList(histHitsPrimPerCm, kPrimPerCm, !expert, image);
- fHistHitsElectronsPerCm =
- new TH1F("hHitsElectronsPerCm", "Electrons per cm (Primary tracks only); Electrons; Counts",
+ TH1F * histHitsElectronsPerCm =
+ new TH1F("hHitsElectronsPerCm", "Electrons per cm; Electrons; Counts",
300, 0., 300.);
- fHistHitsElectronsPerCm->Sumw2();
- Add2HitsList(fHistHitsElectronsPerCm, 4);
+ 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);
if (digArray->First())
do {
+ Float_t dig = digArray->CurrentDigit();
- Float_t dig = digArray->CurrentDigit();
-
- fHistDigitsADC->Fill(dig);
+ 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");
+ TBranch* branch = hitTree->GetBranch("TPC2");
AliTPCv2* tpc = (AliTPCv2*)gAlice->GetDetector("TPC");
//
Float_t xold = tpcHit->X();
Float_t yold = tpcHit->Y();
Float_t zold = tpcHit->Z();
- Float_t radiusOld = TMath::Sqrt(xold*xold + yold*yold);
+ 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);
+
+ 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
+ if(radius>50) { // Skip hits at interaction point
- nHits++;
+ nHits++;
- Int_t trackNo = tpcHit->GetTrack();
+ Int_t trackNo = tpcHit->GetTrack();
- if(trackNo==n) { // primary track
-
- fHistHitsElectrons->Fill(tpcHit->fQ);
- fHistHitsRadius->Fill(radius);
+ 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;
+ if(dist<1.){ // add data to this 1 cm step
- } else{
- // Fill the histograms normalized to per cm
+ nprim++;
+ q += tpcHit->fQ;
+ } else{ // Fill the histograms normalized to per cm
- if(nprim==1)
- cout << radius << ", " << radiusOld << ", " << dist << endl;
+ // if(nprim==1)
+ // cout << radius << ", " << radiusOld << ", " << dist << endl;
- fHistHitsPrimPerCm->Fill((Float_t)nprim);
- fHistHitsElectronsPerCm->Fill(q);
+ 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();
}
}
- fHistHitsNhits->Fill(nHits);
+
+ FillHitsData(kNhits,nHits);
}
+ //
+ IncEvCountCycleHits();
+ IncEvCountTotalHits();
+ //
}
-
+