]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisTaskESDfilter.cxx
Parameters set for centrality selection
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTaskESDfilter.cxx
index 2afc85c511adf7dcb09dc7e92ae4e6f79e331a7e..1c3b9fe2b2040227a62e7f00495a13636f72402a 100644 (file)
@@ -19,6 +19,7 @@
 #include <TTree.h>\r
 #include <TList.h>\r
 #include <TArrayI.h>\r
+#include <TParameter.h>\r
 #include <TRandom.h>\r
 #include <TParticle.h>\r
 #include <TFile.h>\r
 #include "AliCodeTimer.h"\r
 #include "AliESDtrackCuts.h"\r
 #include "AliESDpid.h"\r
+#include "AliV0vertexer.h"\r
+#include "AliCascadeVertexer.h"\r
 #include "Riostream.h"\r
+#include "AliExternalTrackParam.h"\r
+#include "AliTrackerBase.h"\r
+#include "TVector3.h"\r
+#include "AliTPCdEdxInfo.h"\r
 \r
 ClassImp(AliAnalysisTaskESDfilter)\r
 \r
 ////////////////////////////////////////////////////////////////////////\r
 \r
 AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter():\r
-    AliAnalysisTaskSE(),\r
-    fTrackFilter(0x0),\r
-    fKinkFilter(0x0),\r
-    fV0Filter(0x0),\r
-    fCascadeFilter(0x0),\r
-    fHighPthreshold(0),\r
-    fPtshape(0x0),\r
-    fEnableFillAOD(kTRUE),\r
-    fUsedTrack(0x0),\r
-    fUsedKink(0x0),\r
-    fUsedV0(0x0),\r
-    fAODTrackRefs(0x0),\r
-    fAODV0VtxRefs(0x0),\r
-    fAODV0Refs(0x0),\r
-    fMChandler(0x0),\r
-    fNumberOfTracks(0),\r
-    fNumberOfPositiveTracks(0),\r
-    fNumberOfV0s(0),\r
-    fNumberOfVertices(0),\r
-    fNumberOfCascades(0),\r
-    fNumberOfKinks(0),\r
-    fOldESDformat(kFALSE),\r
-    fPrimaryVertex(0x0),\r
+  AliAnalysisTaskSE(),\r
+  fTrackFilter(0x0),\r
+  fKinkFilter(0x0),\r
+  fV0Filter(0x0),\r
+  fCascadeFilter(0x0),\r
+  fHighPthreshold(0),\r
+  fPtshape(0x0),\r
+  fEnableFillAOD(kTRUE),\r
+  fUsedTrack(0x0),\r
+  fUsedKink(0x0),\r
+  fUsedV0(0x0),\r
+  fAODTrackRefs(0x0),\r
+  fAODV0VtxRefs(0x0),\r
+  fAODV0Refs(0x0),\r
+  fMChandler(0x0),\r
+  fNumberOfTracks(0),\r
+  fNumberOfPositiveTracks(0),\r
+  fNumberOfV0s(0),\r
+  fNumberOfVertices(0),\r
+  fNumberOfCascades(0),\r
+  fNumberOfKinks(0),\r
+  fOldESDformat(kFALSE),\r
+  fPrimaryVertex(0x0),\r
   fTPCConstrainedFilterMask(0),\r
   fHybridFilterMaskTPCCG(0),\r
   fWriteHybridTPCCOnly(kFALSE),\r
   fGlobalConstrainedFilterMask(0),\r
   fHybridFilterMaskGCG(0),\r
   fWriteHybridGCOnly(kFALSE),\r
