fListQAtpc(0x0),\r
fListQAtrd(0x0),\r
fListQAtof(0x0),\r
+fListQAt0(0x0),\r
fListQAemcal(0x0),\r
fListQAhmpid(0x0),\r
fListQAtofhmpid(0x0),\r
fListQAtpc(0x0),\r
fListQAtrd(0x0),\r
fListQAtof(0x0),\r
+fListQAt0(0x0),\r
fListQAemcal(0x0),\r
fListQAhmpid(0x0),\r
fListQAtofhmpid(0x0),\r
fListQAtof=new TList;\r
fListQAtof->SetOwner();\r
fListQAtof->SetName("TOF");\r
+\r
+ fListQAt0=new TList;\r
+ fListQAt0->SetOwner();\r
+ fListQAt0->SetName("T0");\r
\r
fListQAemcal=new TList;\r
fListQAemcal->SetOwner();\r
fListQA->Add(fListQAtpc);\r
fListQA->Add(fListQAtrd);\r
fListQA->Add(fListQAtof);\r
+ fListQA->Add(fListQAt0);\r
fListQA->Add(fListQAemcal);\r
fListQA->Add(fListQAhmpid);\r
fListQA->Add(fListQAtpctof);\r
SetupTPCqa();\r
SetupTRDqa();\r
SetupTOFqa();\r
+ SetupT0qa();\r
SetupEMCALqa();\r
SetupHMPIDqa();\r
SetupTPCTOFqa();\r
FillTOFqa();\r
FillEMCALqa();\r
FillHMPIDqa();\r
+ FillT0qa();\r
\r
//combined detector QA\r
FillTPCTOFqa();\r
} else {\r
((TH1F*)fListQAtof->FindObject("hNsigma_TOF_Pion_T0-Best"))->Fill(nsigma);\r
}\r
+ if (mask & 0x1) { //at least TOF-T0 present\r
+ Double_t delta=0;\r
+ (void)fPIDResponse->GetSignalDelta((AliPIDResponse::EDetector)AliPIDResponse::kTOF,track,(AliPID::EParticleType)AliPID::kPion,delta);\r
+ ((TH1F*)fListQAtof->FindObject("hDelta_TOF_Pion"))->Fill(delta);\r
+ }\r
}\r
\r
Double_t res = (Double_t)fPIDResponse->GetTOFResponse().GetStartTimeRes(mom);\r
}\r
}\r
\r
+//______________________________________________________________________________\r
+void AliAnalysisTaskPIDqa::FillT0qa()\r
+{\r
+ //\r
+ // Fill TOF information\r
+ //\r
+ AliVEvent *event=InputEvent();\r
+\r
+ Int_t ntracks=event->GetNumberOfTracks();\r
+\r
+ Int_t tracksAtT0 = 0;\r
+\r
+ for(Int_t itrack = 0; itrack < ntracks; itrack++){\r
+ AliVTrack *track=(AliVTrack*)event->GetTrack(itrack);\r
+\r
+ //\r
+ //basic track cuts\r
+ //\r
+ ULong_t status=track->GetStatus();\r
+ // TPC refit + ITS refit +\r
+ if (!((status & AliVTrack::kTPCrefit) == AliVTrack::kTPCrefit) ||\r
+ !((status & AliVTrack::kITSrefit) == AliVTrack::kITSrefit) ) continue;\r
+ Float_t nCrossedRowsTPC = track->GetTPCClusterInfo(2,1);\r
+ Float_t ratioCrossedRowsOverFindableClustersTPC = 1.0;\r
+ if (track->GetTPCNclsF()>0) {\r
+ ratioCrossedRowsOverFindableClustersTPC = nCrossedRowsTPC/track->GetTPCNclsF();\r
+ }\r
+ if ( nCrossedRowsTPC<70 || ratioCrossedRowsOverFindableClustersTPC<.8 ) continue;\r
+\r
+ tracksAtT0++;\r
+ }\r
+\r
+ Bool_t t0A = kFALSE;\r
+ Bool_t t0C = kFALSE;\r
+ Bool_t t0And = kFALSE;\r
+ Double_t startTimeT0 = event->GetT0TOF(0); // AND\r
+ if (startTimeT0 < 90000) {\r
+ t0And = kTRUE;\r
+ ((TH1F*)fListQAt0->FindObject("hStartTimeAC_T0"))->Fill(startTimeT0);\r
+ }\r
+ startTimeT0 = event->GetT0TOF(1); // T0A \r
+ if (startTimeT0 < 90000) {\r
+ t0A = kTRUE;\r
+ ((TH1F*)fListQAt0->FindObject("hStartTimeA_T0"))->Fill(startTimeT0);\r
+ \r
+ }\r
+ startTimeT0 = event->GetT0TOF(2); // T0C \r
+ if (startTimeT0 < 90000) {\r
+ t0C = kTRUE;\r
+ ((TH1F*)fListQAt0->FindObject("hStartTimeC_T0"))->Fill(startTimeT0);\r
+ }\r
+ \r
+ ((TH1F* )fListQAt0->FindObject("hnTracksAt_T0"))->Fill(tracksAtT0);\r
+ if (t0A) ((TH1F*)fListQAt0->FindObject("hT0AEff"))->Fill(tracksAtT0);\r
+ if (t0C) ((TH1F*)fListQAt0->FindObject("hT0CEff"))->Fill(tracksAtT0);\r
+ if (t0And) ((TH1F*)fListQAt0->FindObject("hT0AndEff"))->Fill(tracksAtT0);\r
+ if (t0A || t0C) ((TH1F*)fListQAt0->FindObject("hT0OrEff"))->Fill(tracksAtT0);\r
+}\r
+\r
\r
//______________________________________________________________________________\r
void AliAnalysisTaskPIDqa::FillEMCALqa()\r
fListQAtof->Add(hNsigmaP);\r
}\r
\r
- // for Kaons PID we differentiate on Time Zero\r
TH1F *hnSigT0Fill = new TH1F("hNsigma_TOF_Pion_T0-Fill","TOF n#sigma (Pion) T0-FILL [0.75-1.25. GeV/c]",200,-10,10);\r
fListQAtof->Add(hnSigT0Fill);\r
TH1F *hnSigT0T0 = new TH1F("hNsigma_TOF_Pion_T0-T0","TOF n#sigma (Pion) T0-T0 [0.75-1.25 GeV/c]",200,-10,10);\r
fListQAtof->Add(hnSigT0TOF);\r
TH1F *hnSigT0Best = new TH1F("hNsigma_TOF_Pion_T0-Best","TOF n#sigma (Pion) T0-Best [0.75-1.25 GeV/c]",200,-10,10);\r
fListQAtof->Add(hnSigT0Best);\r
-\r
+ TH1F *hnDeltaPi = new TH1F("hDelta_TOF_Pion","DeltaT (Pion) [0.75-1.25 GeV/c]",50,-500,500);\r
+ fListQAtof->Add(hnDeltaPi);\r
+ \r
TH2F *hSig = new TH2F("hSigP_TOF",\r
"TOF signal vs. p;p [GeV]; TOF signal [ns]",\r
vX->GetNrows()-1,vX->GetMatrixArray(),\r
TH1F *hStartTimeResTOF = new TH1F("hStartTimeRes_TOF","StartTime resolution [ps]",100,0,500);\r
fListQAtof->Add(hStartTimeResTOF);\r
\r
- TH1F *hnTracksAtTOF = new TH1F("hnTracksAt_TOF","Matched tracks at TOF",20,0,20);\r
+ TH1F *hnTracksAtTOF = new TH1F("hnTracksAt_TOF","Matched tracks at TOF",100,0,100);\r
fListQAtof->Add(hnTracksAtTOF);\r
- TH1F *hT0MakerEff = new TH1F("hT0MakerEff","Events with T0-TOF vs nTracks",20,0,20);\r
+ TH1F *hT0MakerEff = new TH1F("hT0MakerEff","Events with T0-TOF vs nTracks",100,0,100);\r
fListQAtof->Add(hT0MakerEff);\r
\r
// this in principle should stay on a T0 PID QA, but are just the data prepared for TOF use\r
fListQAtof->Add(hStartTimeACT0);\r
}\r
\r
+\r
+//______________________________________________________________________________\r
+void AliAnalysisTaskPIDqa::SetupT0qa()\r
+{\r
+ //\r
+ // Create the T0 qa objects\r
+ //\r
+ \r
+ // these are similar to plots inside TOFqa, but these are for all events\r
+ TH1F *hStartTimeAT0 = new TH1F("hStartTimeA_T0","StartTime from T0A [ps]",1000,-1000,1000);\r
+ fListQAt0->Add(hStartTimeAT0);\r
+ TH1F *hStartTimeCT0 = new TH1F("hStartTimeC_T0","StartTime from T0C [ps]",1000,-1000,1000);\r
+ fListQAt0->Add(hStartTimeCT0);\r
+ TH1F *hStartTimeACT0 = new TH1F("hStartTimeAC_T0","StartTime from T0AC [ps]",1000,-1000,1000);;\r
+ fListQAt0->Add(hStartTimeACT0);\r
+\r
+ TH1F *hnTracksAtT0 = new TH1F("hnTracksAt_T0","Tracks for events selected for T0",100,0,100);\r
+ fListQAt0->Add(hnTracksAtT0);\r
+ TH1F *hT0AEff = new TH1F("hT0AEff","Events with T0A vs nTracks",100,0,100);\r
+ fListQAt0->Add(hT0AEff);\r
+ TH1F *hT0CEff = new TH1F("hT0CEff","Events with T0C vs nTracks",100,0,100);\r
+ fListQAt0->Add(hT0CEff);\r
+ TH1F *hT0AndEff = new TH1F("hT0AndEff","Events with T0AC (AND) vs nTracks",100,0,100);\r
+ fListQAt0->Add(hT0AndEff);\r
+ TH1F *hT0OrEff = new TH1F("hT0OrEff","Events with T0AC (OR) vs nTracks",100,0,100);\r
+ fListQAt0->Add(hT0OrEff);\r
+\r
+\r
+}\r
+\r
//______________________________________________________________________________\r
void AliAnalysisTaskPIDqa::SetupEMCALqa()\r
{\r