#include <AliTRDPIDResponse.h>
#include <AliTOFPIDResponse.h>
+#include <AliESDEvent.h>
+
#include "AliAnalysisTaskPIDqa.h"
fPIDResponse(0x0),
fListQA(0x0),
fListQAits(0x0),
+fListQAitsSA(0x0),
+fListQAitsPureSA(0x0),
fListQAtpc(0x0),
fListQAtrd(0x0),
-fListQAtof(0x0)
+fListQAtof(0x0),
+fListQAemcal(0x0),
+fListQAtpctof(0x0)
{
//
// Dummy constructor
fPIDResponse(0x0),
fListQA(0x0),
fListQAits(0x0),
+fListQAitsSA(0x0),
+fListQAitsPureSA(0x0),
fListQAtpc(0x0),
fListQAtrd(0x0),
-fListQAtof(0x0)
+fListQAtof(0x0),
+fListQAemcal(0x0),
+fListQAtpctof(0x0)
{
//
// Default constructor
fListQAits=new TList;
fListQAits->SetOwner();
fListQAits->SetName("ITS");
-
+
+ fListQAitsSA=new TList;
+ fListQAitsSA->SetOwner();
+ fListQAitsSA->SetName("ITS_SA");
+
+ fListQAitsPureSA=new TList;
+ fListQAitsPureSA->SetOwner();
+ fListQAitsPureSA->SetName("ITS_PureSA");
+
fListQAtpc=new TList;
fListQAtpc->SetOwner();
fListQAtpc->SetName("TPC");
fListQAtof->SetOwner();
fListQAtof->SetName("TOF");
+ fListQAemcal=new TList;
+ fListQAemcal->SetOwner();
+ fListQAemcal->SetName("EMCAL");
+
+ fListQAtpctof=new TList;
+ fListQAtpctof->SetOwner();
+ fListQAtpctof->SetName("TPC_TOF");
+
fListQA->Add(fListQAits);
+ fListQA->Add(fListQAitsSA);
+ fListQA->Add(fListQAitsPureSA);
fListQA->Add(fListQAtpc);
fListQA->Add(fListQAtrd);
fListQA->Add(fListQAtof);
+ fListQA->Add(fListQAemcal);
+ fListQA->Add(fListQAtpctof);
SetupITSqa();
SetupTPCqa();
SetupTRDqa();
SetupTOFqa();
+ SetupEMCALqa();
+ SetupTPCTOFqa();
PostData(1,fListQA);
}
FillITSqa();
FillTPCqa();
+ FillTRDqa();
FillTOFqa();
+ FillEMCALqa();
+ FillTPCTOFqa();
PostData(1,fListQA);
}
//______________________________________________________________________________
void AliAnalysisTaskPIDqa::FillITSqa()
{
+ //
+ // Fill PID qa histograms for the ITS
+ //
+
AliVEvent *event=InputEvent();
Int_t ntracks=event->GetNumberOfTracks();
AliVTrack *track=(AliVTrack*)event->GetTrack(itrack);
ULong_t status=track->GetStatus();
// not that nice. status bits not in virtual interface
- // ITS refit + ITS pid
- if (!( ( (status & AliVTrack::kITSrefit)==AliVTrack::kITSrefit ) &&
- ( (status & AliVTrack::kITSpid )==AliVTrack::kITSpid ) )) continue;
+ // ITS refit + ITS pid selection
+ if (!( ( (status & AliVTrack::kITSrefit)==AliVTrack::kITSrefit ) ||
+ ! ( (status & AliVTrack::kITSpid )==AliVTrack::kITSpid ) )) continue;
Double_t mom=track->P();
+ TList *theList = 0x0;
+ if(( (status & AliVTrack::kTPCin)==AliVTrack::kTPCin )){
+ //ITS+TPC tracks
+ theList=fListQAits;
+ }else{
+ if(!( (status & AliVTrack::kITSpureSA)==AliVTrack::kITSpureSA )){
+ //ITS Standalone tracks
+ theList=fListQAitsSA;
+ }else{
+ //ITS Pure Standalone tracks
+ theList=fListQAitsPureSA;
+ }
+ }
+
+
for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){
- TH2 *h=(TH2*)fListQAits->At(ispecie);
+ TH2 *h=(TH2*)theList->At(ispecie);
if (!h) continue;
Double_t nSigma=fPIDResponse->NumberOfSigmasITS(track, (AliPID::EParticleType)ispecie);
h->Fill(mom,nSigma);
}
-
- TH2 *h=(TH2*)fListQAits->At(AliPID::kSPECIES);
+ TH2 *h=(TH2*)theList->At(AliPID::kSPECIES);
if (h) {
Double_t sig=track->GetITSsignal();
h->Fill(mom,sig);
}
-
}
}
//______________________________________________________________________________
void AliAnalysisTaskPIDqa::FillTPCqa()
{
+ //
+ // Fill PID qa histograms for the TPC
+ //
+
AliVEvent *event=InputEvent();
Int_t ntracks=event->GetNumberOfTracks();
}
}
+//______________________________________________________________________________
+void AliAnalysisTaskPIDqa::FillTRDqa()
+{
+ //
+ // Fill PID qa histograms for the TRD
+ //
+ AliVEvent *event=InputEvent();
+ Int_t ntracks = event->GetNumberOfTracks();
+ for(Int_t itrack = 0; itrack < ntracks; itrack++){
+ AliVTrack *track = (AliVTrack *)event->GetTrack(itrack);
+
+ //
+ //basic track cuts
+ //
+ ULong_t status=track->GetStatus();
+ // not that nice. status bits not in virtual interface
+ // TPC refit + ITS refit + TPC pid + TRD out
+ if (!( (status & AliVTrack::kTPCrefit) == AliVTrack::kTPCrefit) ||
+ !( (status & AliVTrack::kITSrefit) == AliVTrack::kITSrefit) ||
+ !( (status & AliVTrack::kTPCpid ) == AliVTrack::kTPCpid ) ||
+ !( (status & AliVTrack::kTRDout ) == AliVTrack::kTRDout )) continue;
+
+ Float_t nCrossedRowsTPC = track->GetTPCClusterInfo(2,1);
+ Float_t ratioCrossedRowsOverFindableClustersTPC = 1.0;
+ if (track->GetTPCNclsF()>0) {
+ ratioCrossedRowsOverFindableClustersTPC = nCrossedRowsTPC/track->GetTPCNclsF();
+ }
+
+ if ( nCrossedRowsTPC<70 || ratioCrossedRowsOverFindableClustersTPC<.8 ) continue;
+
+ Double_t likelihoods[AliPID::kSPECIES];
+ if(fPIDResponse->ComputeTRDProbability(track, AliPID::kSPECIES, likelihoods) != AliPIDResponse::kDetPidOk) continue;
+ Int_t ntracklets = 0;
+ Double_t momentum = -1.;
+ for(Int_t itl = 0; itl < 6; itl++)
+ if(track->GetTRDmomentum(itl) > 0.){
+ ntracklets++;
+ if(momentum < 0) momentum = track->GetTRDmomentum(itl);
+ }
+ for(Int_t ispecie = 0; ispecie < AliPID::kSPECIES; ispecie++){
+ TH2F *hLike = (TH2F *)fListQAtrd->At(ntracklets*AliPID::kSPECIES+ispecie);
+ if (hLike) hLike->Fill(momentum,likelihoods[ispecie]);
+ }
+ }
+}
+
//______________________________________________________________________________
void AliAnalysisTaskPIDqa::FillTOFqa()
{
AliVEvent *event=InputEvent();
-
+
+
+
Int_t ntracks=event->GetNumberOfTracks();
+ Int_t tracksAtTof = 0;
for(Int_t itrack = 0; itrack < ntracks; itrack++){
AliVTrack *track=(AliVTrack*)event->GetTrack(itrack);
-
+
//
//basic track cuts
//
ULong_t status=track->GetStatus();
- // not that nice. status bits not in virtual interface
// TPC refit + ITS refit +
// TOF out + TOFpid +
// kTIME
+ // (we don't use kTOFmismatch because it depends on TPC....)
if (!((status & AliVTrack::kTPCrefit) == AliVTrack::kTPCrefit) ||
!((status & AliVTrack::kITSrefit) == AliVTrack::kITSrefit) ||
!((status & AliVTrack::kTOFout ) == AliVTrack::kTOFout ) ||
!((status & AliVTrack::kTOFpid ) == AliVTrack::kTOFpid ) ||
!((status & AliVTrack::kTIME ) == AliVTrack::kTIME ) ) continue;
-
+
Float_t nCrossedRowsTPC = track->GetTPCClusterInfo(2,1);
Float_t ratioCrossedRowsOverFindableClustersTPC = 1.0;
if (track->GetTPCNclsF()>0) {
ratioCrossedRowsOverFindableClustersTPC = nCrossedRowsTPC/track->GetTPCNclsF();
}
-
+
if ( nCrossedRowsTPC<70 || ratioCrossedRowsOverFindableClustersTPC<.8 ) continue;
-
-
+
+ tracksAtTof++;
+
Double_t mom=track->P();
-
+
for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){
TH2 *h=(TH2*)fListQAtof->At(ispecie);
if (!h) continue;
Double_t nSigma=fPIDResponse->NumberOfSigmasTOF(track, (AliPID::EParticleType)ispecie);
h->Fill(mom,nSigma);
}
-
- TH2 *h=(TH2*)fListQAtof->At(AliPID::kSPECIES);
+
+ TH2 *h=(TH2*)fListQAtof->FindObject("hSigP_TOF");
if (h) {
Double_t sig=track->GetTOFsignal();
h->Fill(mom,sig);
}
+
+ Double_t mask = (Double_t)fPIDResponse->GetTOFResponse().GetStartTimeMask(mom) + 0.5;
+ ((TH1F*)fListQAtof->FindObject("hStartTimeMask_TOF"))->Fill(mask);
+
+ if (mom >= 1.0 && mom <= 2.0 ) {
+ Double_t nsigma= fPIDResponse->NumberOfSigmasTOF(track, (AliPID::EParticleType)AliPID::kKaon);
+ if (mask == 0) {
+ ((TH1F*)fListQAtof->FindObject("hNsigma_TOF_Kaon_T0-Fill"))->Fill(nsigma);
+ } else if (mask == 1) {
+ ((TH1F*)fListQAtof->FindObject("hNsigma_TOF_Kaon_T0-TOF"))->Fill(nsigma);
+ } else if ( (mask == 2) || (mask == 4) || (mask == 6) ) {
+ ((TH1F*)fListQAtof->FindObject("hNsigma_TOF_Kaon_T0-T0"))->Fill(nsigma);
+ } else {
+ ((TH1F*)fListQAtof->FindObject("hNsigma_TOF_Kaon_T0-Best"))->Fill(nsigma);
+ }
+ }
+
+ Double_t res = (Double_t)fPIDResponse->GetTOFResponse().GetStartTimeRes(mom);
+ ((TH1F*)fListQAtof->FindObject("hStartTimeRes_TOF"))->Fill(res);
+
+ AliESDEvent *esd = dynamic_cast<AliESDEvent *>(event);
+ if (esd) {
+ Double_t startTime = esd->GetT0TOF(0);
+ if (startTime < 90000) ((TH1F*)fListQAtof->FindObject("hStartTimeAC_T0"))->Fill(startTime);
+ else {
+ startTime = esd->GetT0TOF(1);
+ if (startTime < 90000) ((TH1F*)fListQAtof->FindObject("hStartTimeA_T0"))->Fill(startTime);
+ startTime = esd->GetT0TOF(2);
+ if (startTime < 90000) ((TH1F*)fListQAtof->FindObject("hStartTimeC_T0"))->Fill(startTime);
+ }
+ }
+ }
+ if (tracksAtTof > 0) {
+ ((TH1F* )fListQAtof->FindObject("hnTracksAt_TOF"))->Fill(tracksAtTof);
+ Int_t mask = fPIDResponse->GetTOFResponse().GetStartTimeMask(5.);
+ if (mask & 0x1) ((TH1F*)fListQAtof->FindObject("hT0MakerEff"))->Fill(tracksAtTof);
+ }
+
+}
+
+
+//______________________________________________________________________________
+void AliAnalysisTaskPIDqa::FillEMCALqa()
+{
+ //
+ // Fill PID qa histograms for the EMCAL
+ //
+
+ AliVEvent *event=InputEvent();
+
+ Int_t ntracks=event->GetNumberOfTracks();
+ for(Int_t itrack = 0; itrack < ntracks; itrack++){
+ AliVTrack *track=(AliVTrack*)event->GetTrack(itrack);
+
+ //
+ //basic track cuts
+ //
+ ULong_t status=track->GetStatus();
+ // not that nice. status bits not in virtual interface
+ // TPC refit + ITS refit +
+ // TOF out + TOFpid +
+ // kTIME
+ if (!( (status & AliVTrack::kEMCALmatch) == AliVTrack::kEMCALmatch) ) continue;
+
+ Double_t pt=track->Pt();
+
+ //EMCAL nSigma (only for electrons at the moment)
+ TH2 *h=(TH2*)fListQAemcal->At(0);
+ if (!h) continue;
+ Double_t nSigma=fPIDResponse->NumberOfSigmasEMCAL(track, (AliPID::EParticleType)0);
+ h->Fill(pt,nSigma);
+
+ //EMCAL signal (E/p vs. pT)
+ h=(TH2*)fListQAemcal->At(1);
+ if (h) {
+
+ Int_t nMatchClus = track->GetEMCALcluster();
+ Double_t mom = track->P();
+ Double_t eop = -1.;
+
+ if(nMatchClus > -1){
+ AliVCluster *matchedClus = (AliVCluster*)event->GetCaloCluster(nMatchClus);
+
+ if(matchedClus){
+
+ // matched cluster is EMCAL
+ if(matchedClus->IsEMCAL()){
+
+ Double_t fClsE = matchedClus->E();
+ eop = fClsE/mom;
+
+ h->Fill(pt,eop);
+
+ }
+ }
+ }
+ }
+ }
+}
+
+//______________________________________________________________________________
+void AliAnalysisTaskPIDqa::FillTPCTOFqa()
+{
+ //
+ // Fill PID qa histograms for the TOF
+ // Here also the TPC histograms after TOF selection are filled
+ //
+
+ AliVEvent *event=InputEvent();
+
+ Int_t ntracks=event->GetNumberOfTracks();
+ for(Int_t itrack = 0; itrack < ntracks; itrack++){
+ AliVTrack *track=(AliVTrack*)event->GetTrack(itrack);
+
+ //
+ //basic track cuts
+ //
+ ULong_t status=track->GetStatus();
+ // not that nice. status bits not in virtual interface
+ // TPC refit + ITS refit +
+ // TOF out + TOFpid +
+ // kTIME
+ if (!((status & AliVTrack::kTPCrefit) == AliVTrack::kTPCrefit) ||
+ !((status & AliVTrack::kITSrefit) == AliVTrack::kITSrefit) ||
+ !( (status & AliVTrack::kTPCpid ) == AliVTrack::kTPCpid ) ||
+ !((status & AliVTrack::kTOFout ) == AliVTrack::kTOFout ) ||
+ !((status & AliVTrack::kTOFpid ) == AliVTrack::kTOFpid ) ||
+ !((status & AliVTrack::kTIME ) == AliVTrack::kTIME ) ) continue;
+
+ Float_t nCrossedRowsTPC = track->GetTPCClusterInfo(2,1);
+ Float_t ratioCrossedRowsOverFindableClustersTPC = 1.0;
+ if (track->GetTPCNclsF()>0) {
+ ratioCrossedRowsOverFindableClustersTPC = nCrossedRowsTPC/track->GetTPCNclsF();
+ }
+
+ if ( nCrossedRowsTPC<70 || ratioCrossedRowsOverFindableClustersTPC<.8 ) continue;
+
+
+ Double_t mom=track->P();
+ Double_t momTPC=track->GetTPCmomentum();
+
+ for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){
+ //TOF nSigma
+ Double_t nSigmaTOF=fPIDResponse->NumberOfSigmasTOF(track, (AliPID::EParticleType)ispecie);
+ Double_t nSigmaTPC=fPIDResponse->NumberOfSigmasTPC(track, (AliPID::EParticleType)ispecie);
+
+ //TPC after TOF cut
+ TH2 *h=(TH2*)fListQAtpctof->At(ispecie);
+ if (h && TMath::Abs(nSigmaTOF)<3.) h->Fill(momTPC,nSigmaTPC);
+
+ //TOF after TPC cut
+ h=(TH2*)fListQAtpctof->At(ispecie+AliPID::kSPECIES);
+ if (h && TMath::Abs(nSigmaTPC)<3.) h->Fill(mom,nSigmaTOF);
+
+ //EMCAL after TOF and TPC cut
+ h=(TH2*)fListQAtpctof->At(ispecie+2*AliPID::kSPECIES);
+ if (h && TMath::Abs(nSigmaTOF)<3. && TMath::Abs(nSigmaTPC)<3. ){
+
+ Int_t nMatchClus = track->GetEMCALcluster();
+ Double_t pt = track->Pt();
+ Double_t eop = -1.;
+
+ if(nMatchClus > -1){
+
+ AliVCluster *matchedClus = (AliVCluster*)event->GetCaloCluster(nMatchClus);
+
+ if(matchedClus){
+
+ // matched cluster is EMCAL
+ if(matchedClus->IsEMCAL()){
+
+ Double_t fClsE = matchedClus->E();
+ eop = fClsE/mom;
+
+ h->Fill(pt,eop);
+
+
+ }
+ }
+ }
+ }
+ }
}
}
TVectorD *vX=MakeLogBinning(200,.1,30);
+ //ITS+TPC tracks
for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){
TH2F *hNsigmaP = new TH2F(Form("hNsigmaP_ITS_%s",AliPID::ParticleName(ispecie)),
Form("ITS n#sigma %s vs. p;p [GeV]; n#sigma",AliPID::ParticleName(ispecie)),
200,-10,10);
fListQAits->Add(hNsigmaP);
}
-
-
TH2F *hSig = new TH2F("hSigP_ITS",
"ITS signal vs. p;p [GeV]; ITS signal [arb. units]",
vX->GetNrows()-1,vX->GetMatrixArray(),
300,0,300);
-
fListQAits->Add(hSig);
+
+ //ITS Standalone tracks
+ for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){
+ TH2F *hNsigmaPSA = new TH2F(Form("hNsigmaP_ITSSA_%s",AliPID::ParticleName(ispecie)),
+ Form("ITS n#sigma %s vs. p;p [GeV]; n#sigma",AliPID::ParticleName(ispecie)),
+ vX->GetNrows()-1,vX->GetMatrixArray(),
+ 200,-10,10);
+ fListQAitsSA->Add(hNsigmaPSA);
+ }
+ TH2F *hSigSA = new TH2F("hSigP_ITSSA",
+ "ITS signal vs. p;p [GeV]; ITS signal [arb. units]",
+ vX->GetNrows()-1,vX->GetMatrixArray(),
+ 300,0,300);
+ fListQAitsSA->Add(hSigSA);
+
+ //ITS Pure Standalone tracks
+ for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){
+ TH2F *hNsigmaPPureSA = new TH2F(Form("hNsigmaP_ITSPureSA_%s",AliPID::ParticleName(ispecie)),
+ Form("ITS n#sigma %s vs. p;p [GeV]; n#sigma",AliPID::ParticleName(ispecie)),
+ vX->GetNrows()-1,vX->GetMatrixArray(),
+ 200,-10,10);
+ fListQAitsPureSA->Add(hNsigmaPPureSA);
+ }
+ TH2F *hSigPureSA = new TH2F("hSigP_ITSPureSA",
+ "ITS signal vs. p;p [GeV]; ITS signal [arb. units]",
+ vX->GetNrows()-1,vX->GetMatrixArray(),
+ 300,0,300);
+ fListQAitsPureSA->Add(hSigPureSA);
+ delete vX;
}
//______________________________________________________________________________
"TPC signal vs. p;p [GeV]; TPC signal [arb. units]",
vX->GetNrows()-1,vX->GetMatrixArray(),
300,0,300);
-
fListQAtpc->Add(hSig);
-
+
+ delete vX;
}
//______________________________________________________________________________
//
// Create the TRD qa objects
//
-
+ TVectorD *vX=MakeLogBinning(200,.1,30);
+ for(Int_t itl = 0; itl < 6; ++itl){
+ for(Int_t ispecie = 0; ispecie < AliPID::kSPECIES; ispecie++){
+ TH2F *hLikeP = new TH2F(Form("hLikeP_TRD_%dtls_%s", itl, AliPID::ParticleName(ispecie)),
+ Form("TRD Likelihood to be %s %s for tracks having %d %s; p (GeV/c); TRD %s Likelihood", ispecie == 0 ? "an" : "a", AliPID::ParticleName(ispecie), itl+1, itl == 0 ? "tracklet" : "tracklets", AliPID::ParticleName(ispecie)),
+ vX->GetNrows()-1, vX->GetMatrixArray(),
+ 100, 0., 1.);
+ fListQAtrd->Add(hLikeP);
+ }
+ }
+ delete vX;
}
//______________________________________________________________________________
//
TVectorD *vX=MakeLogBinning(200,.1,30);
-
+
for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){
TH2F *hNsigmaP = new TH2F(Form("hNsigmaP_TOF_%s",AliPID::ParticleName(ispecie)),
Form("TOF n#sigma %s vs. p;p [GeV]; n#sigma",AliPID::ParticleName(ispecie)),
200,-10,10);
fListQAtof->Add(hNsigmaP);
}
-
-
+
+ // for Kaons PID we differentiate on Time Zero
+ TH1F *hnSigT0Fill = new TH1F("hNsigma_TOF_Kaon_T0-Fill","TOF n#sigma (Kaon) T0-FILL [1-2. GeV/c]",200,-10,10);
+ fListQAtof->Add(hnSigT0Fill);
+ TH1F *hnSigT0T0 = new TH1F("hNsigma_TOF_Kaon_T0-T0","TOF n#sigma (Kaon) T0-T0 [1-2. GeV/c]",200,-10,10);
+ fListQAtof->Add(hnSigT0T0);
+ TH1F *hnSigT0TOF = new TH1F("hNsigma_TOF_Kaon_T0-TOF","TOF n#sigma (Kaon) T0-TOF [1.-2. GeV/c]",200,-10,10);
+ fListQAtof->Add(hnSigT0TOF);
+ TH1F *hnSigT0Best = new TH1F("hNsigma_TOF_Kaon_T0-Best","TOF n#sigma (Kaon) T0-Best [1-2. GeV/c]",200,-10,10);
+ fListQAtof->Add(hnSigT0Best);
+
TH2F *hSig = new TH2F("hSigP_TOF",
"TOF signal vs. p;p [GeV]; TOF signal [arb. units]",
vX->GetNrows()-1,vX->GetMatrixArray(),
300,0,300);
+
+ delete vX;
fListQAtof->Add(hSig);
+
+ TH1F *hStartTimeMaskTOF = new TH1F("hStartTimeMask_TOF","StartTime mask",8,0,8);
+ fListQAtof->Add(hStartTimeMaskTOF);
+ TH1F *hStartTimeResTOF = new TH1F("hStartTimeRes_TOF","StartTime resolution [ps]",100,0,500);
+ fListQAtof->Add(hStartTimeResTOF);
+
+ TH1F *hnTracksAtTOF = new TH1F("hnTracksAt_TOF","Matched tracks at TOF",20,0,20);
+ fListQAtof->Add(hnTracksAtTOF);
+ TH1F *hT0MakerEff = new TH1F("hT0MakerEff","Events with T0-TOF vs nTracks",20,0,20);
+ fListQAtof->Add(hT0MakerEff);
+
+ // this in principle should stay on a T0 PID QA, but are just the data prepared for TOF use
+ TH1F *hStartTimeAT0 = new TH1F("hStartTimeA_T0","StartTime from T0A [ps]",1000,-1000,1000);
+ fListQAtof->Add(hStartTimeAT0);
+ TH1F *hStartTimeCT0 = new TH1F("hStartTimeC_T0","StartTime from T0C [ps]",1000,-1000,1000);
+ fListQAtof->Add(hStartTimeCT0);
+ TH1F *hStartTimeACT0 = new TH1F("hStartTimeAC_T0","StartTime from T0AC [ps]",1000,-1000,1000);;
+ fListQAtof->Add(hStartTimeACT0);
+}
+
+//______________________________________________________________________________
+void AliAnalysisTaskPIDqa::SetupEMCALqa()
+{
+ //
+ // Create the EMCAL qa objects
+ //
+
+ TVectorD *vX=MakeLogBinning(200,.1,30);
+ TH2F *hNsigmaPt = new TH2F(Form("hNsigmaPt_EMCAL_%s",AliPID::ParticleName(0)),
+ Form("EMCAL n#sigma %s vs. p_{T};p_{T} [GeV]; n#sigma",AliPID::ParticleName(0)),
+ vX->GetNrows()-1,vX->GetMatrixArray(),
+ 200,-10,10);
+ fListQAemcal->Add(hNsigmaPt);
+
+ TH2F *hSigPt = new TH2F("hSigPt_EMCAL",
+ "EMCAL signal (E/p) vs. p_{T};p_{T} [GeV]; EMCAL signal (E/p) [arb. units]",
+ vX->GetNrows()-1,vX->GetMatrixArray(),
+ 200,0,2);
+ fListQAemcal->Add(hSigPt);
+
+ delete vX;
+}
+
+//______________________________________________________________________________
+void AliAnalysisTaskPIDqa::SetupTPCTOFqa()
+{
+ //
+ // Create the qa objects for TPC + TOF combination
+ //
+
+ TVectorD *vX=MakeLogBinning(200,.1,30);
+
+ //TPC signals after TOF cut
+ for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){
+ TH2F *hNsigmaP = new TH2F(Form("hNsigmaP_TPC_TOF_%s",AliPID::ParticleName(ispecie)),
+ Form("TPC n#sigma %s vs. p (after TOF 3#sigma cut);p_{TPC} [GeV]; n#sigma",AliPID::ParticleName(ispecie)),
+ vX->GetNrows()-1,vX->GetMatrixArray(),
+ 200,-10,10);
+ fListQAtpctof->Add(hNsigmaP);
+ }
+
+ //TOF signals after TPC cut
+ for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){
+ TH2F *hNsigmaP = new TH2F(Form("hNsigmaP_TOF_TPC_%s",AliPID::ParticleName(ispecie)),
+ Form("TOF n#sigma %s vs. p (after TPC n#sigma cut);p [GeV]; n#sigma",AliPID::ParticleName(ispecie)),
+ vX->GetNrows()-1,vX->GetMatrixArray(),
+ 200,-10,10);
+ fListQAtpctof->Add(hNsigmaP);
+ }
+
+ //EMCAL signal after TOF and TPC cut
+ for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){
+ TH2F *heopPt = new TH2F(Form("heopPt_TOF_TPC_%s",AliPID::ParticleName(ispecie)),
+ Form("EMCAL signal (E/p) %s vs. p_{T};p_{T} [GeV]; EMCAL signal (E/p) [arb. units]",AliPID::ParticleName(ispecie)),
+ vX->GetNrows()-1,vX->GetMatrixArray(),
+ 200,0,2);
+ fListQAtpctof->Add(heopPt);
+ }
+
+ delete vX;
}
//______________________________________________________________________________
delete arr;
return binLimits;
}
+