-    fIsVZEROEnabled(kTRUE),\r
-    fIsTZEROEnabled(kTRUE),\r
-    fIsZDCEnabled(kTRUE),\r
-    fAreCascadesEnabled(kTRUE),\r
-    fAreV0sEnabled(kTRUE),\r
-    fAreKinksEnabled(kTRUE),\r
-    fAreTracksEnabled(kTRUE),\r
-    fArePmdClustersEnabled(kTRUE),\r
-    fAreCaloClustersEnabled(kTRUE),\r
-    fAreEMCALCellsEnabled(kTRUE),\r
-    fArePHOSCellsEnabled(kTRUE),\r
-    fAreTrackletsEnabled(kTRUE),\r
-    fESDpid(0x0),\r
-    fIsPidOwner(kFALSE),\r
-    fTimeZeroType(AliESDpid::kTOF_T0),\r
-    fTPCaloneTrackCuts(0)\r
+  fIsVZEROEnabled(kTRUE),\r
+  fIsTZEROEnabled(kTRUE),\r
+  fIsZDCEnabled(kTRUE),\r
+  fIsV0CascadeRecoEnabled(kFALSE),\r
+  fAreCascadesEnabled(kTRUE),\r
+  fAreV0sEnabled(kTRUE),\r
+  fAreKinksEnabled(kTRUE),\r
+  fAreTracksEnabled(kTRUE),\r
+  fArePmdClustersEnabled(kTRUE),\r
+  fAreCaloClustersEnabled(kTRUE),\r
+  fAreEMCALCellsEnabled(kTRUE),\r
+  fArePHOSCellsEnabled(kTRUE),\r
+  fAreEMCALTriggerEnabled(kTRUE),\r
+  fArePHOSTriggerEnabled(kTRUE),\r
+  fAreTrackletsEnabled(kTRUE),\r
+  fESDpid(0x0),\r
+  fIsPidOwner(kFALSE),\r
+  fTimeZeroType(AliESDpid::kTOF_T0),\r
+  fTPCaloneTrackCuts(0),\r
+  fDoPropagateTrackToEMCal(kTRUE)\r
 {\r
   // Default constructor\r
+    fV0Cuts[0] =  33.   ;   // max allowed chi2\r
+    fV0Cuts[1] =   0.1  ;   // min allowed impact parameter for the 1st daughter\r
+    fV0Cuts[2] =   0.1  ;   // min allowed impact parameter for the 2nd daughter\r
+    fV0Cuts[3] =   1.   ;   // max allowed DCA between the daughter tracks\r
+    fV0Cuts[4] =    .998;   // min allowed cosine of V0's pointing angle\r
+    fV0Cuts[5] =   0.9  ;   // min radius of the fiducial volume\r
+    fV0Cuts[6] = 100.   ;   // max radius of the fiducial volume\r
+\r
+    fCascadeCuts[0] =  33.   ; // max allowed chi2 (same as PDC07)\r
+    fCascadeCuts[1] =   0.05 ; // min allowed V0 impact parameter\r
+    fCascadeCuts[2] =   0.008; // "window" around the Lambda mass\r
+    fCascadeCuts[3] =   0.03 ; // min allowed bachelor's impact parameter\r
+    fCascadeCuts[4] =   0.3  ; // max allowed DCA between the V0 and the bachelor\r
+    fCascadeCuts[5] =   0.999; // min allowed cosine of the cascade pointing angle\r
+    fCascadeCuts[6] =   0.9  ; // min radius of the fiducial volume\r
+    fCascadeCuts[7] = 100.   ; // max radius of the fiducial volume\r
 }\r
 \r
 //______________________________________________________________________________\r
@@ -140,6 +167,7 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(const char* name):
     fIsVZEROEnabled(kTRUE),\r
     fIsTZEROEnabled(kTRUE),\r
     fIsZDCEnabled(kTRUE),\r
+    fIsV0CascadeRecoEnabled(kFALSE),\r
     fAreCascadesEnabled(kTRUE),\r
     fAreV0sEnabled(kTRUE),\r
     fAreKinksEnabled(kTRUE),\r
@@ -148,13 +176,36 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(const char* name):
     fAreCaloClustersEnabled(kTRUE),\r
     fAreEMCALCellsEnabled(kTRUE),\r
     fArePHOSCellsEnabled(kTRUE),\r
-    fAreTrackletsEnabled(kTRUE),\r
+               fAreEMCALTriggerEnabled(kTRUE),\r
+               fArePHOSTriggerEnabled(kTRUE),\r
+               fAreTrackletsEnabled(kTRUE),\r
     fESDpid(0x0),\r
     fIsPidOwner(kFALSE),\r
     fTimeZeroType(AliESDpid::kTOF_T0),\r
