]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGGA/CaloTasks/AliAnalysisTaskCaloFilter.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGGA / CaloTasks / AliAnalysisTaskCaloFilter.cxx
index 20a9770bc447788dce57c2ffce14c2d17bf5a6aa..e83ca504b19e8d5cfc01ab84795fc4083c4f578a 100644 (file)
@@ -37,6 +37,7 @@
 #include "AliVCluster.h"
 #include "AliVCaloCells.h"
 #include "AliVEventHandler.h"
+#include "AliAODHandler.h"
 #include "AliAnalysisManager.h"
 #include "AliInputEventHandler.h"
 
@@ -53,19 +54,22 @@ ClassImp(AliAnalysisTaskCaloFilter)
 AliAnalysisTaskCaloFilter::AliAnalysisTaskCaloFilter():
 AliAnalysisTaskSE("CaloFilterTask"), 
 fCaloFilter(0),           fEventSelection(), 
-fAcceptAllMBEvent(kFALSE),  fCorrect(kFALSE), 
+fAcceptAllMBEvent(kFALSE),fMBTriggerMask(AliVEvent::kMB), 
+fCorrect(kFALSE), 
 fEMCALGeo(0x0),           fEMCALGeoName("EMCAL_COMPLETE12SMV1"), 
 fEMCALRecoUtils(new AliEMCALRecoUtils),
 fLoadEMCALMatrices(kFALSE), //fLoadPHOSMatrices(kFALSE),
 fGeoMatrixSet(kFALSE),
 fConfigName(""),          fFillAODFile(kTRUE), 
+fFillMCParticles(kFALSE),
 fFillTracks(kFALSE),      fFillHybridTracks(kFALSE),
 fFillAllVertices(kFALSE), fFillv0s(kFALSE),  
 fFillVZERO(kFALSE),
 fEMCALEnergyCut(0.),      fEMCALNcellsCut (0),
 fPHOSEnergyCut(0.),       fPHOSNcellsCut (0), 
 fTrackPtCut(-1),
-fVzCut(100.),             fEvent(0x0),              
+fVzCut(100.),             fCheckEventVertex(kTRUE),
+fEvent(0x0),              
 fESDEvent(0x0),           fAODEvent(0x0)
 {
   // Default constructor
@@ -83,19 +87,22 @@ fESDEvent(0x0),           fAODEvent(0x0)
 AliAnalysisTaskCaloFilter::AliAnalysisTaskCaloFilter(const char* name):
 AliAnalysisTaskSE(name), 
 fCaloFilter(0),           fEventSelection(), 
-fAcceptAllMBEvent(kFALSE),  fCorrect(kFALSE),
+fAcceptAllMBEvent(kFALSE),fMBTriggerMask(AliVEvent::kMB), 
+fCorrect(kFALSE),
 fEMCALGeo(0x0),           fEMCALGeoName("EMCAL_COMPLETE12SMV1"), 
 fEMCALRecoUtils(new AliEMCALRecoUtils),
 fLoadEMCALMatrices(kFALSE), //fLoadPHOSMatrices(kFALSE),
 fGeoMatrixSet(kFALSE),
 fConfigName(""),          fFillAODFile(kTRUE),
+fFillMCParticles(kFALSE),
 fFillTracks(kFALSE),      fFillHybridTracks(kFALSE),
 fFillAllVertices(kFALSE), fFillv0s(kFALSE),
 fFillVZERO(kFALSE),
 fEMCALEnergyCut(0.),      fEMCALNcellsCut(0), 
 fPHOSEnergyCut(0.),       fPHOSNcellsCut(0), 
 fTrackPtCut(-1),
-fVzCut(100.),             fEvent(0x0),              
+fVzCut(100.),             fCheckEventVertex(kTRUE),
+fEvent(0x0),              
 fESDEvent(0x0),           fAODEvent(0x0)
 {
   // Constructor
@@ -124,9 +131,11 @@ Bool_t AliAnalysisTaskCaloFilter::AcceptEvent()
 {
   // Define conditions to accept the event to be filtered
   
+  if(!AcceptEventVertex()) return kFALSE;
+  
   Bool_t eventSel = kFALSE;
   
-  Bool_t isMB = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB);
+  Bool_t isMB = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fMBTriggerMask);
   
   if     ( isMB && fAcceptAllMBEvent )                eventSel = kTRUE; // accept any MB event
   
@@ -135,7 +144,7 @@ Bool_t AliAnalysisTaskCaloFilter::AcceptEvent()
   else if( fEventSelection[1] && AcceptEventPHOS () ) eventSel = kTRUE; // accept event depending on PHOS  activity
   
   else if( fEventSelection[2] && AcceptEventTrack() ) eventSel = kTRUE; // accept event depending on Track activity
-  
+    
   return eventSel ;
   
 }
