#include <TPDGCode.h>
#include <TH1F.h>
+#include "AliQAChecker.h"
#include "AliGlobalQADataMaker.h"
#include "AliGeomManager.h"
#include "AliESDEvent.h"
#include "AliESDv0.h"
+#include "AliRawReader.h"
ClassImp(AliGlobalQADataMaker)
+//____________________________________________________________________________
+void AliGlobalQADataMaker::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list)
+{
+ //Detector specific actions at end of cycle
+ // do the QA checking
+ AliQAChecker::Instance()->Run(AliQAv1::kGLOBAL, task, list) ;
+}
+
+//____________________________________________________________________________
+void AliGlobalQADataMaker::InitRaws()
+{
+ // create Raws histograms in Raws subdir
+}
+
+//____________________________________________________________________________
void AliGlobalQADataMaker::InitRecPoints() {
//------------------------------------------------------
// This function books the histograms of *track*residuals*
// as a part of global QA
//------------------------------------------------------
- Char_t *name[]={
+ const Char_t *name[]={
"SPD1 residuals Y","SPD1 residuals Z",
"SPD2 residuals Y","SPD2 residuals Z",
"SDD1 residuals Y","SDD1 residuals Z",
h=new TH1F(name[i+1],name[i+1],100,-5.,5.);
Add2RecPointsList(h,i+1);
}
+
+ Add2RecPointsList(
+ new TH1F("SSD1 absolute residuals Y for Z<0 (cm)",
+ "SSD1 absolute residuals Y for Z<0 (cm)",100,-2.,2.),40);
+ Add2RecPointsList(
+ new TH1F("SSD1 absolute residuals Z for Z<0 (cm)",
+ "SSD1 absolute residuals Z for Z<0 (cm)",100,-2.,2.),41);
+ Add2RecPointsList(
+ new TH1F("SSD1 absolute residuals Y for Z>0 (cm)",
+ "SSD1 absolute residuals Y for Z>0 (cm)",100,-2.,2.),42);
+ Add2RecPointsList(
+ new TH1F("SSD1 absolute residuals Z for Z>0 (cm)",
+ "SSD1 absolute residuals Z for Z>0 (cm)",100,-2.,2.),43);
+
+
+ Add2RecPointsList(
+ new TH1F("SSD2 absolute residuals Y for Z<0 (cm)",
+ "SSD2 absolute residuals Y for Z<0 (cm)",100,-3.,3.),44);
+ Add2RecPointsList(
+ new TH1F("SSD2 absolute residuals Z for Z<0 (cm)",
+ "SSD2 absolute residuals Z for Z<0 (cm)",100,-3.,3.),45);
+ Add2RecPointsList(
+ new TH1F("SSD2 absolute residuals Y for Z>0 (cm)",
+ "SSD2 absolute residuals Y for Z>0 (cm)",100,-3.,3.),46);
+ Add2RecPointsList(
+ new TH1F("SSD2 absolute residuals Z for Z>0 (cm)",
+ "SSD2 absolute residuals Z for Z>0 (cm)",100,-3.,3.),47);
+
}
+//____________________________________________________________________________
void AliGlobalQADataMaker::InitESDs() {
//------------------------------------------------------
// This function books the ESD QA histograms
//------------------------------------------------------
{// Cluster related QA
- Char_t *name[]={
+ const Char_t *name[]={
"Fraction of the assigned clusters in ITS",
"Fraction of the assigned clusters in TPC",
"Fraction of the assigned clusters in TRD"
}
{// Track related QA
- Char_t *name[]={
+ const Char_t *name[]={
"Track azimuthal distribution (rad)", // kTrk0
"Track pseudo-rapidity distribution", // kTrk1
- "TPC: track momentum distribution (GeV/c)", // kTrk2
- "TPC-ITS matched: track momentum distribution (GeV/c)", // kTrk3
- "TPC-TOF matched: track momentum distribution (GeV/c)", // kTrk4
+ "TPC: track momentum distribution (GeV)", // kTrk2
+ "TPC-ITS matched: track momentum distribution (GeV)", // kTrk3
+ "TPC-TOF matched: track momentum distribution (GeV)", // kTrk4
"TPC-ITS track-matching probability", // kTrk5
"TPC-TOF track-matching probability" // kTrk6
};
- Add2ESDsList(new TH1F(name[0],name[0],100,-0.02,6.30),kTrk0);
+ Add2ESDsList(new TH1F(name[0],name[0],100, 0.,TMath::TwoPi()),kTrk0);
Add2ESDsList(new TH1F(name[1],name[1],100,-2.00,2.00),kTrk1);
Add2ESDsList(new TH1F(name[2],name[2],50, 0.20,5.00),kTrk2);
Add2ESDsList(new TH1F(name[3],name[3],50, 0.20,5.00),kTrk3);
}
{// V0 related QA
- Char_t *name[]={
- "K0s mass (GeV)",
- "Lambda0 + Lambda0Bar mass (GeV)"
+ const Char_t *name[]={
+ "On-the-fly K0s mass (GeV)",
+ "Offline K0s mass (GeV)",
+ "On-the-fly Lambda0 + Lambda0Bar mass (GeV)",
+ "Offline Lambda0 + Lambda0Bar mass (GeV)"
};
- Add2ESDsList(new TH1F(name[0],name[0],50, 0.4477,0.5477),kV0s0);
- Add2ESDsList(new TH1F(name[1],name[1],50, 1.0657,1.1657),kV0s1);
+ Add2ESDsList(new TH1F(name[0],name[0],50, 0.4477,0.5477),kK0on);
+ Add2ESDsList(new TH1F(name[1],name[1],50, 0.4477,0.5477),kK0off);
+ Add2ESDsList(new TH1F(name[2],name[2],50, 1.0657,1.1657),kL0on);
+ Add2ESDsList(new TH1F(name[3],name[3],50, 1.0657,1.1657),kL0off);
}
{// PID related QA
- Char_t *name[]={
- "ITS: dE/dx (ADC) for particles with momentum 0.4 - 0.5 (GeV/c)",
- "TPC: dE/dx (ADC) for particles with momentum 0.4 - 0.5 (GeV/c)",
+ const Char_t *name[]={
+ "ITS: dEdx (ADC) for particles with momentum 0.4 - 0.5 (GeV)",
+ "TPC: dEdx (ADC) for particles with momentum 0.4 - 0.5 (GeV)",
"TOF: tracking - measured (ps)"
};
Add2ESDsList(new TH1F(name[0],name[0],50,0.00,200.),kPid0);
}
+//____________________________________________________________________________
+void AliGlobalQADataMaker::MakeRaws(AliRawReader* rawReader)
+{
+ //Fill prepared histograms with Raw digit properties
+ rawReader->Reset() ;
+
+}
+
+//____________________________________________________________________________
void AliGlobalQADataMaker::MakeESDs(AliESDEvent * event) {
//-----------------------------------------------------------
// This function fills the ESD QA histograms
// as a part of global QA
//-----------------------------------------------------------
+ // Check id histograms already created for this Event Specie
+ if ( ! GetESDsData(kClr0) )
+ InitESDs() ;
+
const AliESDEvent *esd=event;
Int_t ntrk=esd->GetNumberOfTracks() ;
if (track->IsOn(AliESDtrack::kTPCrefit)) {
Int_t n =track->GetTPCNcls();
Int_t nf=track->GetTPCNclsF(); // number of crossed TPC pad rows
- GetESDsData(kClr1)->Fill(Float_t(n)/nf);
+ if (nf>0) {
+ Double_t val = n*1.0/nf;
+ GetESDsData(kClr1)->Fill(val);
+ }
}
if (track->IsOn(AliESDtrack::kTRDrefit)) {
if ((TMath::Abs(dz[0])<3.) && (TMath::Abs(dz[1])<3.)) { // beam pipe
Double_t phi=track->Phi();
GetESDsData(kTrk0)->Fill(phi);
- Double_t y=track->Y();
+ Double_t y=track->Eta();
GetESDsData(kTrk1)->Fill(y);
if (TMath::Abs(y)<0.9) {
GetESDsData(kTrk2)->Fill(p);
if (track->IsOn(AliESDtrack::kITSrefit)) GetESDsData(kTrk3)->Fill(p);
- if (track->IsOn(AliESDtrack::kTOFout)) GetESDsData(kTrk4)->Fill(p);
+ //if (track->IsOn(AliESDtrack::kTOFout)) GetESDsData(kTrk4)->Fill(p);
+ if (track->GetTOFsignal()>0) GetESDsData(kTrk4)->Fill(p);
}
}
}
v0.ChangeMassHypothesis(kK0Short);
mass=v0.GetEffMass();
- GetESDsData(kV0s0)->Fill(mass);
+ if (v0.GetOnFlyStatus())
+ GetESDsData(kK0on)->Fill(mass);
+ else
+ GetESDsData(kK0off)->Fill(mass);
v0.ChangeMassHypothesis(kLambda0);
mass=v0.GetEffMass();
- GetESDsData(kV0s1)->Fill(mass);
+ if (v0.GetOnFlyStatus())
+ GetESDsData(kL0on)->Fill(mass);
+ else
+ GetESDsData(kL0off)->Fill(mass);
v0.ChangeMassHypothesis(kLambda0Bar);
mass=v0.GetEffMass();
- GetESDsData(kV0s1)->Fill(mass);
+ if (v0.GetOnFlyStatus())
+ GetESDsData(kL0on)->Fill(mass);
+ else
+ GetESDsData(kL0off)->Fill(mass);
}
}