-    fTPCaloneTrackCuts(0)\r
+    fTPCaloneTrackCuts(0),\r
+  fDoPropagateTrackToEMCal(kTRUE)\r
 {\r
   // Constructor\r
+\r
+    fV0Cuts[0] =  33.   ;   // max allowed chi2\r
+    fV0Cuts[1] =   0.1  ;   // min allowed impact parameter for the 1st daughter\r
+    fV0Cuts[2] =   0.1  ;   // min allowed impact parameter for the 2nd daughter\r
+    fV0Cuts[3] =   1.   ;   // max allowed DCA between the daughter tracks\r
+    fV0Cuts[4] =    .998;   // min allowed cosine of V0's pointing angle\r
+    fV0Cuts[5] =   0.9  ;   // min radius of the fiducial volume\r
+    fV0Cuts[6] = 100.   ;   // max radius of the fiducial volume\r
+\r
+    fCascadeCuts[0] =  33.   ; // max allowed chi2 (same as PDC07)\r
+    fCascadeCuts[1] =   0.05 ; // min allowed V0 impact parameter\r
+    fCascadeCuts[2] =   0.008; // "window" around the Lambda mass\r
+    fCascadeCuts[3] =   0.03 ; // min allowed bachelor's impact parameter\r
+    fCascadeCuts[4] =   0.3  ; // max allowed DCA between the V0 and the bachelor\r
+    fCascadeCuts[5] =   0.999; // min allowed cosine of the cascade pointing angle\r
+    fCascadeCuts[6] =   0.9  ; // min radius of the fiducial volume\r
+    fCascadeCuts[7] = 100.   ; // max radius of the fiducial volume\r
+\r
+\r
+\r
 }\r
 AliAnalysisTaskESDfilter::~AliAnalysisTaskESDfilter(){\r
     if(fIsPidOwner) delete fESDpid;\r
@@ -194,14 +245,17 @@ void AliAnalysisTaskESDfilter::PrintTask(Option_t *option, Int_t indent) const
   \r
   TString spaces(' ',indent+3);\r
   \r
-  cout << spaces.Data() << Form("Cascades     are %s",fAreCascadesEnabled ? "ENABLED":"DISABLED") << endl;\r
-  cout << spaces.Data() << Form("V0s          are %s",fAreV0sEnabled ? "ENABLED":"DISABLED") << endl;\r
-  cout << spaces.Data() << Form("Kinks        are %s",fAreKinksEnabled ? "ENABLED":"DISABLED") << endl;\r
-  cout << spaces.Data() << Form("Tracks       are %s",fAreTracksEnabled ? "ENABLED":"DISABLED") << endl;\r
-  cout << spaces.Data() << Form("PmdClusters  are %s",fArePmdClustersEnabled ? "ENABLED":"DISABLED") << endl;\r
-  cout << spaces.Data() << Form("CaloClusters are %s",fAreCaloClustersEnabled ? "ENABLED":"DISABLED") << endl;\r
-  cout << spaces.Data() << Form("EMCAL cells  are %s",fAreEMCALCellsEnabled ? "ENABLED":"DISABLED") << endl;\r
-  cout << spaces.Data() << Form("Tracklets    are %s",fAreTrackletsEnabled ? "ENABLED":"DISABLED") << endl;  \r
+       cout << spaces.Data() << Form("Cascades       are %s",fAreCascadesEnabled ? "ENABLED":"DISABLED") << endl;\r
+       cout << spaces.Data() << Form("V0s            are %s",fAreV0sEnabled ? "ENABLED":"DISABLED") << endl;\r
+       cout << spaces.Data() << Form("Kinks          are %s",fAreKinksEnabled ? "ENABLED":"DISABLED") << endl;\r
+       cout << spaces.Data() << Form("Tracks         are %s",fAreTracksEnabled ? "ENABLED":"DISABLED") << endl;\r
+       cout << spaces.Data() << Form("PmdClusters    are %s",fArePmdClustersEnabled ? "ENABLED":"DISABLED") << endl;\r
+       cout << spaces.Data() << Form("CaloClusters   are %s",fAreCaloClustersEnabled ? "ENABLED":"DISABLED") << endl;\r
+  cout << spaces.Data() << Form("EMCAL cells    are %s",fAreEMCALCellsEnabled ? "ENABLED":"DISABLED") << endl;\r
+       cout << spaces.Data() << Form("EMCAL triggers are %s",fAreEMCALTriggerEnabled ? "ENABLED":"DISABLED") << endl;\r
+       cout << spaces.Data() << Form("PHOS triggers  are %s",fArePHOSTriggerEnabled ? "ENABLED":"DISABLED") << endl;\r
+       cout << spaces.Data() << Form("Tracklets      are %s",fAreTrackletsEnabled ? "ENABLED":"DISABLED") << endl;  \r
+       cout << spaces.Data() << Form("PropagateTrackToEMCal  is %s", fDoPropagateTrackToEMCal ? "ENABLED":"DISABLED") << endl; \r
 }\r
 \r
 //______________________________________________________________________________\r
