fListQAtrd(0x0),
fListQAtof(0x0),
fListQAemcal(0x0),
+fListQAhmpid(0x0),
+fListQAtofhmpid(0x0),
fListQAtpctof(0x0)
{
//
fListQAtrd(0x0),
fListQAtof(0x0),
fListQAemcal(0x0),
+fListQAhmpid(0x0),
+fListQAtofhmpid(0x0),
fListQAtpctof(0x0)
{
//
//
// Destructor
//
-
+ delete fListQA;
}
//______________________________________________________________________________
fListQAemcal=new TList;
fListQAemcal->SetOwner();
fListQAemcal->SetName("EMCAL");
-
+
+ fListQAhmpid=new TList;
+ fListQAhmpid->SetOwner();
+ fListQAhmpid->SetName("HMPID");
+
fListQAtpctof=new TList;
fListQAtpctof->SetOwner();
fListQAtpctof->SetName("TPC_TOF");
+ fListQAtofhmpid=new TList;
+ fListQAtofhmpid->SetOwner();
+ fListQAtofhmpid->SetName("TOF_HMPID");
+
fListQA->Add(fListQAits);
fListQA->Add(fListQAitsSA);
fListQA->Add(fListQAitsPureSA);
fListQA->Add(fListQAtrd);
fListQA->Add(fListQAtof);
fListQA->Add(fListQAemcal);
+ fListQA->Add(fListQAhmpid);
fListQA->Add(fListQAtpctof);
+ fListQA->Add(fListQAtofhmpid);
SetupITSqa();
SetupTPCqa();
SetupTRDqa();
SetupTOFqa();
SetupEMCALqa();
+ SetupHMPIDqa();
SetupTPCTOFqa();
-
+ SetupTOFHMPIDqa();
+
PostData(1,fListQA);
}
FillTRDqa();
FillTOFqa();
FillEMCALqa();
+ FillHMPIDqa();
+
+ //combined detector QA
FillTPCTOFqa();
-
+ FillTOFHMPIDqa();
+
PostData(1,fListQA);
}
// not that nice. status bits not in virtual interface
// TPC refit + ITS refit + TPC pid
if (!( (status & AliVTrack::kTPCrefit) == AliVTrack::kTPCrefit) ||
- !( (status & AliVTrack::kITSrefit) == AliVTrack::kITSrefit) ||
- !( (status & AliVTrack::kTPCpid ) == AliVTrack::kTPCpid ) ) continue;
-
+ !( (status & AliVTrack::kITSrefit) == AliVTrack::kITSrefit) ) continue;
+
+ // The TPC pid cut removes the light nuclei (>5 sigma from proton line)
+ //|| !( (status & AliVTrack::kTPCpid ) == AliVTrack::kTPCpid )
Float_t nCrossedRowsTPC = track->GetTPCClusterInfo(2,1);
Float_t ratioCrossedRowsOverFindableClustersTPC = 1.0;
if (track->GetTPCNclsF()>0) {
// 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::kTPCpid ) == AliVTrack::kTPCpid ) || //removes light nuclei. So it is out for the moment
!( (status & AliVTrack::kTRDout ) == AliVTrack::kTRDout )) continue;
Float_t nCrossedRowsTPC = track->GetTPCClusterInfo(2,1);
//______________________________________________________________________________
void AliAnalysisTaskPIDqa::FillTOFqa()
{
+ //
+ // Fill TOF information
+ //
AliVEvent *event=InputEvent();
-
-
Int_t ntracks=event->GetNumberOfTracks();
Int_t tracksAtTof = 0;
for(Int_t itrack = 0; itrack < ntracks; itrack++){
TH2 *h=(TH2*)fListQAtof->FindObject("hSigP_TOF");
if (h) {
- Double_t sig=track->GetTOFsignal();
+ Double_t sig=track->GetTOFsignal()/1000.;
h->Fill(mom,sig);
}
- Double_t mask = (Double_t)fPIDResponse->GetTOFResponse().GetStartTimeMask(mom) + 0.5;
- ((TH1F*)fListQAtof->FindObject("hStartTimeMask_TOF"))->Fill(mask);
+ Int_t mask = fPIDResponse->GetTOFResponse().GetStartTimeMask(mom);
+ ((TH1F*)fListQAtof->FindObject("hStartTimeMask_TOF"))->Fill((Double_t)(mask+0.5));
- if (mom >= 1.0 && mom <= 2.0 ) {
- Double_t nsigma= fPIDResponse->NumberOfSigmasTOF(track, (AliPID::EParticleType)AliPID::kKaon);
+ if (mom >= 0.75 && mom <= 1.25 ) {
+ Double_t nsigma= fPIDResponse->NumberOfSigmasTOF(track, (AliPID::EParticleType)AliPID::kPion);
if (mask == 0) {
- ((TH1F*)fListQAtof->FindObject("hNsigma_TOF_Kaon_T0-Fill"))->Fill(nsigma);
+ ((TH1F*)fListQAtof->FindObject("hNsigma_TOF_Pion_T0-Fill"))->Fill(nsigma);
} else if (mask == 1) {
- ((TH1F*)fListQAtof->FindObject("hNsigma_TOF_Kaon_T0-TOF"))->Fill(nsigma);
+ ((TH1F*)fListQAtof->FindObject("hNsigma_TOF_Pion_T0-TOF"))->Fill(nsigma);
} else if ( (mask == 2) || (mask == 4) || (mask == 6) ) {
- ((TH1F*)fListQAtof->FindObject("hNsigma_TOF_Kaon_T0-T0"))->Fill(nsigma);
+ ((TH1F*)fListQAtof->FindObject("hNsigma_TOF_Pion_T0-T0"))->Fill(nsigma);
} else {
- ((TH1F*)fListQAtof->FindObject("hNsigma_TOF_Kaon_T0-Best"))->Fill(nsigma);
+ ((TH1F*)fListQAtof->FindObject("hNsigma_TOF_Pion_T0-Best"))->Fill(nsigma);
}
}
Int_t mask = fPIDResponse->GetTOFResponse().GetStartTimeMask(5.);
if (mask & 0x1) ((TH1F*)fListQAtof->FindObject("hT0MakerEff"))->Fill(tracksAtTof);
}
-
}
if(nMatchClus > -1){
- AliVCluster *matchedClus = (AliVCluster*)event->GetCaloCluster(nMatchClus);
-
- if(matchedClus){
+ AliVCluster *matchedClus = (AliVCluster*)event->GetCaloCluster(nMatchClus);
- // matched cluster is EMCAL
- if(matchedClus->IsEMCAL()){
-
- Double_t fClsE = matchedClus->E();
- eop = fClsE/mom;
+ if(matchedClus){
- h->Fill(pt,eop);
-
- }
- }
+ // matched cluster is EMCAL
+ if(matchedClus->IsEMCAL()){
+
+ Double_t fClsE = matchedClus->E();
+ eop = fClsE/mom;
+
+ h->Fill(pt,eop);
+
+ }
+ }
}
}
}
}
+
+//______________________________________________________________________________
+void AliAnalysisTaskPIDqa::FillHMPIDqa()
+{
+ //
+ // Fill PID qa histograms for the HMPID
+ //
+
+ 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) ) 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 ckovAngle = track->GetHMPIDsignal();
+
+ TH1F *hThetavsMom = (TH1F*)fListQAhmpid->At(0);;
+
+ hThetavsMom->Fill(mom,ckovAngle);
+
+ }
+}
+//______________________________________________________________________________
+void AliAnalysisTaskPIDqa::FillTOFHMPIDqa()
+{
+ //
+ // Fill PID qa histograms for the HMPID
+ //
+
+ 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::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 ckovAngle = track->GetHMPIDsignal();
+
+ Double_t nSigmaTOF[3];
+ TH1F *h[3];
+
+ for (Int_t ispecie=2; ispecie<AliPID::kSPECIES; ++ispecie){
+ //TOF nSigma
+ nSigmaTOF[ispecie]=fPIDResponse->NumberOfSigmasTOF(track, (AliPID::EParticleType)ispecie);
+ h[ispecie-2] = (TH1F*)fListQAtofhmpid->At(ispecie-2);}
+
+ if(TMath::Abs(nSigmaTOF[0])<2) h[0]->Fill(mom,ckovAngle);
+
+ if(TMath::Abs(nSigmaTOF[1])<2 && TMath::Abs(nSigmaTOF[0])>3) h[1]->Fill(mom,ckovAngle);
+
+ if(TMath::Abs(nSigmaTOF[2])<2 && TMath::Abs(nSigmaTOF[1])>3 && TMath::Abs(nSigmaTOF[0])>3) h[2]->Fill(mom,ckovAngle);
+
+ }
+
+}
+
//______________________________________________________________________________
void AliAnalysisTaskPIDqa::FillTPCTOFqa()
{
// kTIME
if (!((status & AliVTrack::kTPCrefit) == AliVTrack::kTPCrefit) ||
!((status & AliVTrack::kITSrefit) == AliVTrack::kITSrefit) ||
- !( (status & AliVTrack::kTPCpid ) == AliVTrack::kTPCpid ) ||
+// !( (status & AliVTrack::kTPCpid ) == AliVTrack::kTPCpid ) || //removes light nuclei, so it is out for the moment
!((status & AliVTrack::kTOFout ) == AliVTrack::kTOFout ) ||
!((status & AliVTrack::kTOFpid ) == AliVTrack::kTOFpid ) ||
!((status & AliVTrack::kTIME ) == AliVTrack::kTIME ) ) continue;
}
// 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);
+ TH1F *hnSigT0Fill = new TH1F("hNsigma_TOF_Pion_T0-Fill","TOF n#sigma (Pion) T0-FILL [0.75-1.25. 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);
+ TH1F *hnSigT0T0 = new TH1F("hNsigma_TOF_Pion_T0-T0","TOF n#sigma (Pion) T0-T0 [0.75-1.25 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);
+ TH1F *hnSigT0TOF = new TH1F("hNsigma_TOF_Pion_T0-TOF","TOF n#sigma (Pion) T0-TOF [0.75-1.25 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);
+ TH1F *hnSigT0Best = new TH1F("hNsigma_TOF_Pion_T0-Best","TOF n#sigma (Pion) T0-Best [0.75-1.25 GeV/c]",200,-10,10);
fListQAtof->Add(hnSigT0Best);
TH2F *hSig = new TH2F("hSigP_TOF",
- "TOF signal vs. p;p [GeV]; TOF signal [arb. units]",
+ "TOF signal vs. p;p [GeV]; TOF signal [ns]",
vX->GetNrows()-1,vX->GetMatrixArray(),
- 300,0,300);
+ 300,0,30);
delete vX;
delete vX;
}
+//______________________________________________________________________________
+void AliAnalysisTaskPIDqa::SetupHMPIDqa()
+{
+ //
+ // Create the HMPID qa objects
+ //
+
+ TH2F *hCkovAnglevsMom = new TH2F("hCkovAnglevsMom", "Cherenkov angle vs momnetum",500,0,5.,500,0,1);
+ fListQAhmpid->Add(hCkovAnglevsMom);
+
+}
+
+//______________________________________________________________________________
+void AliAnalysisTaskPIDqa::SetupTOFHMPIDqa()
+{
+ //
+ // Create the HMPID qa objects
+ //
+
+ TH2F *hCkovAnglevsMomPion = new TH2F("hCkovAnglevsMom_pion", "Cherenkov angle vs momnetum for pions",500,0,5.,500,0,1);
+ fListQAtofhmpid->Add(hCkovAnglevsMomPion);
+
+ TH2F *hCkovAnglevsMomKaon = new TH2F("hCkovAnglevsMom_kaon", "Cherenkov angle vs momnetum for kaons",500,0,5.,500,0,1);
+ fListQAtofhmpid->Add(hCkovAnglevsMomKaon);
+
+ TH2F *hCkovAnglevsMomProton = new TH2F("hCkovAnglevsMom_proton","Cherenkov angle vs momnetum for protons",500,0,5.,500,0,1);
+ fListQAtofhmpid->Add(hCkovAnglevsMomProton);
+
+
+}
+
//______________________________________________________________________________
void AliAnalysisTaskPIDqa::SetupTPCTOFqa()
{