@@ -159,18 +168,20 @@ Bool_t AliAnalysisTaskCaloFilter::AcceptEventEMCAL()
     
     if( ( clus->IsEMCAL() ) && ( clus->GetNCells() > fEMCALNcellsCut ) && ( clus->E() > fEMCALEnergyCut ) &&
        fEMCALRecoUtils->IsGoodCluster(clus,fEMCALGeo,caloCell,bc))
-    { 
+    {
       
-      if (fDebug > 0) printf("AliAnalysisTaskCaloFilter::AcceptEventEMCAL() - Accept :  E %2.2f > %2.2f, nCells %d > %d \n", 
-                             clus->E(), fEMCALEnergyCut, clus->GetNCells(), fEMCALNcellsCut);
+      AliDebug(1,Form("Accept :  E %2.2f > %2.2f, nCells %d > %d",
+                      clus->E(), fEMCALEnergyCut, clus->GetNCells(), fEMCALNcellsCut));
       
       return kTRUE;
     }
     
   }// loop
   
-  if (fDebug > 0)  printf("AliAnalysisTaskCaloFilter::AcceptEventEMCAL() - Reject \n");
-  
+  AliDebug(1,"Reject");
+
+  //printf("Fired %s\n",((AliESDEvent*)InputEvent())->GetFiredTriggerClasses().Data());
+
   return kFALSE;
   
 }  
@@ -193,15 +204,15 @@ Bool_t AliAnalysisTaskCaloFilter::AcceptEventPHOS()
     if( ( clus->IsPHOS() ) && ( clus->GetNCells() > fPHOSNcellsCut ) && ( clus->E() > fPHOSEnergyCut ))
     { 
       
-      if (fDebug > 0) printf("AliAnalysisTaskCaloFilter::AcceptEventPHOS() - Accept :  E %2.2f > %2.2f, nCells %d > %d \n", 
-                             clus->E(), fPHOSEnergyCut, clus->GetNCells(), fPHOSNcellsCut);
+      AliDebug(1,Form("Accept :  E %2.2f > %2.2f, nCells %d > %d",
+                      clus->E(), fPHOSEnergyCut, clus->GetNCells(), fPHOSNcellsCut));
       
       return kTRUE;
     }
     
   }// loop
   
-  if (fDebug > 0)  printf("AliAnalysisTaskCaloFilter::AcceptEventPHOS() - Reject \n");
+  AliDebug(1,"Reject");
   
   return kFALSE;
   
@@ -229,15 +240,14 @@ Bool_t AliAnalysisTaskCaloFilter::AcceptEventTrack()
     
     if(momentum.Pt() > fTrackPtCut) 
     {
-      if (fDebug > 0) printf("AliAnalysisTaskCaloFilter::AcceptEventTrack() - Accept :  pT %2.2f > %2.2f \n", 
-                             momentum.Pt(), fTrackPtCut);
+      AliDebug(1,Form("Accept :  pT %2.2f > %2.2f",momentum.Pt(), fTrackPtCut));
 
       return kTRUE;
     }
     
   } 
   
-  if (fDebug > 0)  printf("AliAnalysisTaskCaloFilter::AcceptEventTrack() - Reject \n");
+  AliDebug(1,"Reject");
   
   return kFALSE;
   