@@ -337,6 +391,7 @@ AliAODHeader* AliAnalysisTaskESDfilter::ConvertHeader(const AliESDEvent& esd)
 //______________________________________________________________________________\r
 void AliAnalysisTaskESDfilter::ConvertCascades(const AliESDEvent& esd) \r
 {\r
+\r
   // Convert the cascades part of the ESD.\r
   // Return the number of cascades\r
  \r
@@ -1219,7 +1274,7 @@ void AliAnalysisTaskESDfilter::ConvertGlobalConstrainedTracks(const AliESDEvent&
     // get the DCA to the vertex:\r
     esdTrack->GetImpactParameters(dDCA,cDCA);\r
 \r
-    esdTrack->GetConstrainedPxPyPz(p);\r
+    if (!esdTrack->GetConstrainedPxPyPz(p)) continue;\r
 \r
 \r
     Float_t pT = exParamGC->Pt();\r
@@ -1285,6 +1340,7 @@ void AliAnalysisTaskESDfilter::ConvertTracks(const AliESDEvent& esd)
   const AliESDVertex *vtx = esd.GetPrimaryVertex();\r
   Double_t p[3] = { 0. };\r
   Double_t pos[3] = { 0. };\r
+  Double_t trkPos[3] = {0.,0.,0.};\r
   Double_t covTr[21] = { 0. };\r
   Double_t pid[10] = { 0. };\r
   AliAODTrack* aodTrack(0x0);\r
@@ -1334,6 +1390,31 @@ void AliAnalysisTaskESDfilter::ConvertTracks(const AliESDEvent& esd)
     if(esdTrack->IsEMCAL()) aodTrack->SetEMCALcluster(esdTrack->GetEMCALcluster());\r
     if(esdTrack->IsPHOS())  aodTrack->SetPHOScluster(esdTrack->GetPHOScluster());\r
 \r
+    //Perform progagation of tracks if needed\r
+    if(fDoPropagateTrackToEMCal)\r
+      {\r
+       Double_t EMCalEta, EMCalPhi;\r
+       Double_t trkphi = esdTrack->Phi()*TMath::RadToDeg();\r
+       if(TMath::Abs(esdTrack->Eta())<0.9 && trkphi > 10 && trkphi < 250 )\r
+         {\r
+           AliExternalTrackParam *trkParam = const_cast<AliExternalTrackParam*>(esdTrack->GetInnerParam());\r
+           if(trkParam)\r
+             {\r
+               AliExternalTrackParam trkParamTmp(*trkParam);\r
+               if(AliTrackerBase::PropagateTrackToBxByBz(&trkParamTmp, 430, esdTrack->GetMass(), 20, kTRUE, 0.8, -1))\r
+                 {\r
+                   trkParamTmp.GetXYZ(trkPos);\r
+                   TVector3 trkPosVec(trkPos[0],trkPos[1],trkPos[2]);\r
+                   EMCalEta = trkPosVec.Eta();\r
+                   EMCalPhi = trkPosVec.Phi();\r
+                   if(EMCalPhi<0)  EMCalPhi += 2*TMath::Pi();\r
+                   esdTrack->SetTrackPhiEtaOnEMCal(EMCalPhi,EMCalEta);\r
+                 }\r
+             }\r
+         }\r
+      }\r
+    aodTrack->SetTrackPhiEtaOnEMCal(esdTrack->GetTrackPhiOnEMCal(),esdTrack->GetTrackEtaOnEMCal());\r
+\r
     fAODTrackRefs->AddAt(aodTrack, nTrack);\r
     \r
     \r
@@ -1365,6 +1446,7 @@ void AliAnalysisTaskESDfilter::ConvertPmdClusters(const AliESDEvent& esd)
   }\r
 }\r
 \r
+\r
 //______________________________________________________________________________\r
 void AliAnalysisTaskESDfilter::ConvertCaloClusters(const AliESDEvent& esd)\r
 {\r
@@ -1413,20 +1495,106 @@ void AliAnalysisTaskESDfilter::ConvertCaloClusters(const AliESDEvent& esd)
 \r
     caloCluster->SetTrackDistance(cluster->GetTrackDx(), cluster->GetTrackDz());\r
     \r
+    Int_t nMatchCount = 0;\r
     TArrayI* matchedT =        cluster->GetTracksMatched();\r
     if (fNumberOfTracks>0 && matchedT && cluster->GetTrackMatchedIndex() >= 0) {       \r
       for (Int_t im = 0; im < matchedT->GetSize(); im++) {\r
         Int_t iESDtrack = matchedT->At(im);;\r
         if (fAODTrackRefs->At(iESDtrack) != 0) {\r
           caloCluster->AddTrackMatched((AliAODTrack*)fAODTrackRefs->At(iESDtrack));\r
+         nMatchCount++;\r
         }\r
       }\r
     }\r
+    if(nMatchCount==0)\r
+      caloCluster->SetTrackDistance(-999,-999);\r
     \r
   } \r
   caloClusters.Expand(jClusters); // resize TObjArray to 'remove' slots for pseudo clusters     \r
 }\r
 \r
