]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGHF/vertexingHF/AliAnalysisTaskSEHFQA.cxx
Updated treatment of TOF information + new plots for TOF start time (Pietro, Francesco)
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / AliAnalysisTaskSEHFQA.cxx
index a8d6f9c8be5364df5e501b65d8d2a3e511295d5f..66dc02761e17761a9d41a588b76930d7b9949aac 100644 (file)
@@ -39,6 +39,7 @@
 #include "AliESDVertex.h"
 #include "AliVertexerTracks.h"
 #include "AliPID.h"
+#include "AliPIDResponse.h"
 #include "AliTPCPIDResponse.h"
 #include "AliAODHandler.h"
 #include "AliAODEvent.h"
@@ -58,6 +59,7 @@
 #include "AliRDHFCutsDStartoKpipi.h"
 #include "AliRDHFCutsD0toKpi.h"
 #include "AliRDHFCutsLctopKpi.h"
+#include "AliRDHFCutsLctoV0.h"
 #include "AliInputEventHandler.h"
 
 #include "AliFlowEvent.h"
@@ -67,6 +69,9 @@
 
 #include "AliAnalysisTaskSEHFQA.h"
 
+using std::cout;
+using std::endl;
+
 ClassImp(AliAnalysisTaskSEHFQA)
 
 //____________________________________________________________________________
@@ -152,6 +157,9 @@ AliAnalysisTaskSEHFQA::AliAnalysisTaskSEHFQA(const char *name, AliAnalysisTaskSE
   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)
@@ -236,6 +244,13 @@ void AliAnalysisTaskSEHFQA::Init(){
       PostData(4,copycut);
     }
     break;
+  case kLambdactoV0:
+    {
+      AliRDHFCutsLctoV0* copycut=new AliRDHFCutsLctoV0(*(static_cast<AliRDHFCutsLctoV0*>(fCuts)));
+      // Post the data
+      PostData(4,copycut);
+    }
+    break;
 
   default:
     return;
@@ -292,6 +307,20 @@ void AliAnalysisTaskSEHFQA::UserCreateOutputObjects()
     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.);
 
@@ -342,6 +371,8 @@ void AliAnalysisTaskSEHFQA::UserCreateOutputObjects()
     fOutputPID->Add(hTOFflags);
     fOutputPID->Add(hTOFsig);
     fOutputPID->Add(hTPCsig);
+    fOutputPID->Add(hTOFstartTimeMask);
+    fOutputPID->Add(hTOFstartTimeRes);
     fOutputPID->Add(hTOFtime);
     fOutputPID->Add(hTOFtimeKaonHyptime);
     fOutputPID->Add(hTOFtimeKaonHyptimeAC);
@@ -407,10 +438,22 @@ void AliAnalysisTaskSEHFQA::UserCreateOutputObjects()
     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);
@@ -575,8 +618,22 @@ void AliAnalysisTaskSEHFQA::UserCreateOutputObjects()
     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");
@@ -626,7 +683,14 @@ void AliAnalysisTaskSEHFQA::UserCreateOutputObjects()
     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);
@@ -694,10 +758,22 @@ void AliAnalysisTaskSEHFQA::UserCreateOutputObjects()
     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);
 
@@ -808,6 +884,16 @@ void AliAnalysisTaskSEHFQA::UserExec(Option_t */*option*/)
          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) {
@@ -872,6 +958,16 @@ void AliAnalysisTaskSEHFQA::UserExec(Option_t */*option*/)
        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;
@@ -1130,9 +1226,24 @@ void AliAnalysisTaskSEHFQA::UserExec(Option_t */*option*/)
 
   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) {
@@ -1146,14 +1257,14 @@ void AliAnalysisTaskSEHFQA::UserExec(Option_t */*option*/)
     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;
@@ -1186,51 +1297,64 @@ void AliAnalysisTaskSEHFQA::UserExec(Option_t */*option*/)
        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")){ 
 
@@ -1239,21 +1363,16 @@ void AliAnalysisTaskSEHFQA::UserExec(Option_t */*option*/)
          ((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;
@@ -1331,7 +1450,7 @@ void AliAnalysisTaskSEHFQA::UserExec(Option_t */*option*/)
       } //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);
@@ -1353,7 +1472,28 @@ void AliAnalysisTaskSEHFQA::UserExec(Option_t */*option*/)
        }
 
        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();
@@ -1373,9 +1513,19 @@ void AliAnalysisTaskSEHFQA::UserExec(Option_t */*option*/)
        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
 
@@ -1404,7 +1554,18 @@ void AliAnalysisTaskSEHFQA::UserExec(Option_t */*option*/)
              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);