@@ -253,7 +263,8 @@ Bool_t AliAnalysisTaskCaloFilter::AcceptEventVertex()
   
   if(TMath::Abs(v[2]) > fVzCut) 
   {
-    if (fDebug > 0)  printf("AliAnalysisTaskCaloFilter::AcceptEventVertex() - Vz Reject \n");
+    AliDebug(1,Form("Vz Reject : vz %2.2f > %2.2f",v[2],fVzCut));
+    
     return kFALSE ;
   }
   
@@ -266,6 +277,8 @@ Bool_t AliAnalysisTaskCaloFilter::CheckForPrimaryVertex()
   //Check if the vertex was well reconstructed, copy from v0Reader of conversion group
   //It only works for ESDs
   
+  if(!fCheckEventVertex) return kTRUE;
+
   // AODs
   if(!fESDEvent) 
   {
@@ -277,7 +290,7 @@ Bool_t AliAnalysisTaskCaloFilter::CheckForPrimaryVertex()
        TMath::Abs(v[1]) < 1e-6 && 
        TMath::Abs(v[0]) < 1e-6 ) 
     {
-      if (fDebug > 0)  printf("AliAnalysisTaskCaloFilter::CheckForPrimaryVertex() - Reject \n");
+      AliDebug(1,"Reject v(0,0,0)");
       
       return kFALSE ;
     }
@@ -303,12 +316,13 @@ Bool_t AliAnalysisTaskCaloFilter::CheckForPrimaryVertex()
     if(fESDEvent->GetPrimaryVertexSPD()->GetNContributors() < 1) 
     {
       //      cout<<"bad vertex type::"<< fESDEvent->GetPrimaryVertex()->GetName() << endl;
-      if (fDebug > 0)  printf("AliAnalysisTaskCaloFilter::CheckForPrimaryVertex() - Reject \n");
+      AliDebug(1,"Reject, GetPrimaryVertexSPD()->GetNContributors() < 1");
+      
       return kFALSE;
     }
   }
   
-  if (fDebug > 0)  printf("AliAnalysisTaskCaloFilter::CheckForPrimaryVertex() - Reject \n");
+  AliDebug(1,"Reject, GetPrimaryVertexTracks()->GetNContributors() > 1");
   
   return kFALSE;
   