+//______________________________________________________________________________\r
+void AliAnalysisTaskESDfilter::ConvertCaloTrigger(TString calo, const AliESDEvent& esd)\r
+{\r
+       AliCodeTimerAuto("",0);\r
+               \r
+       if (calo == "PHOS") \r
+       {\r
+         AliAODCaloTrigger &aodTrigger = *(AODEvent()->GetCaloTrigger(calo));\r
+         AliESDCaloTrigger &esdTrigger = *(esd.GetCaloTrigger(calo));\r
+\r
+         aodTrigger.Allocate(esdTrigger.GetEntries());\r
+         esdTrigger.Reset();\r
+\r
+         Float_t a;\r
+         Int_t tmod,tabsId;\r
+\r
+         while (esdTrigger.Next()) {\r
+           esdTrigger.GetPosition(tmod,tabsId);\r
+           esdTrigger.GetAmplitude(a);\r
+           aodTrigger.Add(tmod,tabsId,a,0.,(Int_t*)NULL,0,0,0);\r
+         }\r
+\r
+         return;\r
+       }\r
+                       \r
+       AliAODHandler *aodHandler = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()); \r
+                       \r
+       if (aodHandler)\r
+       {\r
+               TTree *aodTree = aodHandler->GetTree();\r
+                                       \r
+               if (aodTree)\r
+               {\r
+                       Int_t *type = esd.GetCaloTriggerType();\r
+                                                       \r
+                       for (Int_t i = 0; i < 8; i++) \r
+                       {\r
+                               aodTree->GetUserInfo()->Add(new TParameter<int>(Form("EMCALCaloTrigger%d",i), type[i]));\r
+                       }\r
+               }\r
+       }\r
+                                               \r
+       AliAODCaloTrigger &aodTrigger = *(AODEvent()->GetCaloTrigger(calo));\r
+                                               \r
+       AliESDCaloTrigger &esdTrigger = *(esd.GetCaloTrigger(calo));\r
+                                               \r
+       aodTrigger.Allocate(esdTrigger.GetEntries());\r
+                                               \r
+       esdTrigger.Reset();\r
+       while (esdTrigger.Next())\r
+       {         \r
+               Int_t px, py, ts, nTimes, times[10], b; \r
+               Float_t a, t;\r
+                                                               \r
+               esdTrigger.GetPosition(px, py);\r
+                                               \r
+               esdTrigger.GetAmplitude(a);\r
+               esdTrigger.GetTime(t);\r
+                                                               \r
+               esdTrigger.GetL0Times(times);\r
+               esdTrigger.GetNL0Times(nTimes);\r
+                                                               \r
+               esdTrigger.GetL1TimeSum(ts);\r
+                                                               \r
+               esdTrigger.GetTriggerBits(b);\r
+                                                               \r
+               aodTrigger.Add(px, py, a, t, times, nTimes, ts, b);\r
+       }\r
+                                                       \r
+       aodTrigger.SetL1Threshold(0, esdTrigger.GetL1Threshold(0));\r
+       aodTrigger.SetL1Threshold(1, esdTrigger.GetL1Threshold(1));\r
+                                                       \r
+       Int_t v0[2] = \r
+       {\r
+               esdTrigger.GetL1V0(0),\r
+               esdTrigger.GetL1V0(1)\r
+       };              \r
+                                                               \r
+       aodTrigger.SetL1V0(v0); \r
+       aodTrigger.SetL1FrameMask(esdTrigger.GetL1FrameMask());\r
+}\r
+\r
 //______________________________________________________________________________\r
 void AliAnalysisTaskESDfilter::ConvertEMCALCells(const AliESDEvent& esd)\r
 {\r
@@ -1767,6 +1935,33 @@ void AliAnalysisTaskESDfilter::ConvertTZERO(const AliESDEvent& esd)
   aodTzero->SetPileupFlag(esdTzero->GetPileupFlag());\r
   aodTzero->SetSatelliteFlag(esdTzero->GetSatellite()); \r
 \r
+  Float_t rawTime[24];\r
+  for(Int_t ipmt=0; ipmt<24; ipmt++)\r
+    rawTime[ipmt] = esdTzero->GetTimeFull(ipmt,0);\r
+   \r
+  Int_t idxOfFirstPmtA = -1,       idxOfFirstPmtC = -1;\r
+  Float_t timeOfFirstPmtA = 9999, timeOfFirstPmtC = 9999;\r
+  for(int ipmt=0;  ipmt<12; ipmt++){\r
+    if( rawTime[ipmt] > -200 && rawTime[ipmt] < timeOfFirstPmtC && rawTime[ipmt]!=0){\r
+      timeOfFirstPmtC = rawTime[ipmt];\r
+      idxOfFirstPmtC  = ipmt;\r
+    }\r
+  }\r
+  for(int ipmt=12; ipmt<24; ipmt++){\r
+    if( rawTime[ipmt] > -200 && rawTime[ipmt] < timeOfFirstPmtA && rawTime[ipmt]!=0 ){\r
+      timeOfFirstPmtA = rawTime[ipmt];\r
+      idxOfFirstPmtA  = ipmt;\r
+    }\r
+  }\r
+\r
+  if(idxOfFirstPmtA != -1 && idxOfFirstPmtC != -1){\r
+    //speed of light in cm/ns   TMath::C()*1e-7 \r
+    Float_t vertexraw = TMath::C()*1e-7 * (rawTime[idxOfFirstPmtA] - rawTime[idxOfFirstPmtC])/2;\r
+    aodTzero->SetT0VertexRaw( vertexraw );\r
+  }else{\r
+    aodTzero->SetT0VertexRaw(99999);\r
+  }\r
+\r
 }\r
 \r
 \r
