fOutputPID->SetName(GetOutputSlot(2)->GetContainer()->GetName());
//TOF pid
- TH1F* hTOFflags=new TH1F("hTOFflags","TOF flags",6,-0.5,5.5);
+ TH1F* hTOFflags=new TH1F("hTOFflags","TOF flags",7,-0.5,6.5);
hTOFflags->SetMinimum(0.);
hTOFflags->GetXaxis()->SetBinLabel(1,"All Tracks");
hTOFflags->GetXaxis()->SetBinLabel(2,"kTPCout");
hTOFflags->GetXaxis()->SetBinLabel(4,"kTIME");
hTOFflags->GetXaxis()->SetBinLabel(5,"kTOFpid");
hTOFflags->GetXaxis()->SetBinLabel(6,"kTOFmismatch");
+ hTOFflags->GetXaxis()->SetBinLabel(7,"kDetPidOK");
TString hname="hTOFsig";
TH1F* hTOFsig=new TH1F(hname.Data(),"Distribution of TOF signal;TOF time [ps];Entries", 100, -2.e3,40.e3);
hname="hTOFstartTimeRes";
TH1F* hTOFstartTimeRes=new TH1F(hname.Data(),"TOF start time resolution; Resolution (ps) ;Entries", 100, 0.,300.);
+ hname="hTOFstartTimeDistrib";
+ TH1F* hTOFstartTimeDistrib=new TH1F(hname.Data(),"TOF start time distribution; Start time ;Entries", 400, -1000.,1000.);
+
hname="hTOFtime";
TH1F* hTOFtime=new TH1F(hname.Data(),"Distribution of TOF time Kaon;TOF time(Kaon) [ps];Entries", 1000, 0.,50000.);
fOutputPID->Add(hTPCsig);
fOutputPID->Add(hTOFstartTimeMask);
fOutputPID->Add(hTOFstartTimeRes);
+ fOutputPID->Add(hTOFstartTimeDistrib);
fOutputPID->Add(hTOFtime);
fOutputPID->Add(hTOFtimeKaonHyptime);
fOutputPID->Add(hTOFtimeKaonHyptimeAC);
}
Bool_t isSimpleMode=fSimpleMode;
if(!arrayProng) {
- AliInfo("Branch not found! The output will contain only trak related histograms\n");
+ AliInfo("Branch not found! The output will contain only track related histograms\n");
isSimpleMode=kTRUE;
fNEntries->Fill(2);
}
delete [] pdgdaughters;
return;
}
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
+ AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
+
//AliPIDResponse* respF=pidHF->GetPidResponse();
AliTPCPIDResponse* tpcres=new AliTPCPIDResponse();
Bool_t oldPID=pidHF->GetOldPid();
//loop on tracks in the event
for (Int_t k=0;k<ntracks;k++){
AliAODTrack* track=aod->GetTrack(k);
+
+ // Track selection cuts
if(track->GetID()<0) continue;
+ Bool_t selTrack=kTRUE;
+ ULong_t trStatus=track->GetStatus();
+ if (!((trStatus & AliVTrack::kTPCrefit) == AliVTrack::kTPCrefit) ||
+ !((trStatus & AliVTrack::kITSrefit) == AliVTrack::kITSrefit)){
+ selTrack=kFALSE;
+ }
+ 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 ){
+ selTrack=kFALSE;
+ }
+
AliAODPid *pid = track->GetDetPid();
if(!pid && fDebug>1) cout<<"No AliAODPid found"<<endl;
//check TOF
TH1F* htmpfl=((TH1F*)fOutputPID->FindObject("hTOFflags"));
htmpfl->Fill(0.);
- if (track->GetStatus()&AliESDtrack::kTPCout) htmpfl->Fill(1.);
- if (track->GetStatus()&AliESDtrack::kTOFout) htmpfl->Fill(2.);
- if (track->GetStatus()&AliESDtrack::kTIME) htmpfl->Fill(3.);
- if (track->GetStatus()&AliESDtrack::kTOFpid) htmpfl->Fill(4.);
- if (track->GetStatus()&AliESDtrack::kTOFmismatch) htmpfl->Fill(5.);
+ if (trStatus&AliESDtrack::kTPCout) htmpfl->Fill(1.);
+ if (trStatus&AliESDtrack::kTOFout) htmpfl->Fill(2.);
+ if (trStatus&AliESDtrack::kTIME) htmpfl->Fill(3.);
+ if (trStatus&AliESDtrack::kTOFpid) htmpfl->Fill(4.);
+ if (trStatus&AliESDtrack::kTOFmismatch) htmpfl->Fill(5.);
+
+ Bool_t isTOFok=kFALSE;
+ if(pidResp){
+ Double_t prob[AliPID::kSPECIES];
+ if(pidResp->ComputeTOFProbability(track,AliPID::kSPECIES,prob)==AliPIDResponse::kDetPidOk){
+ isTOFok=kTRUE;
+ htmpfl->Fill(6.);
+ }
+ }
- if(pidHF && pidHF->CheckStatus(track,"TOF")){
+ if(selTrack && isTOFok){
Double_t tofTime=pid->GetTOFsignal();
AliTOFHeader* tofH=(AliTOFHeader*)aod->GetTOFHeader();
if (tofH && (TMath::Abs(tofRes[0]) <= 1.E-16) ) { // new AOD
// with new AOD we need to retrieve startTime, subtract it and retrieve correctly TOF PID resolutions *PA*
- AliTOFPIDResponse tofResp=pidHF->GetPidResponse()->GetTOFResponse();
+ AliTOFPIDResponse tofResp=pidResp->GetTOFResponse();
Double_t startTime = tofResp.GetStartTime(track->P());
Float_t startTimeRes = tofResp.GetStartTimeRes(track->P());
Int_t startTimeMask = tofResp.GetStartTimeMask(track->P());
+ ((TH1F*)fOutputPID->FindObject("hTOFstartTimeDistrib"))->Fill(startTime);
((TH1F*)fOutputPID->FindObject("hTOFstartTimeMask"))->Fill(startTimeMask);
((TH1F*)fOutputPID->FindObject("hTOFstartTimeRes"))->Fill(startTimeRes);
tofTime-=startTime;
if (pid->GetTOFsignal()< 0) ((TH1F*)fOutputPID->FindObject("hTOFsig"))->Fill(-1);
Double_t nsigma[3]={-10,-10,-10};
- pidHF->GetnSigmaTOF(track,(Int_t)AliPID::kPion,nsigma[0]);
- pidHF->GetnSigmaTOF(track,(Int_t)AliPID::kKaon,nsigma[1]);
- pidHF->GetnSigmaTOF(track,(Int_t)AliPID::kProton,nsigma[2]);
+ nsigma[0]=pidResp->NumberOfSigmasTOF(track,AliPID::kPion);
+ nsigma[1]=pidResp->NumberOfSigmasTOF(track,AliPID::kKaon);
+ nsigma[2]=pidResp->NumberOfSigmasTOF(track,AliPID::kProton);
((TH2F*)fOutputPID->FindObject("hTOFsigmaKSigPid"))->Fill(track->P(),nsigma[1]);
((TH2F*)fOutputPID->FindObject("hTOFsigmaPionSigPid"))->Fill(track->P(),nsigma[0]);