@@ -327,9 +341,11 @@ void AliAnalysisTaskCaloFilter::CorrectionsInEMCAL()
     {
       if(fLoadEMCALMatrices)
       {
-        printf("AliAnalysisTaskCaloFilter::UserExec() - Load user defined EMCAL geometry matrices\n");
-        for(Int_t mod=0; mod < (fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++){
-          if(fEMCALMatrix[mod]){
+        AliInfo("Load user defined EMCAL geometry matrices");
+        for(Int_t mod=0; mod < (fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
+        {
+          if(fEMCALMatrix[mod])
+          {
             if(DebugLevel() > 1) 
               fEMCALMatrix[mod]->Print();
             fEMCALGeo->SetMisalMatrix(fEMCALMatrix[mod],mod) ;  
@@ -339,26 +355,25 @@ void AliAnalysisTaskCaloFilter::CorrectionsInEMCAL()
       }//Load matrices
       else if(!gGeoManager)
       {
-        printf("AliAnalysisTaskCaloFilter::UserExec() - Get geo matrices from data\n");
+        AliInfo("Get geo matrices from data");
         //Still not implemented in AOD, just a workaround to be able to work at least with ESDs        
         if(!strcmp(InputEvent()->GetName(),"AliAODEvent")) 
         {
-          if(DebugLevel() > 1) 
-            printf("AliAnalysisTaskCaloFilter Use ideal geometry, values geometry matrix not kept in AODs.\n");
+          AliDebug(1,"Use ideal geometry, values geometry matrix not kept in AODs");
         }//AOD
         else 
         {      
-          if(DebugLevel() > 1) printf("AliAnalysisTaskCaloFilter Load Misaligned matrices. \n");
+          AliDebug(1,"Load Misaligned matrices");
           AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent()) ;
           if(!esd) 
           {
-            printf("AliAnalysisTaskCaloFilter::UserExec() - This event does not contain ESDs?");
+            AliInfo("This event does not contain ESDs?");
             return;
           }
           for(Int_t mod=0; mod < (fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
           {
-            //if(DebugLevel() > 1) 
-            esd->GetEMCALMatrix(mod)->Print();
+            if(DebugLevel() > 1)
+              esd->GetEMCALMatrix(mod)->Print();
             if(esd->GetEMCALMatrix(mod)) fEMCALGeo->SetMisalMatrix(esd->GetEMCALMatrix(mod),mod) ;
           } 
           fGeoMatrixSet=kTRUE;
@@ -377,17 +392,15 @@ void AliAnalysisTaskCaloFilter::CorrectionsInEMCAL()
       if(cluster->IsPHOS()) continue ;
       
       Float_t position[]={0,0,0};
-      if(DebugLevel() > 2)
-        printf("Check cluster %d for bad channels and close to border\n",cluster->GetID());
+      
+      AliDebug(1,Form("Check cluster %d for bad channels and close to border",cluster->GetID()));
+      
       if(fEMCALRecoUtils->ClusterContainsBadChannel(fEMCALGeo,cluster->GetCellsAbsId(), cluster->GetNCells())) continue;       
       
-      if(DebugLevel() > 2)
-      { 
-        printf("Filter, before  : i %d, E %f, dispersion %f, m02 %f, m20 %f, distToBad %f\n",iClust,cluster->E(),
-               cluster->GetDispersion(),cluster->GetM02(),cluster->GetM20(), cluster->GetDistanceToBadChannel());
-        cluster->GetPosition(position);
-        printf("Filter, before  : i %d, x %f, y %f, z %f\n",cluster->GetID(), position[0], position[1], position[2]);
-      }
+      AliDebug(2,Form("Filter, before  : i %d, E %f, dispersion %f, m02 %f, m20 %f, distToBad %f",iClust,cluster->E(),
+                      cluster->GetDispersion(),cluster->GetM02(),cluster->GetM20(), cluster->GetDistanceToBadChannel()));
+      cluster->GetPosition(position);
+      AliDebug(2,Form("Filter, before  : i %d, x %f, y %f, z %f",cluster->GetID(), position[0], position[1], position[2]));
       
       //Recalculate distance to bad channels, if new list of bad channels provided
       fEMCALRecoUtils->RecalculateClusterDistanceToBadChannel(fEMCALGeo, InputEvent()->GetEMCALCells(), cluster);
@@ -401,13 +414,10 @@ void AliAnalysisTaskCaloFilter::CorrectionsInEMCAL()
       
       fEMCALRecoUtils->RecalculateClusterPosition(fEMCALGeo, InputEvent()->GetEMCALCells(),cluster);
       
-      if(DebugLevel() > 2)
-      { 
-        printf("Filter, after   : i %d, E %f, dispersion %f, m02 %f, m20 %f, distToBad %f\n",cluster->GetID(),cluster->E(),
-               cluster->GetDispersion(),cluster->GetM02(),cluster->GetM20(), cluster->GetDistanceToBadChannel());
-        cluster->GetPosition(position);
-        printf("Filter, after   : i %d, x %f, y %f, z %f\n",cluster->GetID(), position[0], position[1], position[2]);
-      }    
+      AliDebug(2,Form("Filter, after   : i %d, E %f, dispersion %f, m02 %f, m20 %f, distToBad %f",cluster->GetID(),cluster->E(),
+                      cluster->GetDispersion(),cluster->GetM02(),cluster->GetM20(), cluster->GetDistanceToBadChannel()));
+      cluster->GetPosition(position);
+      AliDebug(1,Form("Filter, after   : i %d, x %f, y %f, z %f",cluster->GetID(), position[0], position[1], position[2]));
       
       cluster->SetE(fEMCALRecoUtils->CorrectClusterEnergyLinearity(cluster));
       
@@ -510,15 +520,13 @@ void AliAnalysisTaskCaloFilter::FillAODCaloClusters()
     Float_t dR = cluster->GetTrackDx();
     Float_t dZ = cluster->GetTrackDz();
     
-    if(DebugLevel() > 2)
-      printf("Original residuals : dZ %f, dR %f\n ",dZ, dR);
+    AliDebug(2,Form("Original residuals : dZ %f, dR %f",dZ, dR));
     
     //--------------------------------------------------------------
     //If EMCAL and corrections done, get the new matching parameters, do not copy noisy clusters
     if(cluster->IsEMCAL() && fCorrect)
     {
-      if(DebugLevel() > 2)
-        printf("Check cluster %d for bad channels and close to border\n",cluster->GetID());
+      AliDebug(2,Form("Check cluster %d for bad channels and close to border",cluster->GetID()));
       
       if(fEMCALRecoUtils->ClusterContainsBadChannel(fEMCALGeo,cluster->GetCellsAbsId(), cluster->GetNCells())) continue;       
       
@@ -528,11 +536,7 @@ void AliAnalysisTaskCaloFilter::FillAODCaloClusters()
       cluster->SetTrackDistance(dR,dZ);
     }
     
-    if(DebugLevel() > 2)
-    {
-      if(cluster->IsEMCAL()) printf("EMCAL Track-Cluster Residuals : dZ %f, dR %f\n ",dZ, dR);
-      if(cluster->IsPHOS())  printf("PHOS  Track-Cluster Residuals : dZ %f, dR %f\n ",dZ, dR);
-    }
+    AliDebug(2,Form("EMCAL? %d, PHOS? %d Track-Cluster Residuals : dZ %f, dR %f",cluster->IsEMCAL(), cluster->IsPHOS(),dZ, dR));
     
     //--------------------------------------------------------------
     
@@ -563,13 +567,10 @@ void AliAnalysisTaskCaloFilter::FillAODCaloClusters()
     caloCluster->SetCellsAmplitudeFraction(cluster->GetCellsAmplitudeFraction());
     caloCluster->SetTrackDistance(dR, dZ);
     
-    if(DebugLevel() > 2)
-    { 
-      printf("Filter, aod     : i %d, E %f, dispersion %f, m02 %f, m20 %f\n",caloCluster->GetID(),caloCluster->E(),
-             caloCluster->GetDispersion(),caloCluster->GetM02(),caloCluster->GetM20());
-      caloCluster->GetPosition(posF);
-      printf("Filter, aod     : i %d, x %f, y %f, z %f\n",caloCluster->GetID(), posF[0], posF[1], posF[2]);
-    }    
+    AliDebug(2,Form("Filter, aod     : i %d, E %f, dispersion %f, m02 %f, m20 %f",caloCluster->GetID(),caloCluster->E(),
+                    caloCluster->GetDispersion(),caloCluster->GetM02(),caloCluster->GetM20()));
+    caloCluster->GetPosition(posF);
+    AliDebug(2,Form("Filter, aod     : i %d, x %f, y %f, z %f",caloCluster->GetID(), posF[0], posF[1], posF[2]));
     
     //Matched tracks, just to know if there was any match, the track pointer is useless if tracks not stored
     if(TMath::Abs(dR) < 990 && TMath::Abs(dZ) < 990) 
@@ -588,19 +589,19 @@ void AliAnalysisTaskCaloFilter::FillAODCaloTrigger()
 {
   // AOD CaloTrigger copy
   
-  AliAODCaloTrigger* triggerEM = AODEvent()->GetCaloTrigger("EMCAL");
-  AliAODCaloTrigger* triggerPH = AODEvent()->GetCaloTrigger("PHOS");
+  if( !AODEvent() || !fAODEvent ) return;
+  
+  AliAODCaloTrigger* triggerEM   = AODEvent()->GetCaloTrigger("EMCAL");
+  AliAODCaloTrigger* triggerPH   = AODEvent()->GetCaloTrigger("PHOS");
   
   // Copy from AODs
-  if(fAODEvent)
-  {
-    if(fCaloFilter==kBoth || fCaloFilter==kPHOS)  *triggerPH = *(fAODEvent->GetCaloTrigger("PHOS"));
-    
-    if(fCaloFilter==kBoth || fCaloFilter==kEMCAL) *triggerEM = *(fAODEvent->GetCaloTrigger("EMCAL"));
-    
-    return;
-  }
   
+  AliAODCaloTrigger* inTriggerEM = fAODEvent ->GetCaloTrigger("EMCAL");
+  AliAODCaloTrigger* inTriggerPH = fAODEvent ->GetCaloTrigger("PHOS");
+  
+  if(inTriggerPH && (fCaloFilter==kBoth || fCaloFilter==kPHOS))  *triggerPH = *inTriggerPH;
+  
+  if(inTriggerEM && (fCaloFilter==kBoth || fCaloFilter==kEMCAL)) *triggerEM = *inTriggerEM;  
 }  
 
 //______________________________________________
@@ -608,12 +609,17 @@ void AliAnalysisTaskCaloFilter::FillAODHeader()
 {
   // AOD header copy
   
-  AliAODHeader* header = AODEvent()->GetHeader();
+  AliAODHeader* header = dynamic_cast<AliAODHeader*>(AODEvent()->GetHeader());
+  if(!header)
+  {
+    AliFatal("Not a standard AOD");
+    return; // not needed but coverity complains
+  }
   
   // Copy from AODs
   if(fAODEvent)
   {
-    *header = *(fAODEvent->GetHeader());
+    *header = *((AliAODHeader*)fAODEvent->GetHeader());
     return;
   }
   
@@ -655,7 +661,7 @@ void AliAnalysisTaskCaloFilter::FillAODHeader()
   header->SetL2TriggerInputs(fESDEvent->GetHeader()->GetL2TriggerInputs());    
   
   header->SetMagneticField(fEvent->GetMagneticField());
-  //header->SetMuonMagFieldScale(fESDEvent->GetCurrentDip()/6000.); 
+  header->SetMuonMagFieldScale(fESDEvent->GetCurrentDip()/6000.); 
   
   header->SetZDCN1Energy(fEvent->GetZDCN1Energy());
   header->SetZDCP1Energy(fEvent->GetZDCP1Energy());
@@ -663,7 +669,7 @@ void AliAnalysisTaskCaloFilter::FillAODHeader()
   header->SetZDCP2Energy(fEvent->GetZDCP2Energy());
   header->SetZDCEMEnergy(fEvent->GetZDCEMEnergy(0),fEvent->GetZDCEMEnergy(1));
   
-  Float_t diamxy[2]={fEvent->GetDiamondX(),fEvent->GetDiamondY()};
+  Float_t diamxy[2]={(Float_t)fEvent->GetDiamondX(),(Float_t)fEvent->GetDiamondY()};
   Float_t diamcov[3];
   fEvent->GetDiamondCovXY(diamcov);
   header->SetDiamond(diamxy,diamcov);
@@ -671,6 +677,21 @@ void AliAnalysisTaskCaloFilter::FillAODHeader()
   
 }
 
+
+//__________________________________________________
+void AliAnalysisTaskCaloFilter::FillAODMCParticles()
+{
+  // Copy MC particles
+  
+  if(!fFillMCParticles) return;
+  
+  TClonesArray* inMCParticles = (TClonesArray*) (fAODEvent  ->FindListObject("mcparticles"));
+  TClonesArray* ouMCParticles = (TClonesArray*) ( AODEvent()->FindListObject("mcparticles"));
+  
+  if( inMCParticles &&  ouMCParticles ) new (ouMCParticles) TClonesArray(*inMCParticles);
+    
+}  
+
 //_____________________________________________
 void AliAnalysisTaskCaloFilter::FillAODTracks()
 {
@@ -682,7 +703,7 @@ void AliAnalysisTaskCaloFilter::FillAODTracks()
   
   Double_t pos[3]   = { 0. };      
   Double_t covTr[21]= { 0. };
-  Double_t pid[10]  = { 0. };  
+  //Double_t pid[10]  = { 0. };  
   Double_t p[3]     = { 0. };
     
   // Copy from AODs
@@ -696,7 +717,8 @@ void AliAnalysisTaskCaloFilter::FillAODTracks()
     Int_t nCopyTrack = 0;
     for (Int_t nTrack = 0; nTrack < fAODEvent->GetNumberOfTracks(); ++nTrack) 
     {
-      AliAODTrack *track = fAODEvent->GetTrack(nTrack);
+      AliAODTrack *track = dynamic_cast<AliAODTrack*>(fAODEvent->GetTrack(nTrack));
+      if(!track) AliFatal("Not a standard AOD");
       
       // Select only hybrid tracks?
       if(fFillHybridTracks && !track->IsHybridGlobalConstrainedGlobal()) continue;
@@ -709,7 +731,7 @@ void AliAnalysisTaskCaloFilter::FillAODTracks()
       track->GetPxPyPz(p);
       Bool_t isDCA  = track->GetPosition(pos);
       track->GetCovMatrix(covTr);
-      track->GetPID(pid);
+      //track->GetPID(pid);
       
       AliAODVertex* primVertex = (AliAODVertex*) AODEvent()->GetVertices()->At(0); // primary vertex, copied previously!!!
 
@@ -723,15 +745,15 @@ void AliAnalysisTaskCaloFilter::FillAODTracks()
                                                             covTr, 
                                                             track->Charge(),
                                                             track->GetITSClusterMap(), 
-                                                            pid,
+                                                            // pid,
                                                             primVertex,
                                                             track->GetUsedForVtxFit(),
                                                             track->GetUsedForPrimVtxFit(),
                                                             (AliAODTrack::AODTrk_t) track->GetType(), 
-                                                            track->GetFilterMap(),
-                                                            track->Chi2perNDF());
+                                                            track->GetFilterMap());
       
       
+      aodTrack->SetPIDForTracking(track->GetPIDForTracking());
       aodTrack->SetIsHybridGlobalConstrainedGlobal(track->IsHybridGlobalConstrainedGlobal());   
       aodTrack->SetIsHybridTPCConstrainedGlobal   (track->IsHybridTPCConstrainedGlobal());    
       aodTrack->SetIsGlobalConstrained            (track->IsGlobalConstrained());  
@@ -755,7 +777,7 @@ void AliAnalysisTaskCaloFilter::FillAODTracks()
       
       if(track->IsEMCAL()) aodTrack->SetEMCALcluster(track->GetEMCALcluster());
       if(track->IsPHOS())  aodTrack->SetPHOScluster (track->GetPHOScluster());
-      aodTrack->SetTrackPhiEtaOnEMCal( track->GetTrackPhiOnEMCal(),  track->GetTrackPhiOnEMCal() );
+      aodTrack->SetTrackPhiEtaPtOnEMCal( track->GetTrackPhiOnEMCal(),  track->GetTrackPhiOnEMCal(),  track->GetTrackPtOnEMCal() );
           
     } 
     
@@ -877,7 +899,7 @@ void AliAnalysisTaskCaloFilter::Init()
   
   if(gROOT->LoadMacro(fConfigName) >=0)
   {
-    printf("Configure analysis with %s\n",fConfigName.Data());
+    AliInfo(Form("Configure analysis with %s",fConfigName.Data()));
     
     AliAnalysisTaskCaloFilter *filter = (AliAnalysisTaskCaloFilter*)gInterpreter->ProcessLine("ConfigCaloFilter()");
     
@@ -896,6 +918,7 @@ void AliAnalysisTaskCaloFilter::Init()
     fEventSelection[1] = filter->fEventSelection[1];
     fEventSelection[2] = filter->fEventSelection[2];
     fAcceptAllMBEvent  = filter->fAcceptAllMBEvent;
+    fMBTriggerMask     = filter->fMBTriggerMask;
     fCorrect           = filter->fCorrect;
     fEMCALEnergyCut    = filter->fEMCALEnergyCut;
     fEMCALNcellsCut    = filter->fEMCALNcellsCut;
@@ -903,7 +926,8 @@ void AliAnalysisTaskCaloFilter::Init()
     fPHOSNcellsCut     = filter->fPHOSNcellsCut;
     fTrackPtCut        = filter->fTrackPtCut;
     fVzCut             = filter->fVzCut;
-    
+    fCheckEventVertex  = filter->fCheckEventVertex;
+
     for(Int_t i = 0; i < 12; i++) fEMCALMatrix[i] = filter->fEMCALMatrix[i] ;
   }
 } 
@@ -924,8 +948,8 @@ void AliAnalysisTaskCaloFilter::PrintInfo()
   printf("\t Fill: AOD file? %d Tracks? %d; all Vertex? %d; v0s? %d; VZERO ? %d\n", 
          fFillAODFile,fFillTracks,fFillAllVertices, fFillv0s, fFillVZERO);
   
-  printf("\t Event Selection based : EMCAL?  %d, PHOS?  %d Tracks? %d - Accept all MB? %d\n",
-         fEventSelection[0],fEventSelection[1],fEventSelection[2],fAcceptAllMBEvent);
+  printf("\t Event Selection based : EMCAL?  %d, PHOS?  %d Tracks? %d - Accept all MB with mask %d? %d\n",
+         fEventSelection[0],fEventSelection[1],fEventSelection[2],fMBTriggerMask, fAcceptAllMBEvent);
   
   printf("\t \t EMCAL E > %2.2f, EMCAL nCells >= %d, PHOS E > %2.2f, PHOS nCells >= %d, Track pT > %2.2f, |vz| < %2.2f\n",
          fEMCALEnergyCut,fEMCALNcellsCut,fPHOSEnergyCut,fPHOSNcellsCut, fTrackPtCut,fVzCut);
@@ -938,6 +962,13 @@ void AliAnalysisTaskCaloFilter::UserCreateOutputObjects()
        
   fEMCALGeo =  AliEMCALGeometry::GetInstance(fEMCALGeoName) ;  
   
+  if(fFillMCParticles)
+  {
+    TClonesArray * aodMCParticles = new TClonesArray("AliAODMCParticle",500);
+               aodMCParticles->SetName("mcparticles");
+               ((AliAODHandler*)AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler())->AddBranch("TClonesArray", &aodMCParticles);
+  }
+  
 }  
 
 //____________________________________________________________
@@ -946,8 +977,7 @@ void AliAnalysisTaskCaloFilter::UserExec(Option_t */*option*/)
   // Execute analysis for current event
   // Copy input ESD or AOD header, vertex, CaloClusters and CaloCells to output AOD
   
-  if (fDebug > 0)  
-    printf("CaloFilter: Analysing event # %d\n", (Int_t)Entry());
+  AliDebug(1,Form("Analysing event # %d", (Int_t)Entry()));
   
   fEvent    = InputEvent();
   fAODEvent = dynamic_cast<AliAODEvent*> (fEvent);  
@@ -955,7 +985,7 @@ void AliAnalysisTaskCaloFilter::UserExec(Option_t */*option*/)
   
   if(!fEvent) 
   {
-    printf("AliAnalysisTaskCaloFilter::UserExec - This event does not contain Input?");
+    AliInfo("This event does not contain Input?");
     return;
   }
   
@@ -1006,6 +1036,9 @@ void AliAnalysisTaskCaloFilter::UserExec(Option_t */*option*/)
   //
   FillAODCaloTrigger();
   
+  // 
+  FillAODMCParticles();
+  
   //printf("Filtered event, end processing : %s\n",fAODEvent->GetFiredTriggerClasses().Data());
   
 }