@@ -1815,7 +2010,24 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD()
   AliCodeTimerAuto("",0);\r
   \r
   fOldESDformat = ( esd->GetAliESDOld() != 0x0 );\r
-  \r
\r
+      // Reconstruct cascades and V0 here\r
+  if (fIsV0CascadeRecoEnabled) {\r
+    esd->ResetCascades();\r
+    esd->ResetV0s();\r
+\r
+    AliV0vertexer lV0vtxer;\r
+    AliCascadeVertexer lCascVtxer;\r
+\r
+    lV0vtxer.SetCuts(fV0Cuts);\r
+    lCascVtxer.SetCuts(fCascadeCuts);\r
+\r
+\r
+    lV0vtxer.Tracks2V0vertices(esd);\r
+    lCascVtxer.V0sTracks2CascadeVertices(esd);\r
+  }\r
+\r
\r
   fNumberOfTracks = 0;\r
   fNumberOfPositiveTracks = 0;\r
   fNumberOfV0s = 0;\r
@@ -1941,8 +2153,13 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD()
   if ( fAreEMCALCellsEnabled )ConvertEMCALCells(*esd);\r
   \r
   if ( fArePHOSCellsEnabled )ConvertPHOSCells(*esd);\r
+       \r
+       if ( fAreEMCALTriggerEnabled )ConvertCaloTrigger(TString("EMCAL"), *esd);\r
+\r
+       if ( fArePHOSTriggerEnabled )ConvertCaloTrigger(TString("PHOS"), *esd);\r
   \r
   if ( fAreTrackletsEnabled ) ConvertTracklets(*esd);\r
+  if ( fIsZDCEnabled ) ConvertZDC(*esd);\r
   \r
   delete fAODTrackRefs; fAODTrackRefs=0x0;\r
   delete fAODV0VtxRefs; fAODV0VtxRefs=0x0;\r
@@ -2025,6 +2242,7 @@ void AliAnalysisTaskESDfilter::SetDetectorRawSignals(AliAODPid *aodpid, AliESDtr
 \r
  aodpid->SetTPCsignal(track->GetTPCsignal());\r
  aodpid->SetTPCsignalN(track->GetTPCsignalN());\r
+ if(track->GetTPCdEdxInfo()) aodpid->SetTPCdEdxInfo(track->GetTPCdEdxInfo());\r
 \r
  //n TRD planes = 6\r
  Int_t nslices = track->GetNumberOfTRDslices()*6;\r
@@ -2125,3 +2343,6 @@ void  AliAnalysisTaskESDfilter::PrintMCInfo(AliStack *pStack,Int_t label){
   }\r
   Printf("########################");\r
 }\r
+\r
+//______________________________________________________\r
+\r