#include "AliESDVertex.h"
#include "AliVertexerTracks.h"
#include "AliPID.h"
+#include "AliPIDResponse.h"
#include "AliTPCPIDResponse.h"
#include "AliAODHandler.h"
#include "AliAODEvent.h"
#include "AliRDHFCutsDStartoKpipi.h"
#include "AliRDHFCutsD0toKpi.h"
#include "AliRDHFCutsLctopKpi.h"
+#include "AliRDHFCutsLctoV0.h"
#include "AliInputEventHandler.h"
#include "AliFlowEvent.h"
#include "AliAnalysisTaskSEHFQA.h"
+using std::cout;
+using std::endl;
+
ClassImp(AliAnalysisTaskSEHFQA)
//____________________________________________________________________________
case 5:
DefineOutput(4,AliRDHFCutsLctopKpi::Class()); //My private output
break;
+ case kLambdactoV0:
+ DefineOutput(4,AliRDHFCutsLctoV0::Class()); //My private output
+ break;
}
if (fOnOff[2]) {
// Output slot #5 writes into a TList container (AliCounterCollection)
PostData(4,copycut);
}
break;
+ case kLambdactoV0:
+ {
+ AliRDHFCutsLctoV0* copycut=new AliRDHFCutsLctoV0(*(static_cast<AliRDHFCutsLctoV0*>(fCuts)));
+ // Post the data
+ PostData(4,copycut);
+ }
+ break;
default:
return;
TString hname="hTOFsig";
TH1F* hTOFsig=new TH1F(hname.Data(),"Distribution of TOF signal;TOF time [ps];Entries", 100, -2.e3,40.e3);
+ hname="hTOFstartTimeMask";
+ TH1F* hTOFstartTimeMask=new TH1F(hname.Data(),"TOF start time mask; Mask ;Entries", 8, -0.5,7.5);
+ hTOFstartTimeMask->GetXaxis()->SetBinLabel(1,"FILL");
+ hTOFstartTimeMask->GetXaxis()->SetBinLabel(2,"TOF");
+ hTOFstartTimeMask->GetXaxis()->SetBinLabel(3,"T0A");
+ hTOFstartTimeMask->GetXaxis()->SetBinLabel(4,"TOF.and.T0A");
+ hTOFstartTimeMask->GetXaxis()->SetBinLabel(5,"T0C");
+ hTOFstartTimeMask->GetXaxis()->SetBinLabel(6,"TOF.and.T0C");
+ hTOFstartTimeMask->GetXaxis()->SetBinLabel(7,"T0AC");
+ hTOFstartTimeMask->GetXaxis()->SetBinLabel(8,"TOF.and.T0AC");
+
+ hname="hTOFstartTimeRes";
+ TH1F* hTOFstartTimeRes=new TH1F(hname.Data(),"TOF start time resolution; Resolution (ps) ;Entries", 100, 0.,300.);
+
hname="hTOFtime";
TH1F* hTOFtime=new TH1F(hname.Data(),"Distribution of TOF time Kaon;TOF time(Kaon) [ps];Entries", 1000, 0.,50000.);
fOutputPID->Add(hTOFflags);
fOutputPID->Add(hTOFsig);
fOutputPID->Add(hTPCsig);
+ fOutputPID->Add(hTOFstartTimeMask);
+ fOutputPID->Add(hTOFstartTimeRes);
fOutputPID->Add(hTOFtime);
fOutputPID->Add(hTOFtimeKaonHyptime);
fOutputPID->Add(hTOFtimeKaonHyptimeAC);
hname="hnLayerITS";
TH1F* hnLayerITS=new TH1F(hname.Data(),"Number of tracks with point in layer;ITS layer;",7,-1.5,5.5);
hnLayerITS->GetXaxis()->SetBinLabel(1,"n tracks");
+ hnLayerITS->GetXaxis()->SetBinLabel(2,"SPDin");
+ hnLayerITS->GetXaxis()->SetBinLabel(3,"SPDout");
+ hnLayerITS->GetXaxis()->SetBinLabel(4,"SDDin");
+ hnLayerITS->GetXaxis()->SetBinLabel(5,"SDDout");
+ hnLayerITS->GetXaxis()->SetBinLabel(6,"SSDin");
+ hnLayerITS->GetXaxis()->SetBinLabel(7,"SSDout");
hname="hnLayerITSsa";
TH1F* hnLayerITSsa=new TH1F(hname.Data(),"Number of tracks with point in layer;ITS layer;",7,-1.5,5.5);
hnLayerITSsa->GetXaxis()->SetBinLabel(1,"n tracks");
+ hnLayerITSsa->GetXaxis()->SetBinLabel(2,"SPDin");
+ hnLayerITSsa->GetXaxis()->SetBinLabel(3,"SPDout");
+ hnLayerITSsa->GetXaxis()->SetBinLabel(4,"SDDin");
+ hnLayerITSsa->GetXaxis()->SetBinLabel(5,"SDDout");
+ hnLayerITSsa->GetXaxis()->SetBinLabel(6,"SSDin");
+ hnLayerITSsa->GetXaxis()->SetBinLabel(7,"SSDout");
hname="hnClsSPD";
TH1F* hnClsSPD=new TH1F(hname.Data(),"Distribution of number of SPD clusters;nSPDcls;Entries",3,-0.5,2.5);
evselection->AddRubric("evnonsel","zvtx");
evselection->Init();
- TH1F* hzvtx=new TH1F("hzvtx", "Distribution of z_{VTX};z_{VTX} [cm];Entries",100,-20,20);
-
+ TH1F* hxvtx=new TH1F("hxvtx", "Distribution of x_{VTX};x_{VTX} [cm];Entries",100,-1,1);
+ TH1F* hyvtx=new TH1F("hyvtx", "Distribution of y_{VTX};y_{VTX} [cm];Entries",100,-1,1);
+ TH1F* hzvtx=new TH1F("hzvtx", "Distribution of z_{VTX};z_{VTX} [cm];Entries",100,-30,30);
+ TH1F* hxvtxSelEv=new TH1F("hxvtxSelEv", "Distribution of x_{VTX} Selected Ev;x_{VTX} [cm];Entries",100,-1,1);
+ TH1F* hyvtxSelEv=new TH1F("hyvtxSelEv", "Distribution of y_{VTX} Selected Ev;y_{VTX} [cm];Entries",100,-1,1);
+ TH1F* hzvtxSelEv=new TH1F("hzvtxSelEv", "Distribution of z_{VTX} Selected Ev;z_{VTX} [cm];Entries",100,-30,30);
+ TH1F* hWhichVert=new TH1F("hWhichVert","Vertex Type",4,-1.5,2.5);
+ hWhichVert->GetXaxis()->SetBinLabel(1,"Not found");
+ hWhichVert->GetXaxis()->SetBinLabel(2,"Track");
+ hWhichVert->GetXaxis()->SetBinLabel(3,"SPD-3D");
+ hWhichVert->GetXaxis()->SetBinLabel(4,"SPD-z");
+ TH1F* hWhichVertSelEv=new TH1F("hWhichVertSelEv","Vertex Type",4,-1.5,2.5);
+ hWhichVertSelEv->GetXaxis()->SetBinLabel(1,"Not found");
+ hWhichVertSelEv->GetXaxis()->SetBinLabel(2,"Track");
+ hWhichVertSelEv->GetXaxis()->SetBinLabel(3,"SPD-3D");
+ hWhichVertSelEv->GetXaxis()->SetBinLabel(4,"SPD-z");
TH2F* hTrigCent=new TH2F("hTrigCent","Centrality vs. Trigger types",12,-1.5,10.5,12,-10,110);
hTrigCent->GetXaxis()->SetBinLabel(1,"All");
trigCounter->Init();
fOutputEvSelection->Add(evselection);
+ fOutputEvSelection->Add(hxvtx);
+ fOutputEvSelection->Add(hyvtx);
fOutputEvSelection->Add(hzvtx);
+ fOutputEvSelection->Add(hxvtxSelEv);
+ fOutputEvSelection->Add(hyvtxSelEv);
+ fOutputEvSelection->Add(hzvtxSelEv);
+ fOutputEvSelection->Add(hWhichVert);
+ fOutputEvSelection->Add(hWhichVertSelEv);
fOutputEvSelection->Add(hTrigCent);
fOutputEvSelection->Add(hTrigMul);
fOutputEvSelection->Add(hTrigCentSel);
hCentVsMultRPS->GetYaxis()->SetTitle("Centrality");
fOutputFlowObs->Add(hCentVsMultRPS);
}
-// AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
-// AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
-// AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
-// fCuts->GetPidHF()->SetPidResponse(pidResp);
+
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
+ AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
+ if (fCuts->GetIsUsePID() && fDecayChannel==kLambdactoV0) {
+ fCuts->GetPidHF()->SetPidResponse(pidResp);
+ AliRDHFCutsLctoV0* lccuts=dynamic_cast<AliRDHFCutsLctoV0*>(fCuts);
+ if(lccuts){
+ lccuts->GetPidV0pos()->SetPidResponse(pidResp);
+ lccuts->GetPidV0neg()->SetPidResponse(pidResp);
+ fCuts->GetPidHF()->SetOldPid(kFALSE);
+ lccuts->GetPidV0pos()->SetOldPid(kFALSE);
+ lccuts->GetPidV0neg()->SetOldPid(kFALSE);
+ }
+ }
+
// Post the data
PostData(1,fNEntries);
pdgdaughters[2]=211;//pi
}
break;
+ case kLambdactoV0:
+ arrayProng=(TClonesArray*)aodFromExt->GetList()->FindObject("CascadesHF");
+ pdg=4122;
+ if(fReadMC){
+ pdgdaughters =new Int_t[3];
+ pdgdaughters[0]=2212;//p
+ pdgdaughters[1]=211;//pi
+ pdgdaughters[2]=211;//pi
+ }
+ break;
}
}
} else if(aod) {
pdgdaughters[2]=211;//pi
}
break;
+ case kLambdactoV0:
+ arrayProng=(TClonesArray*)aod->GetList()->FindObject("CascadesHF");
+ pdg=4122;
+ if(fReadMC){
+ pdgdaughters =new Int_t[3];
+ pdgdaughters[0]=2212;//p
+ pdgdaughters[1]=211;//pi
+ pdgdaughters[2]=211;//pi
+ }
+ break;
}
}
Bool_t isSimpleMode=fSimpleMode;
if(fOnOff[3]){
const AliVVertex *vertex = aod->GetPrimaryVertex();
+ Double_t xvtx=vertex->GetX();
+ Double_t yvtx=vertex->GetY();
Double_t zvtx=vertex->GetZ();
- if(evSelected || (!evSelected && TMath::Abs(zvtx) > 10.))
+ Int_t vtxTyp=0;
+ if(vertex->GetNContributors()<=0) vtxTyp=-1;
+ TString title=vertex->GetTitle();
+ if(title.Contains("Z")) vtxTyp=3;
+ if(title.Contains("3D")) vtxTyp=2;
+ ((TH1F*)fOutputEvSelection->FindObject("hxvtx"))->Fill(xvtx);
+ ((TH1F*)fOutputEvSelection->FindObject("hyvtx"))->Fill(yvtx);
((TH1F*)fOutputEvSelection->FindObject("hzvtx"))->Fill(zvtx);
+ ((TH1F*)fOutputEvSelection->FindObject("hWhichVert"))->Fill(vtxTyp);
+ if(evSelected){
+ ((TH1F*)fOutputEvSelection->FindObject("hxvtxSelEv"))->Fill(xvtx);
+ ((TH1F*)fOutputEvSelection->FindObject("hyvtxSelEv"))->Fill(yvtx);
+ ((TH1F*)fOutputEvSelection->FindObject("hzvtxSelEv"))->Fill(zvtx);
+ ((TH1F*)fOutputEvSelection->FindObject("hWhichVertSelEv"))->Fill(vtxTyp);
+ }
}
if(!evSelected) {
delete [] pdgdaughters;
return;
}
- AliPIDResponse* respF=pidHF->GetPidResponse();
+ //AliPIDResponse* respF=pidHF->GetPidResponse();
AliTPCPIDResponse* tpcres=new AliTPCPIDResponse();
- if(pidHF->GetOldPid()){
+ Bool_t oldPID=pidHF->GetOldPid();
+ if(oldPID){
Double_t alephParameters[5];
pidHF->GetTPCBetheBlochParams(alephParameters);
tpcres->SetBetheBlochParameters(alephParameters[0],alephParameters[1],alephParameters[2],alephParameters[3],alephParameters[4]);
}
- Bool_t oldPID=pidHF->GetOldPid();
Int_t ntracks=0;
if (track->GetStatus()&AliESDtrack::kTOFmismatch) htmpfl->Fill(5.);
if(pidHF && pidHF->CheckStatus(track,"TOF")){
+ 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();
+ Double_t startTime = tofResp.GetStartTime(track->P());
+ Float_t startTimeRes = tofResp.GetStartTimeRes(track->P());
+ Int_t startTimeMask = tofResp.GetStartTimeMask(track->P());
+ ((TH1F*)fOutputPID->FindObject("hTOFstartTimeMask"))->Fill(startTimeMask);
+ ((TH1F*)fOutputPID->FindObject("hTOFstartTimeRes"))->Fill(startTimeRes);
+ tofTime-=startTime;
+ for (Int_t type=0;type<=AliPID::kSPECIES;type++) tofRes[type]=tofResp.GetExpectedSigma(track->P(),times[type],AliPID::ParticleMassZ(type));
+ }
((TH1F*)fOutputPID->FindObject("hTOFtime"))->Fill(times[AliPID::kProton]);
- ((TH2F*)fOutputPID->FindObject("hTOFtimeKaonHyptime"))->Fill(track->P(),pid->GetTOFsignal()-times[3]); //3 is kaon
- ((TH1F*)fOutputPID->FindObject("hTOFsig"))->Fill(pid->GetTOFsignal());
+ ((TH2F*)fOutputPID->FindObject("hTOFtimeKaonHyptime"))->Fill(track->P(),tofTime-times[3]); //3 is kaon
+ ((TH1F*)fOutputPID->FindObject("hTOFsig"))->Fill(tofTime);
if (pid->GetTOFsignal()< 0) ((TH1F*)fOutputPID->FindObject("hTOFsig"))->Fill(-1);
-
- // test TOF sigma PID
- if (!oldPID && respF && tofRes[2] != 0.) { // protection against 'old' AODs...
- Double_t nsigma[3]={respF->NumberOfSigmasTOF(track,AliPID::kPion),respF->NumberOfSigmasTOF(track,AliPID::kKaon),respF->NumberOfSigmasTOF(track,AliPID::kProton)};
- ((TH2F*)fOutputPID->FindObject("hTOFsigmaKSigPid"))->Fill(track->P(),nsigma[1]);
- ((TH2F*)fOutputPID->FindObject("hTOFsigmaPionSigPid"))->Fill(track->P(),nsigma[0]);
- ((TH2F*)fOutputPID->FindObject("hTOFsigmaProtonSigPid"))->Fill(track->P(),nsigma[2]);
-
- if(fReadMC){
- Int_t label=track->GetLabel();
- if(label<=0) continue;
- AliMCParticle* mcpart=(AliMCParticle*)mcArray->At(label);
- if(mcpart){
- Int_t abspdgcode=TMath::Abs(mcpart->PdgCode());
- if(abspdgcode==211) ((TH2F*)fOutputPID->FindObject("hTOFsigmaMCPionSigPid"))->Fill(track->P(),nsigma[0]);
- if(abspdgcode==321) ((TH2F*)fOutputPID->FindObject("hTOFsigmaMCKSigPid"))->Fill(track->P(),nsigma[1]);
- if(abspdgcode==2212) ((TH2F*)fOutputPID->FindObject("hTOFsigmaMCProtonSigPid"))->Fill(track->P(),nsigma[2]);
+ 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]);
+
+ ((TH2F*)fOutputPID->FindObject("hTOFsigmaKSigPid"))->Fill(track->P(),nsigma[1]);
+ ((TH2F*)fOutputPID->FindObject("hTOFsigmaPionSigPid"))->Fill(track->P(),nsigma[0]);
+ ((TH2F*)fOutputPID->FindObject("hTOFsigmaProtonSigPid"))->Fill(track->P(),nsigma[2]);
+ if(fReadMC){
+ Int_t label=track->GetLabel();
+ if(label<=0) continue;
+ AliMCParticle* mcpart=(AliMCParticle*)mcArray->At(label);
+ if(mcpart){
+ Int_t abspdgcode=TMath::Abs(mcpart->PdgCode());
+ if(abspdgcode==211) ((TH2F*)fOutputPID->FindObject("hTOFsigmaMCPionSigPid"))->Fill(track->P(),nsigma[0]);
+ if(abspdgcode==321) ((TH2F*)fOutputPID->FindObject("hTOFsigmaMCKSigPid"))->Fill(track->P(),nsigma[1]);
+ if(abspdgcode==2212) ((TH2F*)fOutputPID->FindObject("hTOFsigmaMCProtonSigPid"))->Fill(track->P(),nsigma[2]);
- }
}
+ }
- for (Int_t iS=2; iS<5; iS++){ //we plot TOF Pid resolution for 3-sigma identified particles
- if ( (TMath::Abs(times[iS]-pid->GetTOFsignal())/tofRes[iS])<3.){
- switch (iS) {
- case AliPID::kPion:
- ((TH1F*)fOutputPID->FindObject("hTOFsigPid3sigPion"))->Fill(tofRes[iS]);
- break;
- case AliPID::kKaon:
- ((TH1F*)fOutputPID->FindObject("hTOFsigPid3sigKaon"))->Fill(tofRes[iS]);
- break;
- case AliPID::kProton:
- ((TH1F*)fOutputPID->FindObject("hTOFsigPid3sigProton"))->Fill(tofRes[iS]);
- break;
- default:
- break;
- }
+ for (Int_t iS=2; iS<5; iS++){ //we plot TOF Pid resolution for 3-sigma identified particles
+ if ( TMath::Abs(nsigma[iS-2])<3.){
+ switch (iS) {
+ case AliPID::kPion:
+ ((TH1F*)fOutputPID->FindObject("hTOFsigPid3sigPion"))->Fill(tofRes[iS]);
+ break;
+ case AliPID::kKaon:
+ ((TH1F*)fOutputPID->FindObject("hTOFsigPid3sigKaon"))->Fill(tofRes[iS]);
+ break;
+ case AliPID::kProton:
+ ((TH1F*)fOutputPID->FindObject("hTOFsigPid3sigProton"))->Fill(tofRes[iS]);
+ break;
+ default:
+ break;
}
}
}
}//if TOF status
+ //}
if(pidHF && pidHF->CheckStatus(track,"TPC")){
((TH1F*)fOutputPID->FindObject("hTPCsig"))->Fill(TPCsignal);
((TH1F*)fOutputPID->FindObject("hTPCsigvsp"))->Fill(TPCp,TPCsignal);
//if (pidHF->IsKaonRaw(track, "TOF"))
- Double_t nsigma[3]={0,0,0};
- if(!oldPID){
- nsigma[0]=respF->NumberOfSigmasTPC(track,AliPID::kPion);
- nsigma[1]=respF->NumberOfSigmasTPC(track,AliPID::kKaon);
- nsigma[2]=respF->NumberOfSigmasTPC(track,AliPID::kProton);
- }
- if(!oldPID) ((TH2F*)fOutputPID->FindObject("hTPCsigmaK"))->Fill(TPCp,nsigma[1]);
- if (oldPID) ((TH2F*)fOutputPID->FindObject("hTPCsigmaK"))->Fill(TPCp,tpcres->GetNumberOfSigmas(TPCp,TPCsignal,track->GetTPCNcls(),AliPID::kKaon));
- //if (pidHF->IsPionRaw(track, "TOF"))
- if(oldPID) ((TH2F*)fOutputPID->FindObject("hTPCsigmaPion"))->Fill(TPCp,tpcres->GetNumberOfSigmas(TPCp,TPCsignal,track->GetTPCNcls(),AliPID::kPion));
- if(!oldPID) ((TH2F*)fOutputPID->FindObject("hTPCsigmaPion"))->Fill(TPCp,nsigma[0]);
- //if (pidHF->IsProtonRaw(track,"TOF"))
- if(oldPID) ((TH2F*)fOutputPID->FindObject("hTPCsigmaProton"))->Fill(TPCp,tpcres->GetNumberOfSigmas(TPCp,TPCsignal,track->GetTPCNcls(),AliPID::kProton));
- if(!oldPID) ((TH2F*)fOutputPID->FindObject("hTPCsigmaProton"))->Fill(TPCp,nsigma[2]);
+ Double_t nsigma[3]={-10,-10,-10};
+ pidHF->GetnSigmaTPC(track,(Int_t)AliPID::kPion,nsigma[0]);
+ pidHF->GetnSigmaTPC(track,(Int_t)AliPID::kKaon,nsigma[1]);
+ pidHF->GetnSigmaTPC(track,(Int_t)AliPID::kProton,nsigma[2]);
+ ((TH2F*)fOutputPID->FindObject("hTPCsigmaK"))->Fill(TPCp,nsigma[1]);
+
+ ((TH2F*)fOutputPID->FindObject("hTPCsigmaPion"))->Fill(TPCp,nsigma[0]);
+ ((TH2F*)fOutputPID->FindObject("hTPCsigmaProton"))->Fill(TPCp,nsigma[2]);
+
if(fReadMC){
Int_t label=track->GetLabel();
if(label<=0) continue;
} //fill track histos
} //end loop on tracks
- //fill once per event
+ //fill once per event
if(fOnOff[0]){
if (fReadMC) ((TH1F*)fOutputTrack->FindObject("hdistrFakeTr"))->Fill(isFakeTrack);
((TH1F*)fOutputTrack->FindObject("hdistrGoodTr"))->Fill(isGoodTrack);
}
if(fReadMC){
- Int_t labD = d->MatchToMC(pdg,mcArray,ndaugh,pdgdaughters);
+
+ Int_t labD = -1;
+ if (fDecayChannel==AliAnalysisTaskSEHFQA::kLambdactoV0 && (dynamic_cast<AliAODRecoCascadeHF*>(d))->Getv0()) {
+
+ Int_t pdgDgLctoV0bachelor[2]={310,2212};
+ Int_t pdgDgV0toDaughters[2]={211,211};
+ Int_t mcLabelK0S = (dynamic_cast<AliAODRecoCascadeHF*>(d))->MatchToMC(pdg,pdgDgLctoV0bachelor[0],pdgDgLctoV0bachelor,pdgDgV0toDaughters,mcArray,kTRUE); // Lc->K0S+p and cc
+ pdgDgLctoV0bachelor[0]=3122, pdgDgLctoV0bachelor[1]=211;
+ pdgDgV0toDaughters[0]=2212, pdgDgV0toDaughters[1]=211;
+ Int_t mcLabelLambda = (dynamic_cast<AliAODRecoCascadeHF*>(d))->MatchToMC(pdg,pdgDgLctoV0bachelor[0],pdgDgLctoV0bachelor,pdgDgV0toDaughters,mcArray,kTRUE); // Lc->Lambda+pi and cc
+ if (mcLabelK0S!=-1 || mcLabelLambda!=-1) AliInfo(Form("mcLabelK0S=%d - mcLabelLambda=%d",mcLabelK0S,mcLabelLambda));
+
+ if (mcLabelK0S!=-1 && mcLabelLambda!=-1)
+ AliInfo("Strange: current Lc->V0+bachelor candidate has two MC different labels!");
+ else if (mcLabelK0S>-1 && mcLabelLambda==-1)
+ labD = mcLabelK0S;
+ else if (mcLabelLambda>-1 && mcLabelK0S==-1)
+ labD = mcLabelLambda;
+ }
+ else
+ labD = d->MatchToMC(pdg,mcArray,ndaugh,pdgdaughters);
+
if(labD>=0){
AliAODMCParticle *partD = (AliAODMCParticle*)mcArray->At(labD);
Int_t label=partD->GetMother();
else fNEntries->Fill(6); //count the candidates (data)
for(Int_t id=0;id<ndaugh;id++){
-
//other histograms to be filled when the cut object is given
- AliAODTrack* track=(AliAODTrack*)d->GetDaughter(id);
+ AliAODTrack* track=0;
+
+ if (fDecayChannel==AliAnalysisTaskSEHFQA::kLambdactoV0 && (dynamic_cast<AliAODRecoCascadeHF*>(d))->Getv0()) {
+ if (id==0)
+ track=(AliAODTrack*)(dynamic_cast<AliAODRecoCascadeHF*>(d))->GetBachelor();
+ else if (id==1)
+ track=(AliAODTrack*)(dynamic_cast<AliAODRecoCascadeHF*>(d))->Getv0PositiveTrack();
+ else if (id==2)
+ track=(AliAODTrack*)(dynamic_cast<AliAODRecoCascadeHF*>(d))->Getv0NegativeTrack();
+ }
+ else
+ track=(AliAODTrack*)d->GetDaughter(id);
//track quality
if(pid){
Double_t times[5];
pid->GetIntegratedTimes(times);
- if(pidHF && pidHF->CheckStatus(track,"TOF")) ((TH2F*)fOutputPID->FindObject("hTOFtimeKaonHyptimeAC"))->Fill(track->P(),pid->GetTOFsignal()-times[AliPID::kKaon]);
+ if(pidHF && pidHF->CheckStatus(track,"TOF")){
+ Double_t tofTime=pid->GetTOFsignal();
+ AliTOFHeader* tofH=(AliTOFHeader*)aod->GetTOFHeader();
+ Double_t tofRes[AliPID::kSPECIES];
+ pid->GetTOFpidResolution(tofRes);
+ if (tofH && (TMath::Abs(tofRes[0]) <= 1.E-16) ) { // new AOD
+ AliTOFPIDResponse tofResp=pidHF->GetPidResponse()->GetTOFResponse();
+ Double_t startTime=tofResp.GetStartTime(track->P());
+ tofTime-=startTime;
+ }
+ ((TH2F*)fOutputPID->FindObject("hTOFtimeKaonHyptimeAC"))->Fill(track->P(),tofTime-times[AliPID::kKaon]);
+ }
if(pidHF && pidHF->CheckStatus(track,"TPC")) ((TH2F*)fOutputPID->FindObject("hTPCsigvspAC"))->Fill(pid->GetTPCmomentum(),pid->GetTPCsignal());
}
fNEntries->Fill(3);