]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG4/GammaConv/AliAnalysisTaskCaloConv.cxx
Cluster histograms: fill with clusters with more than 1 cell, change return by contin...
[u/mrichter/AliRoot.git] / PWG4 / GammaConv / AliAnalysisTaskCaloConv.cxx
index cce726c5de385fa162f1c13af9f70d1da405da1c..389e942deff2bf9e309610d7897ce64bd4b0432d 100644 (file)
 #include "TChain.h"
 #include "TH3.h"
 #include "TH2.h"
+#include "TDirectory.h"
+#include "TLorentzVector.h"
+#include "TRandom.h"
 
 // analysis
 #include "AliAnalysisManager.h"
+#include "AliESDInputHandler.h"
 #include "AliAnalysisTaskCaloConv.h"
 #include "AliStack.h"
 #include "AliLog.h"
 #include "AliESDEvent.h"
 #include "AliESDpid.h"
 #include "AliESDtrackCuts.h"
+#include "AliESDtrackCuts.h"
 #include "AliCFContainer.h"   // for CF
 #include "AliESDCaloCluster.h" 
 #include "AliPHOSGeoUtils.h" 
-#include "AliEMCALGeoUtils.h" 
+#include "AliEMCALGeometry.h" 
 #include "AliCFContainer.h"
 #include "AliMCEventHandler.h"
 #include "AliMCEvent.h"
@@ -44,7 +49,6 @@
 #include "AliKFParticle.h"
 #include "AliKFVertex.h"
 
-class AliESDInputHandler;
 class Riostream;
 class TFile;
 
@@ -55,6 +59,7 @@ AliAnalysisTaskCaloConv::AliAnalysisTaskCaloConv():
 AliAnalysisTaskSE(),
   fESDEvent(NULL),     
   fESDpid(NULL),
+  fESDtrackCuts(NULL),
   fStack(NULL),
   fOutputContainer(NULL),
   fCFOutputContainer(NULL),
@@ -62,12 +67,19 @@ AliAnalysisTaskSE(),
   fPHOSCFCont(0x0),
   fEMCALCFCont(0x0),
   fPi0CFCont(0x0),
+  fCentr(0.),
   fTriggerCINT1B(kFALSE),
+  fToUseCF(kFALSE),
   fMinOpeningAngleGhostCut(0.),
   fPHOSgeom(0x0),
   fEMCALgeom(0x0),
   fPi0Thresh1(0.5),
   fPi0Thresh2(1.),
+  fBadDistCutPHOS(3.3),
+  fBadDistCutEMCAL(6.),
+  fGammaV0s(),
+  fGammaPHOS(),
+  fGammaEMCAL(),
   fConvEvent(NULL) ,
   fPHOSEvent(NULL),
   fEMCALEvent(NULL),
@@ -89,11 +101,21 @@ AliAnalysisTaskSE(),
     fEMCALEvents[i]=0;
     fConvEvents[i]=0;
   }
+  char key[55] ;
+  for(Int_t i=0; i<6; i++){
+    snprintf(key,55,"PHOS_BadMap_mod%d",i) ;
+    fPHOSBadMap[i]=new TH2I(key,"Bad Modules map",64,0.,64.,56,0.,56.) ;
+  }
+  for(Int_t i=0; i<10; i++){
+    snprintf(key,55,"EMCAL_BadMap_mod%d",i) ;
+    fEMCALBadMap[i] = new TH2I(key,"Bad Modules map",24,0.,24.,48,0.,48.) ;
+  }
 }
 AliAnalysisTaskCaloConv::AliAnalysisTaskCaloConv(const char* name):
   AliAnalysisTaskSE(name),
   fESDEvent(NULL),
   fESDpid(NULL),
+  fESDtrackCuts(NULL),
   fStack(NULL),
   fOutputContainer(NULL),
   fCFOutputContainer(NULL),
@@ -101,12 +123,19 @@ AliAnalysisTaskCaloConv::AliAnalysisTaskCaloConv(const char* name):
   fPHOSCFCont(0x0),
   fEMCALCFCont(0x0),
   fPi0CFCont(0x0),
+  fCentr(0.),
   fTriggerCINT1B(kFALSE),
+  fToUseCF(kFALSE),
   fMinOpeningAngleGhostCut(0.),
   fPHOSgeom(0x0),
   fEMCALgeom(0x0),
   fPi0Thresh1(0.5),
   fPi0Thresh2(1.),
+  fBadDistCutPHOS(3.3),
+  fBadDistCutEMCAL(6.),
+  fGammaV0s(),
+  fGammaPHOS(),
+  fGammaEMCAL(),
   fConvEvent(NULL) ,
   fPHOSEvent(NULL),
   fEMCALEvent(NULL),
@@ -135,47 +164,69 @@ AliAnalysisTaskCaloConv::AliAnalysisTaskCaloConv(const char* name):
     fEMCALEvents[i]=0;
     fConvEvents[i]=0;
   }
-  fESDpid = new AliESDpid;
+  char key[55] ;
+  for(Int_t i=0; i<6; i++){
+    snprintf(key,55,"PHOS_BadMap_mod%d",i) ;
+    fPHOSBadMap[i]=new TH2I(key,"Bad Modules map",64,0.,64.,56,0.,56.) ;
+  }
+  for(Int_t i=0; i<10; i++){
+    snprintf(key,55,"EMCAL_BadMap_mod%d",i) ;
+    fEMCALBadMap[i] = new TH2I(key,"Bad Modules map",24,0.,24.,48,0.,48.) ;
+  }
+//  fESDpid = new AliESDpid;
 }
 //_____________________________________________________
 AliAnalysisTaskCaloConv::~AliAnalysisTaskCaloConv() 
 {
   // Remove all pointers
        
-  if(fOutputContainer){
-    fOutputContainer->Clear() ; 
-    delete fOutputContainer ;
-  }
-  if(fCFOutputContainer){
-    fCFOutputContainer->Clear() ; 
-    delete fCFOutputContainer ;
-  }
+  if (AliAnalysisManager::GetAnalysisManager()->GetAnalysisType() !=
+      AliAnalysisManager::kProofAnalysis) {
 
-  if(fPHOSgeom){
-    delete fPHOSgeom ;
-    fPHOSgeom=0x0 ;
-  }
+    if(fOutputContainer){
+      fOutputContainer->Clear() ; 
+      delete fOutputContainer ;
+    }
+    if(fCFOutputContainer){
+      fCFOutputContainer->Clear() ; 
+      delete fCFOutputContainer ;
+    }
 
-  if(fEMCALgeom){
-    delete fEMCALgeom ;
-    fEMCALgeom=0x0;
-  }
+    if(fPHOSgeom){
+      delete fPHOSgeom ;
+      fPHOSgeom=0x0 ;
+    }
+
+    if(fEMCALgeom){
+      delete fEMCALgeom ;
+      fEMCALgeom=0x0;
+    }
 
-  for(Int_t ivtx=0; ivtx<10; ivtx++){
-    if(fPHOSEvents[ivtx]){
-      delete fPHOSEvents[ivtx] ;
-      fPHOSEvents[ivtx]=0x0 ;
+    for(Int_t ivtx=0; ivtx<10; ivtx++){
+      if(fPHOSEvents[ivtx]){
+        delete fPHOSEvents[ivtx] ;
+          fPHOSEvents[ivtx]=0x0 ;
     }
-    if(fEMCALEvents[ivtx]){
-      delete fEMCALEvents[ivtx] ;
-      fEMCALEvents[ivtx]=0x0 ;
+      if(fEMCALEvents[ivtx]){
+        delete fEMCALEvents[ivtx] ;
+        fEMCALEvents[ivtx]=0x0 ;
+      }
+      if(fConvEvents[ivtx]){
+        delete fConvEvents[ivtx] ;
+        fConvEvents[ivtx]=0x0 ;
+      }
     }
-    if(fConvEvents[ivtx]){
-      delete fConvEvents[ivtx] ;
-      fConvEvents[ivtx]=0x0 ;
+    for(Int_t i=0; i<6; i++)
+      if(fPHOSBadMap[i]){
+        delete fPHOSBadMap[i] ;
+          fPHOSBadMap[i]=0 ;
+      }
+    for(Int_t i=0; i<10; i++)
+      if(fEMCALBadMap[i]){
+       delete fEMCALBadMap[i];
+       fEMCALBadMap[i]=0 ;
     }
-  }
-
+  } 
 }
 //_____________________________________________________
 void AliAnalysisTaskCaloConv::Init()
@@ -189,19 +240,126 @@ void AliAnalysisTaskCaloConv::UserExec(Option_t */*option*/)
   // Execute analysis for current event
   // First select conversion and calorimeter photons 
   // then construct inv. mass distributions
-  
   //First try to find Stack information.
   if(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()){
     if(static_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())->MCEvent())
       fStack = static_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())->MCEvent()->Stack();
   }
+
+
+  AliESDInputHandler *esdHandler=dynamic_cast<AliESDInputHandler*>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
+  if(!fESDpid){
+    if( esdHandler && esdHandler->GetESDpid()){
+      fESDpid=new AliESDpid(*(esdHandler->GetESDpid())) ;
+    } 
+    else {
+      fESDpid=new AliESDpid;
+      Double_t alephParameters[5];
+      if(fStack){// simulation
+        alephParameters[0] = 2.15898e+00/50.;
+        alephParameters[1] = 1.75295e+01;
+        alephParameters[2] = 3.40030e-09;
+        alephParameters[3] = 1.96178e+00;
+        alephParameters[4] = 3.91720e+00;
+        fESDpid->GetTOFResponse().SetTimeResolution(80.);
+      }
+      else{// data
+        alephParameters[0] = 0.0283086;
+        alephParameters[1] = 2.63394e+01;
+        alephParameters[2] = 5.04114e-11;
+        alephParameters[3] = 2.12543e+00;
+        alephParameters[4] = 4.88663e+00;
+        fESDpid->GetTOFResponse().SetTimeResolution(130.);
+        fESDpid->GetTPCResponse().SetMip(47.9);
+      }
+
+      fESDpid->GetTPCResponse().SetBetheBlochParameters(
+        alephParameters[0],alephParameters[1],alephParameters[2],
+        alephParameters[3],alephParameters[4]);
+      fESDpid->GetTPCResponse().SetSigma(3.79301e-03, 2.21280e+04);
+    }
+  }
+
+  if(!fESDtrackCuts){
+//    fESDtrackCuts= AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
+    fESDtrackCuts = new AliESDtrackCuts;
+
+    // TPC
+    fESDtrackCuts->SetMinNClustersTPC(70);
+    fESDtrackCuts->SetMaxChi2PerClusterTPC(4);
+    fESDtrackCuts->SetAcceptKinkDaughters(kFALSE);
+    fESDtrackCuts->SetRequireTPCRefit(kTRUE);
+    // ITS
+    fESDtrackCuts->SetRequireITSRefit(kTRUE);
+    fESDtrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+                                           AliESDtrackCuts::kAny);
+//    if(selPrimaries) {
+      // 7*(0.0026+0.0050/pt^1.01)
+      fESDtrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
+//    }
+    fESDtrackCuts->SetMaxDCAToVertexZ(2);
+    fESDtrackCuts->SetDCAToVertex2D(kFALSE);
+    fESDtrackCuts->SetRequireSigmaToVertex(kFALSE);
+
+
+
+/*
+    fESDtrackCuts = new AliESDtrackCuts("AliESDtrackCuts","AliESDtrackCuts");
+
+    fESDtrackCuts->SetAcceptKinkDaughters(kFALSE); 
+    fESDtrackCuts->SetMinNClustersTPC(70); 
+    fESDtrackCuts->SetMaxChi2PerClusterTPC(4); 
+    fESDtrackCuts->SetRequireTPCRefit(kTRUE); 
+    fESDtrackCuts->SetRequireITSRefit(kTRUE); 
+//    fESDtrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny); //TEMPORARY <-> REMOVE 
+*/
+  } 
+
 
   fESDEvent=(AliESDEvent*)InputEvent();
-//  //Take Only events with proper trigger
-//  if(fTriggerCINT1B){
-//    if(!fESDEvent->IsTriggerClassFired("CINT1B-ABCE-NOPF-ALL")) return;
-//  }
+  FillHistogram("hEventsTrig",0.5) ;
+  Bool_t isSelected = esdHandler && ((esdHandler->IsEventSelected()& AliVEvent::kMB) == AliVEvent::kMB);
+  if(!isSelected){
+    printf("Not selected !!!!! \n") ;
+    PostData(1, fOutputContainer);
+    return ;
+  }
+  FillHistogram("hEventsTrig",1.5) ;
+
+  //Take Only events with proper trigger
+  //No trigger in MC data => no check
+//  if(!fStack && !fESDEvent->IsTriggerClassFired("CINT1B-ABCE-NOPF-ALL")){
+  //for LHC10e
+  if(!fStack && !fESDEvent->IsTriggerClassFired("CINT1-B-NOPF-ALLNOTRD")){
+    PostData(1, fOutputContainer);
+    return ;
+  } 
+  FillHistogram("hEventsTrig",2.5) ;
+
+  //checks if we have a prim vertex
+  if(fESDEvent->GetPrimaryVertex()->GetNContributors()<=0) {
+    PostData(1, fOutputContainer);
+    return ;
+  }
+  FillHistogram("hEventsTrig",3.5) ;
+
+  if(TMath::Abs(fESDEvent->GetPrimaryVertex()->GetZ())>10.){
+    PostData(1, fOutputContainer);
+    return ;
+  }
+  FillHistogram("hEventsTrig",4.5) ;
+
+
+  //Calculate charged multiplicity
+  Int_t trackCounter = 0; 
+  for (Int_t i=0;i<fESDEvent->GetNumberOfTracks();++i) { 
+    AliESDtrack *track = new AliESDtrack(*fESDEvent->GetTrack(i)) ;
+    if(fESDtrackCuts->AcceptTrack(track) &&  TMath::Abs(track->Eta())< 0.9) 
+      trackCounter++; 
+    delete track; 
+  } 
+  fCentr=trackCounter+0.5 ;
+  FillHistogram("hMult",fCentr) ;
        
   //Init geometry if not done yet
   InitGeometry();
@@ -211,11 +369,15 @@ void AliAnalysisTaskCaloConv::UserExec(Option_t */*option*/)
   SelectConvPhotons() ;
   SelectPHOSPhotons() ;
   SelectEMCALPhotons() ;
-  FillRealMixed() ;
   //Fill MC histograms if MC is present
   ProcessMC();
+  FillRealMixed() ;
 
   PostData(1, fOutputContainer);
+  if(fToUseCF)
+    PostData(2, fCFOutputContainer);  // for CF
+
+
 }
 //____________________________________________________________
 void AliAnalysisTaskCaloConv::ConnectInputData(Option_t *option){
@@ -227,6 +389,8 @@ void AliAnalysisTaskCaloConv::ConnectInputData(Option_t *option){
 //____________________________________________________________
 void AliAnalysisTaskCaloConv::UserCreateOutputObjects()
 {
+  //UserCreateOutputObjects
+  if(fDebug)gDirectory->Print() ;
   // Create the output container
   if(fOutputContainer != NULL){
     delete fOutputContainer;
@@ -239,39 +403,40 @@ void AliAnalysisTaskCaloConv::UserCreateOutputObjects()
     delete fCFOutputContainer;
     fCFOutputContainer = NULL;
   }
-  fCFOutputContainer = new TList();
-  fCFOutputContainer->SetOwner(kTRUE);
-
   //===========Correction Framework ======================
-  //bins: pt,eta,mass
-  Int_t iBin[3]={500,40,100};
-  fConvCFCont = new AliCFContainer("ConvContainer","container for converted photons", 23,3,iBin);
-  fConvCFCont->SetBinLimits(0,0.,50.);
-  fConvCFCont->SetBinLimits(1,-2.,2.) ;
-  fConvCFCont->SetBinLimits(2,0.,1.);
-  fCFOutputContainer->Add(fConvCFCont) ;
-
-  fPHOSCFCont = new AliCFContainer("PHOSContainer","container for PHOS photons", 10,2,iBin);
-  fPHOSCFCont->SetBinLimits(0,0.,50.);
-  fPHOSCFCont->SetBinLimits(1,-2.,2.) ;
-  fCFOutputContainer->Add(fPHOSCFCont) ;
-
-  fEMCALCFCont = new AliCFContainer("EMCALContainer","container for EMCAL photons", 10,2,iBin);
-  fEMCALCFCont->SetBinLimits(0,0.,50.);
-  fEMCALCFCont->SetBinLimits(1,-2.,2.) ;
-  fCFOutputContainer->Add(fEMCALCFCont) ;
-
-  fPi0CFCont = new AliCFContainer("Pi0Container","container for EMCAL photons", 10,2,iBin);
-  fPi0CFCont->SetBinLimits(0,0.,50.);
-  fPi0CFCont->SetBinLimits(1,-2.,2.) ;
-  fCFOutputContainer->Add(fPi0CFCont) ;
-
+  if(fToUseCF){
+    fCFOutputContainer = new TList();
+    fCFOutputContainer->SetOwner(kTRUE);
+
+    //bins: pt,eta,mass
+    Int_t iBin[3]={500,40,100};
+    fConvCFCont = new AliCFContainer("ConvContainer","container for converted photons", 23,3,iBin);
+    fConvCFCont->SetBinLimits(0,0.,50.);
+    fConvCFCont->SetBinLimits(1,-2.,2.) ;
+    fConvCFCont->SetBinLimits(2,0.,1.);
+    fCFOutputContainer->Add(fConvCFCont) ;
+  
+    fPHOSCFCont = new AliCFContainer("PHOSContainer","container for PHOS photons", 10,2,iBin);
+    fPHOSCFCont->SetBinLimits(0,0.,50.);
+    fPHOSCFCont->SetBinLimits(1,-2.,2.) ;
+    fCFOutputContainer->Add(fPHOSCFCont) ;
+  
+    fEMCALCFCont = new AliCFContainer("EMCALContainer","container for EMCAL photons", 10,2,iBin);
+    fEMCALCFCont->SetBinLimits(0,0.,50.);
+    fEMCALCFCont->SetBinLimits(1,-2.,2.) ;
+    fCFOutputContainer->Add(fEMCALCFCont) ;
+  
+    fPi0CFCont = new AliCFContainer("Pi0Container","container for EMCAL photons", 10,2,iBin);
+    fPi0CFCont->SetBinLimits(0,0.,50.);
+    fPi0CFCont->SetBinLimits(1,-2.,2.) ;
+    fCFOutputContainer->Add(fPi0CFCont) ;
+  
+  }
   //========================================================
 
-
   //Adding the histograms to the output container
-  Int_t firstRun= 114700 ;
-  Int_t lastRun = 128000 ;
+  Int_t firstRun= 125000 ;
+  Int_t lastRun = 135000 ;
   Int_t nRuns =lastRun-firstRun+1 ;
 
   //Run QA histigrams
@@ -282,35 +447,71 @@ void AliAnalysisTaskCaloConv::UserCreateOutputObjects()
   fOutputContainer->Add(new TH1F("hRunEMCAL","EMCAL photons per run",nRuns,float(firstRun),float(lastRun))) ;
   fOutputContainer->Add(new TH1F("hVtxBin","Vtx distribution",10,0.,10.)) ;
   fOutputContainer->Add(new TH1F("hEvents","Events processed",1,0.,1.)) ;
-
-  //Check of geometry
-  fOutputContainer->Add(new TH3F("PHOS_beyond","PHOS clusters not in PHOS",200,-300.,300.,200,-500.,0.,200,-100.,100.)) ;
+  fOutputContainer->Add(new TH1F("hEventsTrig","Events processed",10,0.,10.)) ;
+
+  fOutputContainer->Add(new TH2F("hQA_PHOS_mod1_soft","number of clusters per cell",64,0.,64.,56,0.,56.)) ;
+  fOutputContainer->Add(new TH2F("hQA_PHOS_mod2_soft","number of clusters per cell",64,0.,64.,56,0.,56.)) ;
+  fOutputContainer->Add(new TH2F("hQA_PHOS_mod3_soft","number of clusters per cell",64,0.,64.,56,0.,56.)) ;
+  fOutputContainer->Add(new TH2F("hQA_PHOS_mod4_soft","number of clusters per cell",64,0.,64.,56,0.,56.)) ;
+  fOutputContainer->Add(new TH2F("hQA_PHOS_mod5_soft","number of clusters per cell",64,0.,64.,56,0.,56.)) ;
+  fOutputContainer->Add(new TH2F("hQA_PHOS_mod1_hard","number of clusters per cell",64,0.,64.,56,0.,56.)) ;
+  fOutputContainer->Add(new TH2F("hQA_PHOS_mod2_hard","number of clusters per cell",64,0.,64.,56,0.,56.)) ;
+  fOutputContainer->Add(new TH2F("hQA_PHOS_mod3_hard","number of clusters per cell",64,0.,64.,56,0.,56.)) ;
+  fOutputContainer->Add(new TH2F("hQA_PHOS_mod4_hard","number of clusters per cell",64,0.,64.,56,0.,56.)) ;
+  fOutputContainer->Add(new TH2F("hQA_PHOS_mod5_hard","number of clusters per cell",64,0.,64.,56,0.,56.)) ;
+
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM0_soft","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM1_soft","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM2_soft","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM3_soft","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM4_soft","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM5_soft","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM6_soft","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM7_soft","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM8_soft","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM9_soft","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM0_hard","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM1_hard","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM2_hard","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM3_hard","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM4_hard","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM5_hard","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM6_hard","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM7_hard","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM8_hard","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+  fOutputContainer->Add(new TH2F("hQA_EMCAL_SM9_hard","number of clusters per cell",24,0.,24,48,0.,48.)) ;
+
+  fOutputContainer->Add(new TH2F("hQA_ConvPhiEta","Number of V0s phi eta",100,0.,TMath::TwoPi(),40,-1.5,1.5)) ;
+
+  fOutputContainer->Add(new TH2F("hdEdx","dEdx of acceptaed electrons",1000,0.,10.,150,0.,150.)) ;
+
+  fOutputContainer->Add(new TH1F("hMult","Multiplicity",200,0.,200.)) ;
 
   Int_t npt=200 ;
   Double_t ptmax=20. ;
   //Calibration of PHOS
-  fOutputContainer->Add(new TH3F("PHOS_mod1_th1","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
-  fOutputContainer->Add(new TH3F("PHOS_mod2_th1","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
-  fOutputContainer->Add(new TH3F("PHOS_mod3_th1","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
-  fOutputContainer->Add(new TH3F("PHOS_mod4_th1","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
-  fOutputContainer->Add(new TH3F("PHOS_mod5_th1","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
-
-  fOutputContainer->Add(new TH3F("PHOS_mod1_th2","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
-  fOutputContainer->Add(new TH3F("PHOS_mod2_th2","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
-  fOutputContainer->Add(new TH3F("PHOS_mod3_th2","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
-  fOutputContainer->Add(new TH3F("PHOS_mod4_th2","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
-  fOutputContainer->Add(new TH3F("PHOS_mod5_th2","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
+  fOutputContainer->Add(new TH3F("PHOS_mod1_th1","Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
+  fOutputContainer->Add(new TH3F("PHOS_mod2_th1","Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
+  fOutputContainer->Add(new TH3F("PHOS_mod3_th1","Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
+  fOutputContainer->Add(new TH3F("PHOS_mod4_th1","Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
+  fOutputContainer->Add(new TH3F("PHOS_mod5_th1","Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
+
+  fOutputContainer->Add(new TH3F("PHOS_mod1_th2","Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
+  fOutputContainer->Add(new TH3F("PHOS_mod2_th2","Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
+  fOutputContainer->Add(new TH3F("PHOS_mod3_th2","Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
+  fOutputContainer->Add(new TH3F("PHOS_mod4_th2","Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
+  fOutputContainer->Add(new TH3F("PHOS_mod5_th2","Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
 
   //Pi0 histograms
   //Vary Conversion cuts
   fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_OnFly","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Offline","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_Kink","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Off_Kink","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH3F("PHOS_Re_mvsPt_OnFly_mult","Mass vs pt",400,0.,1.,npt,0.,ptmax,150,0.,150.)) ;
+  fOutputContainer->Add(new TH3F("PHOS_Re_mvsPt_Offline_mult","Mass vs pt",400,0.,1.,npt,0.,ptmax,150,0.,150.)) ;
   fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_dEdx","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Off_dEdx","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Off_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+//  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+//  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Off_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_R120","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Off_R120","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_Z","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
@@ -320,16 +521,18 @@ void AliAnalysisTaskCaloConv::UserCreateOutputObjects()
   fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_Eta","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Off_Eta","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_Wcut","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_Wcut_Neu","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Off_Wcut","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Off_Wcut_Neu","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_ArmQt","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Off_ArmQt","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
 
   fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_OnFly","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Offline","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_On_Kink","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Off_Kink","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_On_dEdx","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Off_dEdx","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_On_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Off_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+//  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_On_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+//  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Off_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_On_R120","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Off_R120","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_On_Z","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
@@ -340,15 +543,19 @@ void AliAnalysisTaskCaloConv::UserCreateOutputObjects()
   fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Off_Eta","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_On_Wcut","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Off_Wcut","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_On_ArmQt","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Off_ArmQt","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
 
   fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_OnFly","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_Offline","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_On_Kink","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_Off_Kink","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH3F("EMCAL_Re_mvsPt_OnFly_mult","Mass vs pt",400,0.,1.,npt,0.,ptmax,30,0.,60.)) ;
+  fOutputContainer->Add(new TH3F("EMCAL_Re_mvsPt_Offline_mult","Mass vs pt",400,0.,1.,npt,0.,ptmax,30,0.,60.)) ;
+  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_On_ArmQt","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_Off_ArmQt","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_On_dEdx","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_Off_dEdx","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_On_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_Off_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+//  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_On_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+//  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_Off_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_On_R120","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_Off_R120","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_On_Z","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
@@ -362,12 +569,12 @@ void AliAnalysisTaskCaloConv::UserCreateOutputObjects()
 
   fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_OnFly","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_Offline","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_On_Kink","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_Off_Kink","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_On_ArmQt","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_Off_ArmQt","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_On_dEdx","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_Off_dEdx","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_On_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_Off_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+//  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_On_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+//  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_Off_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_On_R120","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_Off_R120","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_On_Z","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
@@ -380,88 +587,40 @@ void AliAnalysisTaskCaloConv::UserCreateOutputObjects()
   fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_Off_Wcut","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
 
   //PHOS PID variations
+  fOutputContainer->Add(new TH3F("PHOS_Re_mvsPt_alpha","Mass vs pt vs PHOS E",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
+  fOutputContainer->Add(new TH3F("PHOS_Re_mvsPt_E","Mass vs pt vs PHOS E",400,0.,1.,npt,0.,ptmax,100,0.,10.)) ;
   fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_all_dist","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
 
-  //PHOS PID module-by-module
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod1_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod2_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod3_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod4_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod5_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod1_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod2_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod3_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod4_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod5_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod1_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod2_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod3_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod4_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod5_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod1_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod2_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod3_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod4_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod5_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod1_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod2_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod3_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod4_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod5_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-
   fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_all_dist","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
 
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod1_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod2_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod3_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod4_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod5_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod1_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod2_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod3_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod4_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod5_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod1_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod2_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod3_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod4_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod5_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod1_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod2_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod3_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod4_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod5_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod1_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod2_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod3_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod4_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod5_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod1_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod2_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod3_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod4_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod5_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
+  char key[155] ;
+  for(Int_t mod=1; mod<=5;mod++){
+    snprintf(key,155,"PHOS_Re_mvsPt_mod%d_single",mod) ;
+    fOutputContainer->Add(new TH2F(key,"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+    snprintf(key,155,"PHOS_Re_mvsPt_mod%d_all",mod) ;
+    fOutputContainer->Add(new TH2F(key,"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+  }
 
   //Single photon spectrum
   //Conversion
-  fOutputContainer->Add(new TH1F("Single_conv","Single photon spectrum",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH1F("Single_conv_OnFly","Single photon spectrum",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH1F("Single_conv_Offline","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("Single_conv_On_Kink","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("Single_conv_Off_Kink","Single photon spectrum",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("Single_conv_On_ArmQt","Single photon spectrum",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("Single_conv_Off_ArmQt","Single photon spectrum",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH1F("Single_conv_On_dEdx","Single photon spectrum",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH1F("Single_conv_Off_dEdx","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("Single_conv_On_Prob","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("Single_conv_Off_Prob","Single photon spectrum",npt,0.,ptmax)) ;
+//  fOutputContainer->Add(new TH1F("Single_conv_On_Prob","Single photon spectrum",npt,0.,ptmax)) ;
+//  fOutputContainer->Add(new TH1F("Single_conv_Off_Prob","Single photon spectrum",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH1F("Single_conv_On_R120","Single photon spectrum",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH1F("Single_conv_Off_R120","Single photon spectrum",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH1F("Single_conv_On_Z","Single photon spectrum",npt,0.,ptmax)) ;
@@ -474,144 +633,150 @@ void AliAnalysisTaskCaloConv::UserCreateOutputObjects()
   fOutputContainer->Add(new TH1F("Single_conv_Off_Wcut","Single photon spectrum",npt,0.,ptmax)) ;
 
   //PHOS
-  fOutputContainer->Add(new TH1F("PHOS_single_mod1_all","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod2_all","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod3_all","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod4_all","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod5_all","Single photon spectrum",npt,0.,ptmax)) ;
-
-  fOutputContainer->Add(new TH1F("PHOS_single_mod1_disp","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod2_disp","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod3_disp","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod4_disp","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod5_disp","Single photon spectrum",npt,0.,ptmax)) ;
-
-  fOutputContainer->Add(new TH1F("PHOS_single_mod1_neutral","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod2_neutral","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod3_neutral","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod4_neutral","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod5_neutral","Single photon spectrum",npt,0.,ptmax)) ;
-
-  fOutputContainer->Add(new TH1F("PHOS_single_mod1_dispneutral","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod2_dispneutral","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod3_dispneutral","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod4_dispneutral","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod5_dispneutral","Single photon spectrum",npt,0.,ptmax)) ;
-
-  fOutputContainer->Add(new TH1F("PHOS_single_mod1_dist1","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod2_dist1","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod3_dist1","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod4_dist1","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod5_dist1","Single photon spectrum",npt,0.,ptmax)) ;
-
-  fOutputContainer->Add(new TH1F("PHOS_single_mod1_dist2","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod2_dist2","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod3_dist2","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod4_dist2","Single photon spectrum",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("PHOS_single_mod5_dist2","Single photon spectrum",npt,0.,ptmax)) ;
-
-  fOutputContainer->Add(new TH3F("EMCAL_Ep_0","PHOS E/p ratio",24,0.,24,48,0.,48,200,0.,2.)) ;
-  fOutputContainer->Add(new TH3F("EMCAL_Ep_1","PHOS E/p ratio",24,0.,24,48,0.,48,200,0.,2.)) ;
-  fOutputContainer->Add(new TH3F("EMCAL_Ep_2","PHOS E/p ratio",24,0.,24,48,0.,48,200,0.,2.)) ;
-  fOutputContainer->Add(new TH3F("EMCAL_Ep_3","PHOS E/p ratio",24,0.,24,48,0.,48,200,0.,2.)) ;
-  fOutputContainer->Add(new TH3F("EMCAL_EpPE","PHOS E/p vs E vs p",200,0.,2.,npt,0.,ptmax,npt,0.,ptmax)) ;
-
-  fOutputContainer->Add(new TH3F("EMCAL_beyond","EMCAL clusters not in EMCAL",200,-300.,300.,200,-500.,0.,200,-100.,100.)) ;
-
-  fOutputContainer->Add(new TH3F("EMCAL_mod0_th1","Inv.Mass distr. per channel",24,0.,24,48,0.,48,200,0.,1.)) ;
-  fOutputContainer->Add(new TH3F("EMCAL_mod1_th1","Inv.Mass distr. per channel",24,0.,24,48,0.,48,200,0.,1.)) ;
-  fOutputContainer->Add(new TH3F("EMCAL_mod2_th1","Inv.Mass distr. per channel",24,0.,24,48,0.,48,200,0.,1.)) ;
-  fOutputContainer->Add(new TH3F("EMCAL_mod3_th1","Inv.Mass distr. per channel",24,0.,24,48,0.,48,200,0.,1.)) ;
-
-  fOutputContainer->Add(new TH3F("EMCAL_mod0_th2","Inv.Mass distr. per channel",24,0.,24,48,0.,48,200,0.,1.)) ;
-  fOutputContainer->Add(new TH3F("EMCAL_mod1_th2","Inv.Mass distr. per channel",24,0.,24,48,0.,48,200,0.,1.)) ;
-  fOutputContainer->Add(new TH3F("EMCAL_mod2_th2","Inv.Mass distr. per channel",24,0.,24,48,0.,48,200,0.,1.)) ;
-  fOutputContainer->Add(new TH3F("EMCAL_mod3_th2","Inv.Mass distr. per channel",24,0.,24,48,0.,48,200,0.,1.)) ;
-
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod0_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod1_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod2_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod3_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod0_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod1_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod2_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod3_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod4_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod5_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod0_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod1_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod2_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod3_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod4_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod5_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod0_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod1_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod2_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod3_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod4_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod5_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod0_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod1_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod2_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod3_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod4_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod5_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod0_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod1_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod2_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod3_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod4_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod5_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod0_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod1_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod2_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod3_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod4_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod5_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod0_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod1_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod2_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod3_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod4_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod5_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod0_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod1_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod2_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod3_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod4_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod5_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod0_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod1_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod2_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod3_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod4_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod5_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod0_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod1_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod2_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod3_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod4_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod5_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("PHOS_single_all_mult","Single photon spectrum",npt,0.,ptmax,150,0.,150.)) ;
+  fOutputContainer->Add(new TH2F("PHOS_single_disp_mult","Single photon spectrum",npt,0.,ptmax,150,0.,150.)) ;
+  fOutputContainer->Add(new TH2F("PHOS_single_neu_mult","Single photon spectrum",npt,0.,ptmax,150,0.,150.)) ;
+   
+  for(Int_t mod=1; mod<=5;mod++){
+    snprintf(key,155,"PHOS_single_mod%d_all",mod) ;
+    fOutputContainer->Add(new TH1F(key,"Single photon spectrum",npt,0.,ptmax)) ;
+    snprintf(key,155,"PHOS_single_mod%d_disp",mod) ;
+    fOutputContainer->Add(new TH1F(key,"Single photon spectrum",npt,0.,ptmax)) ;
+    snprintf(key,155,"PHOS_single_mod%d_neutral",mod) ;
+    fOutputContainer->Add(new TH1F(key,"Single photon spectrum",npt,0.,ptmax)) ;
+    snprintf(key,155,"PHOS_single_mod%d_dispneutral",mod) ;
+    fOutputContainer->Add(new TH1F(key,"Single photon spectrum",npt,0.,ptmax)) ;
+    snprintf(key,155,"PHOS_single_mod%d_dist1",mod) ;
+    fOutputContainer->Add(new TH1F(key,"Single photon spectrum",npt,0.,ptmax)) ;
+    snprintf(key,155,"PHOS_single_mod%d_dist2",mod) ;
+    fOutputContainer->Add(new TH1F(key,"Single photon spectrum",npt,0.,ptmax)) ;
+  }
+
+  for(Int_t mod=0; mod<4;mod++){
+    snprintf(key,155,"EMCAL_mod%d_th1",mod) ;
+    fOutputContainer->Add(new TH3F(key,"Inv.Mass distr. per channel",24,0.,24,48,0.,48,100,0.,0.5)) ;
+    snprintf(key,155,"EMCAL_mod%d_th2",mod) ;
+    fOutputContainer->Add(new TH3F(key,"Inv.Mass distr. per channel",24,0.,24,48,0.,48,100,0.,0.5)) ;
+
+    snprintf(key,155,"EMCAL_Re_mvsPt_mod%d_single",mod) ;
+    fOutputContainer->Add(new TH2F(key,"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+
+    snprintf(key,155,"EMCAL_Re_mvsPt_mod%d_all",mod) ;
+    fOutputContainer->Add(new TH2F(key,"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+    snprintf(key,155,"EMCAL_Re_mvsPt_mod%d_Disp",mod) ;
+    fOutputContainer->Add(new TH2F(key,"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+    snprintf(key,155,"EMCAL_Re_mvsPt_mod%d_TOF",mod) ;
+    fOutputContainer->Add(new TH2F(key,"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+    snprintf(key,155,"EMCAL_Re_mvsPt_mod%d_Neutral",mod) ;
+    fOutputContainer->Add(new TH2F(key,"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+    snprintf(key,155,"EMCAL_Re_mvsPt_mod%d_DispNeutral",mod) ;
+    fOutputContainer->Add(new TH2F(key,"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+
+    snprintf(key,155,"EMCAL_Mi_mvsPt_mod%d_all",mod) ;
+    fOutputContainer->Add(new TH2F(key,"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+    snprintf(key,155,"EMCAL_Mi_mvsPt_mod%d_Disp",mod) ;
+    fOutputContainer->Add(new TH2F(key,"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+    snprintf(key,155,"EMCAL_Mi_mvsPt_mod%d_TOF",mod) ;
+    fOutputContainer->Add(new TH2F(key,"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+    snprintf(key,155,"EMCAL_Mi_mvsPt_mod%d_Neutral",mod) ;
+    fOutputContainer->Add(new TH2F(key,"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+    snprintf(key,155,"EMCAL_Mi_mvsPt_mod%d_DispNeutral",mod) ;
+    fOutputContainer->Add(new TH2F(key,"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
+  }
 
   //MC info
-  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_unitEta","Primary #pi^{0}",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("hMC_CaloConv_allPi0","Primary #pi^{0}",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("hMC_CaloConv_pi0_unitEta","Primary #pi^{0}",npt,0.,ptmax,150,0.,150.)) ;
+  fOutputContainer->Add(new TH2F("hMC_CaloConv_eta_unitEta","Primary #pi^{0}",npt,0.,ptmax,150,0.,150.)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_allpi0","Primary #pi^{0}",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_alleta","Primary #pi^{0}",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0PHOSacc","#pi^{0} decayed in PHOS acc",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_etaPHOSacc","#pi^{0} decayed in PHOS acc",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0EMCALacc","#pi^{0} decayed in EMCAL acc",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_etaEMCALacc","#pi^{0} decayed in EMCAL acc",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_PHOS_conv","#pi^{0} decayed in PHOS acc asnd conv. photon",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_PHOS_conv","#pi^{0} decayed in PHOS acc asnd conv. photon",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_EMCAL_conv","#pi^{0} decayed in EMCAL acc asnd conv. photon",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_EMCAL_conv","#pi^{0} decayed in EMCAL acc asnd conv. photon",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_bothphot_conv","#pi^{0} both photons converted",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0__convPhotInCalo","#pi^{0} photon in calo converted",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0_PHOSacc","#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0_EMCALacc","#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0_PHOSclu","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0_EMCALclu_ptRec","#pi^{0} V0 and cluster in EMCAL found (rec pt)",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0_PHOSclu_ptRec","#pi^{0} V0 and cluster in PHOS found(rec pt)",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0_EMCALclu","#pi^{0} V0 and cluster in EMCAL found",npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("hMC_CaloConv_pi0_v0_PHOSclu_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax)) ;
-  fOutputContainer->Add(new TH2F("hMC_CaloConv_pi0_v0_EMCALclu_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_bothphot_conv","#pi^{0} both photons converted",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_convPhotInCalo","#pi^{0} photon in calo converted",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_convPhotInCalo","#pi^{0} photon in calo converted",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0onfly_PHOSacc","#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0onfly_PHOSacc","#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0offline_PHOSacc","#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0offline_PHOSacc","#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0onfly_EMCALacc","#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0onfly_EMCALacc","#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0offline_EMCALacc","#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0offline_EMCALacc","#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0onfly_PHOSclu","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0onfly_PHOSclu","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0onfly_PHOSclu_pid","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0onfly_PHOSclu_pid","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0offline_PHOSclu","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0offline_PHOSclu","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0offline_PHOSclu_pid","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0offline_PHOSclu_pid","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0onfly_PHOSclu_good","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0onfly_PHOSclu_good","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0offline_PHOSclu_good","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0offline_PHOSclu_good","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0onfly_PHOSclu_mod1","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0onfly_PHOSclu_mod1","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0onfly_PHOSclu_mod2","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0onfly_PHOSclu_mod2","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0onfly_PHOSclu_mod3","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0onfly_PHOSclu_mod3","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0onfly_PHOSclu_mod4","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0onfly_PHOSclu_mod4","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0onfly_PHOSclu_mod5","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0onfly_PHOSclu_mod5","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0offline_PHOSclu_mod1","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0offline_PHOSclu_mod1","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0offline_PHOSclu_mod2","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0offline_PHOSclu_mod2","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0offline_PHOSclu_mod3","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0offline_PHOSclu_mod3","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0offline_PHOSclu_mod4","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0offline_PHOSclu_mod4","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0offline_PHOSclu_mod5","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0offline_PHOSclu_mod5","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0on_PHOSclu_ptRec","#pi^{0} V0 and cluster in PHOS found(rec pt)",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0on_PHOSclu_ptRec","#pi^{0} V0 and cluster in PHOS found(rec pt)",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0off_PHOSclu_ptRec","#pi^{0} V0 and cluster in PHOS found(rec pt)",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_eta_v0off_PHOSclu_ptRec","#pi^{0} V0 and cluster in PHOS found(rec pt)",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("hMC_CaloConv_pi0_v0on_PHOSclu_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("hMC_CaloConv_eta_v0on_PHOSclu_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("hMC_CaloConv_pi0_v0off_PHOSclu_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("hMC_CaloConv_eta_v0off_PHOSclu_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax)) ;
+
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0off_EMCALclu_ptRec","#pi^{0} V0 and cluster in EMCAL found (rec pt)",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0on_EMCALclu_ptRec","#pi^{0} V0 and cluster in EMCAL found (rec pt)",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0onfly_EMCALclu","#pi^{0} V0 and cluster in EMCAL found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0onfly_EMCALclu_pid","#pi^{0} V0 and cluster in EMCAL found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0offline_EMCALclu","#pi^{0} V0 and cluster in EMCAL found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0offline_EMCALclu_pid","#pi^{0} V0 and cluster in EMCAL found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0onfly_EMCALclu_good","#pi^{0} V0 and cluster in EMCAL found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0offline_EMCALclu_good","#pi^{0} V0 and cluster in EMCAL found",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("hMC_CaloConv_pi0_v0on_EMCALclu_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH2F("hMC_CaloConv_pi0_v0off_EMCALclu_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax)) ;
+
+  fOutputContainer->Add(new TH3F("hMC_Resid_PHOS_Phot_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
+  fOutputContainer->Add(new TH3F("hMC_Resid_PHOS_Pi0_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
+  fOutputContainer->Add(new TH3F("hMC_Resid_PHOS_eta_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
+  fOutputContainer->Add(new TH3F("hMC_Resid_PHOS_K_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
+  fOutputContainer->Add(new TH3F("hMC_Resid_PHOS_pi_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
+  fOutputContainer->Add(new TH3F("hMC_Resid_PHOS_pbar_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
+  fOutputContainer->Add(new TH3F("hMC_Resid_PHOS_other_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
+  fOutputContainer->Add(new TH3F("hMC_Resid_EMCAL_Phot_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
+  fOutputContainer->Add(new TH3F("hMC_Resid_EMCAL_Pi0_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
+  fOutputContainer->Add(new TH3F("hMC_Resid_EMCAL_eta_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
+  fOutputContainer->Add(new TH3F("hMC_Resid_EMCAL_K_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
+  fOutputContainer->Add(new TH3F("hMC_Resid_EMCAL_pi_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
+  fOutputContainer->Add(new TH3F("hMC_Resid_EMCAL_pbar_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
+  fOutputContainer->Add(new TH3F("hMC_Resid_EMCAL_other_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
+
 
   fOutputContainer->Add(new TH1F("hMC_CaloConv_phot","Primary photons",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH1F("hMC_CaloConv_gammaPHOSacc","Photons in PHOS acc",npt,0.,ptmax)) ;
@@ -620,13 +785,37 @@ void AliAnalysisTaskCaloConv::UserCreateOutputObjects()
   fOutputContainer->Add(new TH1F("hMC_CaloConv_gamma_v0","Converted photons with V0",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("hMC_CaloConv_gamma_v0_devsE","Converted photons with V0",200,-1.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH1F("hMC_CaloConv_gamma_PHOSclu","Photons with cluster in PHOS",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_gamma_PHOSclu_dist1","Photons with cluster in PHOS",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_gamma_PHOSclu_dist2","Photons with cluster in PHOS",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH1F("hMC_CaloConv_gamma_EMCALclu","Photons with cluster in EMCAL",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_gamma_EMCALclu_dist1","Photons with cluster in EMCAL",npt,0.,ptmax)) ;
+  fOutputContainer->Add(new TH1F("hMC_CaloConv_gamma_EMCALclu_dist2","Photons with cluster in EMCAL",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH1F("hMC_CaloConv_gamma_PHOSclu_recE","Photons with cluster in PHOS",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH1F("hMC_CaloConv_gamma_EMCALclu_recE","Photons with cluster in EMCAL",npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("hMC_CaloConv_gamma_PHOSclu_devsE","Photons with cluster in PHOS",200,-1.,1.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("hMC_CaloConv_gamma_EMCALclu_devsE","Photons with cluster in EMCAL",200,-1.,1.,npt,0.,ptmax)) ;
        
 
+  //Non-linearity test
+  char keym[55] ;
+  for(Int_t iw=0;iw<10;iw++){ //resolution
+    for(Int_t in=0;in<10;in++){
+      snprintf(keym,55,"hMC_nonlinearity_w%d_n%d",iw,in) ;
+      fOutputContainer->Add(new TH2F(keym,"m vs pt, nonlinearity test" ,200,0.,0.5,npt,0.,ptmax)) ;
+      snprintf(keym,55,"hMC_nonlinearity_ConvPHOS_w%d_n%d",iw,in) ;
+      fOutputContainer->Add(new TH2F(keym,"m vs pt, nonlinearity test" ,200,0.,0.5,npt,0.,ptmax)) ;
+      snprintf(keym,55,"hMC_nonlinearity_EMCAL_w%d_n%d",iw,in) ;
+      fOutputContainer->Add(new TH2F(keym,"m vs pt, nonlinearity test" ,200,0.,0.5,npt,0.,ptmax)) ;
+      snprintf(keym,55,"hMC_CaloConv_pi0_v0onfly_PHOSclu_w%d_n%d",iw,in) ;
+      fOutputContainer->Add(new TH1F(keym,"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+      snprintf(keym,55,"hMC_CaloConv_pi0_v0onfly_ConvPHOSclu_w%d_n%d",iw,in) ;
+      fOutputContainer->Add(new TH1F(keym,"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+      snprintf(keym,55,"hMC_CaloConv_pi0_v0onfly_EMCALclu_w%d_n%d",iw,in) ;
+      fOutputContainer->Add(new TH1F(keym,"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
+    }
+  }
+
+
   fOutputContainer->Add(new TH3F("All_chi2_eta_pt","MC chi2 vs eta vs phi",100,0.,100.,200,-2.,2.,npt,0.,ptmax)) ;
   fOutputContainer->Add(new TH2F("All_w_vs_m","MC w vs m",300,0.,TMath::Pi(),400,0.,1.)) ;
   fOutputContainer->Add(new TH3F("MC_V0_pt_eta_phi","MC pt vs eta vs phi",npt,0.,ptmax,200,-2.,2.,200,0.,TMath::TwoPi())) ;
@@ -661,7 +850,7 @@ void AliAnalysisTaskCaloConv::UserCreateOutputObjects()
      }
    }
    if(!fEMCALgeom){
-     fEMCALgeom = new AliEMCALGeoUtils("EMCAL_FIRSTYEAR");
+     fEMCALgeom = AliEMCALGeometry::GetInstance("EMCAL_FIRSTYEARV1");
      for(Int_t mod=0; mod < (fEMCALgeom->GetEMCGeometry())->GetNumberOfSuperModules(); mod++){ //<---Gustavo, could you check???
        if(esd){
          const TGeoHMatrix* m=esd->GetEMCALMatrix(mod) ;
@@ -673,7 +862,7 @@ void AliAnalysisTaskCaloConv::UserCreateOutputObjects()
 }
 //________________________________________________________________
 void AliAnalysisTaskCaloConv::SelectPHOSPhotons(){
-
+  //SelectPHOSPhotons
   // Loop over all CaloClusters 
   if(fPHOSEvent)
     fPHOSEvent->Clear() ;
@@ -693,6 +882,13 @@ void AliAnalysisTaskCaloConv::SelectPHOSPhotons(){
       continue ;
     TLorentzVector p ;
     clu ->GetMomentum(p ,vtx);
+    if(p.Energy()<0.25){
+      continue ;
+    }
+    if(clu->GetNCells()<=2){
+      continue ;
+    }
+
     Bool_t isNeutral = kTRUE ;
     Bool_t isDispOK = kTRUE ;
     Bool_t isTOFOK = kTRUE ;
@@ -717,19 +913,24 @@ void AliAnalysisTaskCaloConv::SelectPHOSPhotons(){
     TVector3 global(xyz) ;
     Int_t relid[4] ;
     if(!fPHOSgeom->GlobalPos2RelId(global,relid)){
-      FillHistogram("PHOS_beyond",xyz[0],xyz[1],xyz[2]) ;
       printf("PHOS_beyond: x=%f, y=%f, z=%f \n",xyz[0],xyz[1],xyz[2]) ;
       continue ;
     }
     iMod=relid[0] ;
     iX=relid[2];
     iZ=relid[3] ;
+    if(!IsGoodChannel("PHOS",iMod,iX,iZ))
+      continue ;
+
+    Bool_t closeToBad=(clu->GetDistanceToBadChannel()>fBadDistCutPHOS) ;
 
     p.SetBit(kCaloPIDdisp,isDispOK) ;
     p.SetBit(kCaloPIDtof,isTOFOK) ;
     p.SetBit(kCaloPIDneutral,isNeutral) ;
-    p.SetBit(BIT(16+iMod),kTRUE) ;
+    p.SetBit(BIT(17+iMod),kTRUE) ;
+    p.SetBit(kCaloDistBad,closeToBad) ;
     new((*fPHOSEvent)[inPHOS]) TLorentzVector(p) ;
+    fGammaPHOS[inPHOS] = i ;
     inPHOS++ ;
 
 
@@ -737,27 +938,40 @@ void AliAnalysisTaskCaloConv::SelectPHOSPhotons(){
     Double_t pt= p.Pt() ;
     TString skey="PHOS_single_"; skey+="mod" ; skey+=iMod ; skey+="_all" ;
     FillHistogram(skey,pt) ;
+    FillHistogram("PHOS_single_all_mult",pt,fCentr) ;
     if(isDispOK){
       skey="PHOS_single_"; skey+="mod" ; skey+=iMod ; skey+="_disp" ;
+      FillHistogram("PHOS_single_disp_mult",pt,fCentr) ;
       FillHistogram(skey,pt) ;
     }
     if(isNeutral){
       skey="PHOS_single_"; skey+="mod" ; skey+=iMod ; skey+="_neutral" ;
       FillHistogram(skey,pt) ;
+      FillHistogram("PHOS_single_neu_mult",pt,fCentr) ;
     }
     if(isNeutral && isDispOK){
       skey="PHOS_single_"; skey+="mod" ; skey+=iMod ; skey+="_dispneutral" ;
       FillHistogram(skey,pt) ;
     }
     //Distance to bad channel
-    if(clu->GetDistanceToBadChannel()>2.2){
+    if(clu->GetDistanceToBadChannel()>fBadDistCutPHOS){
       skey="PHOS_single_"; skey+="mod" ; skey+=iMod ; skey+="_dist1" ;
       FillHistogram(skey,pt) ;
     }
-    if(clu->GetDistanceToBadChannel()>4.4){
+    if(clu->GetDistanceToBadChannel()>2.*fBadDistCutPHOS){
       skey="PHOS_single_"; skey+="mod" ; skey+=iMod ; skey+="_dist2" ;
       FillHistogram(skey,pt) ;
     }
+    //Fill QA
+    if(clu->E()>0.5){
+      skey="hQA_PHOS_mod"; skey+=iMod; skey+="_soft" ; 
+      FillHistogram(skey,iX-0.5, iZ-0.5,1.) ;
+      if(clu->E()>1.5){
+        skey="hQA_PHOS_mod"; skey+=iMod; skey+="_hard" ;
+        FillHistogram(skey,iX-0.5, iZ-0.5,1.) ;
+      }
+    }
 
     //Fill histogams for calibration
     if(clu->E()<fPi0Thresh1 ) continue;
@@ -775,7 +989,7 @@ void AliAnalysisTaskCaloConv::SelectPHOSPhotons(){
 }
 //____________________________________________________________
 void AliAnalysisTaskCaloConv::SelectEMCALPhotons(){
-
+  //SelectEMCALPhotons
   // Loop over all CaloClusters
   if(fEMCALEvent)
     fEMCALEvent->Clear() ;
@@ -785,7 +999,7 @@ void AliAnalysisTaskCaloConv::SelectEMCALPhotons(){
   TLorentzVector pi0 ;
 
   //vertex
-  Double_t vtx[3];
+  Double_t vtx[3]={0.,0.,0.};
   vtx[0] = fESDEvent->GetPrimaryVertex()->GetX();
   vtx[1] = fESDEvent->GetPrimaryVertex()->GetY();
   vtx[2] = fESDEvent->GetPrimaryVertex()->GetZ();
@@ -825,13 +1039,27 @@ void AliAnalysisTaskCaloConv::SelectEMCALPhotons(){
    
       iX=iphi+1 ;
       iZ=ieta+1 ;
+      if(!IsGoodChannel("EMCAL",iMod,iX,iZ))
+        continue ;
       p.SetBit(kCaloPIDdisp,isDispOK) ;
       p.SetBit(kCaloPIDtof,isTOFOK) ;
       p.SetBit(kCaloPIDneutral,isNeutral) ;
       p.SetBit(BIT(17+imod),kTRUE) ;
       new((*fEMCALEvent)[inEMCAL]) TLorentzVector(p) ;
+      fGammaEMCAL[inEMCAL] = i ;
       inEMCAL++ ;
  
+
+      //Fill QA histograms
+      if(clu->E()>0.5 && iMod>=0){ //Sometimes modules is negative not found??
+        TString skey="hQA_EMCAL_SM";skey+=iMod ; skey+="_soft" ;
+        FillHistogram(skey,iX-0.5, iZ-0.5,1.) ;
+        if(clu->E()>1.5){
+          skey="hQA_EMCAL_SM";skey+=iMod ; skey+="_hard" ;
+          FillHistogram(skey,iX-0.5, iZ-0.5,1.) ;
+        }
+      }
+
       //Fill histograms for recalibration
       if(clu->E()<fPi0Thresh1) continue ;
       for(Int_t iconv=0;iconv<fConvEvent->GetEntriesFast();iconv++){
@@ -856,7 +1084,8 @@ void AliAnalysisTaskCaloConv::SelectConvPhotons(){
   const Double_t cutSigmaMass=0.0001;  //Constraint on photon mass
   const Bool_t useImprovedVertex=kTRUE ; //Use verted with converted photon?
 //  const Double_t zrSlope = TMath::Tan(2*TMath::ATan(TMath::Exp(-fetaCut)));
-  const Double_t zrSlope = TMath::Tan(2*TMath::ATan(TMath::Exp(-1.2)));
+  const Double_t zrSlope12 = TMath::Tan(2*TMath::ATan(TMath::Exp(-1.2)));
+  const Double_t zrSlope09 = TMath::Tan(2*TMath::ATan(TMath::Exp(-0.9)));
   const Double_t zOffset = 7.;
 
   if(!fConvEvent)
@@ -887,86 +1116,153 @@ void AliAnalysisTaskCaloConv::SelectConvPhotons(){
     AliKFParticle posKF(*paramPos,-11);
     AliKFParticle photKF(negKF,posKF) ;
     photKF.SetMassConstraint(0,cutSigmaMass);
-    TLorentzVector photLV;
-    photLV.SetXYZM(negKF.Px()+posKF.Px(),negKF.Py()+posKF.Py(),negKF.Pz()+negKF.Pz(),0.) ;
 
     if(useImprovedVertex){
       AliKFVertex primaryVertexImproved(*(fESDEvent->GetPrimaryVertex()));
-      primaryVertexImproved+=photKF;
-      photKF.SetProductionVertex(primaryVertexImproved);
+      //if Vtx do created
+      if(primaryVertexImproved.GetNContributors()>1){
+        primaryVertexImproved+=photKF;
+        photKF.SetProductionVertex(primaryVertexImproved);
+      }
     }
-
-    Double_t m, width ;
+    Double_t m=0., width=0. ;
     photKF.GetMass(m,width);
 
+    TLorentzVector photLV;
+//    photLV.SetXYZM(negKF.Px()+posKF.Px(),negKF.Py()+posKF.Py(),negKF.Pz()+negKF.Pz(),0.) ;
+//    photLV.SetXYZT(photKF.GetPx(),photKF.GetPy(),photKF.GetPz(),photKF.GetE()) ;
+    photLV.SetXYZM(photKF.GetPx(),photKF.GetPy(),photKF.GetPz(),0.) ;  //Produces slightly better pi0 width
+
     //Parameters for correction function
     Double_t a[3]={photLV.Pt(),photLV.Eta(),m} ;
-    fConvCFCont->Fill(a,0) ;
+    if(fToUseCF)
+      fConvCFCont->Fill(a,0) ;
 
     //select V0 finder
     Bool_t isOnFly=kTRUE ;
     //select V0Finder
     if (v0->GetOnFlyStatus()){
-      fConvCFCont->Fill(a,1) ;
+      if(fToUseCF)
+        fConvCFCont->Fill(a,1) ;
     }
     else{
       isOnFly=kFALSE ;
-      fConvCFCont->Fill(a,2) ;
+      if(fToUseCF)
+        fConvCFCont->Fill(a,2) ;
+    }
+
+    //Number of TPC clusters
+    if(neg->GetNcls(1) <2 || pos->GetNcls(1) <2){
+      continue ; 
     }
 
     //remove like sign pairs 
     if(pos->GetSign() == neg->GetSign()){ 
       continue ;
     }
-    if(isOnFly)
-      fConvCFCont->Fill(a,3) ;
-    else
-      fConvCFCont->Fill(a,4) ;
-
+    if(fToUseCF){
+      if(isOnFly)
+        fConvCFCont->Fill(a,3) ;
+      else
+        fConvCFCont->Fill(a,4) ;
+    }
 
     if( !(pos->GetStatus() & AliESDtrack::kTPCrefit) ||
         !(neg->GetStatus() & AliESDtrack::kTPCrefit) ){
       continue;
     }
-    if(isOnFly)
-      fConvCFCont->Fill(a,5) ;
-    else
-      fConvCFCont->Fill(a,6) ;
+    if(fToUseCF){
+      if(isOnFly)
+        fConvCFCont->Fill(a,5) ;
+      else
+        fConvCFCont->Fill(a,6) ;
+    }
  
-    Bool_t isKink=kFALSE ;
     if( neg->GetKinkIndex(0) > 0 ||
         pos->GetKinkIndex(0) > 0) {
-      isKink=kTRUE;
-    }
-    if(!isKink){
-      if(isOnFly)
-        fConvCFCont->Fill(a,7) ;
-      else
-        fConvCFCont->Fill(a,8) ;
+      continue ;
     }
 
-    Bool_t isdEdx=kTRUE;
+    //First rough PID
     if( fESDpid->NumberOfSigmasTPC(pos,AliPID::kElectron)<fnSigmaBelowElectronLine ||
         fESDpid->NumberOfSigmasTPC(pos,AliPID::kElectron)>fnSigmaAboveElectronLine ||
         fESDpid->NumberOfSigmasTPC(neg,AliPID::kElectron)<fnSigmaBelowElectronLine ||
         fESDpid->NumberOfSigmasTPC(neg,AliPID::kElectron)>fnSigmaAboveElectronLine ){
-         isdEdx=kFALSE;
+        continue ;
     }
-    if( pos->P()>fpnSigmaAbovePionLine){
-      if(fESDpid->NumberOfSigmasTPC(pos,AliPID::kElectron)>fnSigmaBelowElectronLine &&
-         fESDpid->NumberOfSigmasTPC(pos,AliPID::kElectron)<fnSigmaAboveElectronLine&&
-         fESDpid->NumberOfSigmasTPC(pos,AliPID::kPion)<fnSigmaAbovePionLine){
-          isdEdx=kFALSE;
+    const Double_t minPnSigmaAbovePionLine = 1. ;
+    const Double_t maxPnSigmaAbovePionLine = 3. ;
+    const Double_t nSigmaAbovePionLine = 0 ;
+    if(pos->P()>minPnSigmaAbovePionLine && pos->P()<maxPnSigmaAbovePionLine ){
+      if(fESDpid->NumberOfSigmasTPC(pos,AliPID::kPion)<nSigmaAbovePionLine){
+          continue ;
+        }
+    }
+    if(neg->P()>minPnSigmaAbovePionLine && neg->P()<maxPnSigmaAbovePionLine){
+      if(fESDpid->NumberOfSigmasTPC(neg,AliPID::kPion)<nSigmaAbovePionLine){
+          continue ;
+      }
+    }
+    //Strict dEdx
+    Bool_t isdEdx=kTRUE;
+    if(pos->P()>minPnSigmaAbovePionLine && pos->P()<maxPnSigmaAbovePionLine ){
+      if(fESDpid->NumberOfSigmasTPC(pos,AliPID::kPion)<2.){
+        isdEdx=kFALSE;
+      }
+    }
+    if(neg->P()>minPnSigmaAbovePionLine && neg->P()<maxPnSigmaAbovePionLine){
+      if(fESDpid->NumberOfSigmasTPC(neg,AliPID::kPion)<2.){
+        isdEdx=kFALSE;
+      }
+    }
+
+    //Kaon rejection
+    const Double_t minPKaonRejection=1.5 ;
+    const Double_t sigmaAroundLine=1. ;
+    if(neg->P()<minPKaonRejection ){
+      if(TMath::Abs(fESDpid->NumberOfSigmasTPC(neg,AliPID::kKaon))<sigmaAroundLine){
+        isdEdx=kFALSE;
       }
     }
-    if( neg->P()>fpnSigmaAbovePionLine){
-      if(fESDpid->NumberOfSigmasTPC(neg,AliPID::kElectron)>fnSigmaBelowElectronLine &&
-         fESDpid->NumberOfSigmasTPC(neg,AliPID::kElectron)<fnSigmaAboveElectronLine&&
-         fESDpid->NumberOfSigmasTPC(neg,AliPID::kPion)<fnSigmaAbovePionLine){
-          isdEdx=kFALSE;
+    if(pos->P()<minPKaonRejection ){
+      if(TMath::Abs(fESDpid->NumberOfSigmasTPC(pos,AliPID::kKaon))<sigmaAroundLine){
+        isdEdx=kFALSE;
       }
     }
 
+    //Proton rejection
+    const Double_t minPProtonRejection=2. ;
+    if(neg->P()<minPProtonRejection){
+      if(TMath::Abs(fESDpid->NumberOfSigmasTPC(neg,AliPID::kProton))<sigmaAroundLine){
+        isdEdx=kFALSE;
+      }
+    }
+    if(pos->P()<minPProtonRejection ){
+      if(TMath::Abs(fESDpid->NumberOfSigmasTPC(pos,AliPID::kProton))<sigmaAroundLine){
+        isdEdx=kFALSE;
+      }
+    }
+
+    const Double_t minPPionRejection=0.5 ;
+    if(neg->P()<minPPionRejection ){
+      if(TMath::Abs(fESDpid->NumberOfSigmasTPC(neg,AliPID::kPion))<sigmaAroundLine){
+        isdEdx=kFALSE;
+      }
+    }
+    if(pos->P()<minPPionRejection ){
+      if( TMath::Abs(fESDpid->NumberOfSigmasTPC(pos,AliPID::kPion))<sigmaAroundLine){
+        isdEdx=kFALSE;
+      }
+    }
+
+
+    if(isdEdx){
+      FillHistogram("hdEdx",paramPos->GetP(),pos->GetTPCsignal()) ;
+      FillHistogram("hdEdx",paramNeg->GetP(),neg->GetTPCsignal()) ;
+    }
+
+
     //Check the pid probability
     Bool_t isProb=kTRUE ;
     Double_t posProbArray[10];
@@ -976,57 +1272,67 @@ void AliAnalysisTaskCaloConv::SelectConvPhotons(){
     if(negProbArray[AliPID::kElectron]<fprobCut || posProbArray[AliPID::kElectron]<fprobCut){
       isProb=kFALSE ;
     }
-    if(!isKink && isProb){
+    if(fToUseCF){
       if(isOnFly)
         fConvCFCont->Fill(a,9) ;
       else
         fConvCFCont->Fill(a,10) ;
     }
 
-    Double_t v0x,v0y,v0z;
+    Double_t v0x=0.,v0y=0.,v0z=0.;
     v0->GetXYZ(v0x,v0y,v0z) ;
     Double_t r=TMath::Sqrt(v0x*v0x + v0y*v0y) ;
+    //Remove Dalitz
+    const Double_t rMin=2.8 ;
+    if(r<rMin)
+      continue ;
     if(r>fmaxR){ // cuts on distance from collision point
       continue;
     }
     Bool_t isStrictR=kFALSE ;
     if(r<120.)
       isStrictR=kTRUE ;
-    if(isOnFly)
-      fConvCFCont->Fill(a,11) ;
-    else
-      fConvCFCont->Fill(a,12) ;
+    if(fToUseCF){
+      if(isOnFly)
+        fConvCFCont->Fill(a,11) ;
+      else
+        fConvCFCont->Fill(a,12) ;
+    }
 
 
-    if((TMath::Abs(v0z)*zrSlope)-zOffset > r ){ // cuts out regions where we do not reconstruct
+    if((TMath::Abs(v0z)*zrSlope12)-zOffset > r ){ // cuts out regions where we do not reconstruct
       continue;
     }
-    if(isOnFly)
-      fConvCFCont->Fill(a,13) ;
-    else
-      fConvCFCont->Fill(a,14) ;
+    if(fToUseCF){
+      if(isOnFly)
+        fConvCFCont->Fill(a,13) ;
+      else
+        fConvCFCont->Fill(a,14) ;
+    }
 
     if(TMath::Abs(v0z) > fmaxZ ){ // cuts out regions where we do not reconstruct
       continue;
     }
     Bool_t isStrictZ=kFALSE ;
-    const Double_t strictZcut=0.9 ;
-    if((TMath::Abs(v0z)*zrSlope)-zOffset < strictZcut*r || TMath::Abs(v0z) < strictZcut*fmaxZ)
+    if((TMath::Abs(v0z)*zrSlope09)-zOffset < r )
       isStrictZ=kTRUE ;
 
-    if(isOnFly)
-      fConvCFCont->Fill(a,15) ;
-    else
-      fConvCFCont->Fill(a,16) ;
-
+    if(fToUseCF){
+      if(isOnFly)
+        fConvCFCont->Fill(a,15) ;
+      else
+        fConvCFCont->Fill(a,16) ;
+    }
  
     if(photKF.GetNDF()<=0){
       continue;
     }
-    if(isOnFly)
-      fConvCFCont->Fill(a,17) ;
-    else
-      fConvCFCont->Fill(a,18) ;
+    if(fToUseCF){
+      if(isOnFly)
+        fConvCFCont->Fill(a,17) ;
+      else
+        fConvCFCont->Fill(a,18) ;
+    }
 
     Double_t chi2V0 = photKF.GetChi2()/photKF.GetNDF();
     FillHistogram("All_chi2_eta_pt",chi2V0,photLV.Eta(),photLV.Pt()) ;
@@ -1039,17 +1345,26 @@ void AliAnalysisTaskCaloConv::SelectConvPhotons(){
       isStrictChi=kTRUE;
     }
  
-    if(isOnFly)
-      fConvCFCont->Fill(a,19) ;
-    else
-      fConvCFCont->Fill(a,20) ;
+    if(fToUseCF){
+      if(isOnFly)
+        fConvCFCont->Fill(a,19) ;
+      else
+        fConvCFCont->Fill(a,20) ;
+    }
 
     const Double_t wideEtaCut=1.2 ;
     if(TMath::Abs(photLV.Eta())> wideEtaCut){
       continue;
     }
+    if(TMath::Abs(paramPos->Eta())> wideEtaCut ||  
+       TMath::Abs(paramNeg->Eta())> wideEtaCut ){
+      continue ;
+    }
+
     Bool_t isWideEta=kTRUE ;
-    if(TMath::Abs(photLV.Eta())< fetaCut){
+    if(TMath::Abs(photLV.Eta())< fetaCut && 
+       TMath::Abs(paramPos->Eta())<fetaCut  && 
+       TMath::Abs(paramNeg->Eta()) < fetaCut){
       isWideEta=kFALSE;
     }
     
@@ -1057,18 +1372,33 @@ void AliAnalysisTaskCaloConv::SelectConvPhotons(){
     if(photLV.Pt()<fptCut){
       continue;
     }
-    if(isOnFly)
-      fConvCFCont->Fill(a,21) ;
-    else
-      fConvCFCont->Fill(a,22) ;
+    if(fToUseCF){
+      if(isOnFly)
+        fConvCFCont->Fill(a,21) ;
+      else
+        fConvCFCont->Fill(a,22) ;
+    }
 
+
+    //Just QA plot
+    if(photLV.Pt()>0.5){
+       Double_t phi=photLV.Phi() ;
+       while(phi<0.)phi+=TMath::TwoPi() ;
+       while(phi>TMath::TwoPi())phi-=TMath::TwoPi() ;
+       FillHistogram("hQA_ConvPhiEta",phi,photLV.Eta()) ; 
+    }
     
     Double_t w=PlanarityAngle(paramPos,paramNeg) ;
     Bool_t isPlanarityCut = (0.08-0.22*w > m || 0.15*(w-2.4)>m) ;
     FillHistogram("All_w_vs_m",w,m) ;
 
+    const Double_t armenterosAlphaCut=0.05 ;
+    Double_t armenterosQtAlfa[2]={0.,0.}  ;
+    GetArmenterosQtAlfa(&posKF, &negKF, &photKF, armenterosQtAlfa ) ;
+    Bool_t isArmQt=(armenterosQtAlfa[1]<armenterosAlphaCut) ;
+
     photLV.SetBit(kConvOnFly,isOnFly) ;
-    photLV.SetBit(kConvKink,isKink) ;
+    photLV.SetBit(kConvArmQt,isArmQt) ;
     photLV.SetBit(kConvdEdx,isdEdx) ;
     photLV.SetBit(kConvProb,isProb) ;
     photLV.SetBit(kConvR,isStrictR) ;
@@ -1078,50 +1408,47 @@ void AliAnalysisTaskCaloConv::SelectConvPhotons(){
     photLV.SetBit(kConvPlan,isPlanarityCut) ;
 
     new((*fConvEvent)[inConv]) TLorentzVector(photLV) ;
+    fGammaV0s[inConv] = iv0 ;
     inConv++ ;
 
     //Single photon spectrum
     Double_t pt=photLV.Pt() ;
     if(isOnFly){
       //Default
-      if(!isKink && isdEdx && isProb && !isWideEta)
+      if(!isWideEta)
         FillHistogram("Single_conv_OnFly",pt) ;
-      if(isdEdx && isProb && !isWideEta)
-        FillHistogram("Single_conv_On_Kink",pt) ;
-      if(!isKink && isProb && !isWideEta)
+      if(isdEdx && !isWideEta)
         FillHistogram("Single_conv_On_dEdx",pt) ;
-      if(!isKink && isdEdx && !isWideEta)
-        FillHistogram("Single_conv_On_Prob",pt) ;
-      if(!isKink && isdEdx && isProb && !isWideEta && isStrictR)
+      if(!isWideEta && isStrictR)
         FillHistogram("Single_conv_On_R120",pt) ; 
-      if(!isKink && isdEdx && isProb && !isWideEta && isStrictZ)
+      if( !isWideEta && isStrictZ)
         FillHistogram("Single_conv_On_Z",pt) ;
-      if(!isKink && isdEdx && isProb && !isWideEta && isStrictChi)
+      if(!isWideEta && isStrictChi)
         FillHistogram("Single_conv_On_chi",pt) ;
-      if(!isKink && isdEdx && isProb)
+      if(1)
         FillHistogram("Single_conv_On_Eta",pt) ;
-      if(!isKink && isdEdx && isProb && !isWideEta && isPlanarityCut)
+      if(!isWideEta && isPlanarityCut)
         FillHistogram("Single_conv_On_Wcut",pt) ;
+      if(!isWideEta && isArmQt)
+        FillHistogram("Single_conv_On_ArmQt",pt) ;
     }
     else{
-      if(!isKink && isdEdx && isProb && !isWideEta)
+      if(!isWideEta)
         FillHistogram("Single_conv_Offline",pt) ;
-      if(isdEdx && isProb && !isWideEta)
-        FillHistogram("Single_conv_Off_Kink",pt) ;
-      if(!isKink && isProb && !isWideEta)
+      if(isdEdx && !isWideEta)
         FillHistogram("Single_conv_Off_dEdx",pt) ;
-      if(!isKink && isdEdx && !isWideEta)
-        FillHistogram("Single_conv_Off_Prob",pt) ;
-      if(!isKink && isdEdx && isProb && !isWideEta && isStrictR)
+      if(!isWideEta && isStrictR)
         FillHistogram("Single_conv_Off_R120",pt) ; 
-      if(!isKink && isdEdx && isProb && !isWideEta && isStrictZ)
+      if(!isWideEta && isStrictZ)
         FillHistogram("Single_conv_Off_Z",pt) ;
-      if(!isKink && isdEdx && isProb && !isWideEta && isStrictChi)
+      if(!isWideEta && isStrictChi)
         FillHistogram("Single_conv_Off_chi",pt) ;
-      if(!isKink && isdEdx && isProb)
+      if(1)
         FillHistogram("Single_conv_Off_Eta",pt) ;
-      if(!isKink && isdEdx && isProb && !isWideEta && isPlanarityCut)
+      if(!isWideEta && isPlanarityCut)
         FillHistogram("Single_conv_Off_Wcut",pt) ;
+      if(!isWideEta && isArmQt)
+        FillHistogram("Single_conv_Off_ArmQt",pt) ;
     }
 
     //Fill MC information
@@ -1129,10 +1456,11 @@ void AliAnalysisTaskCaloConv::SelectConvPhotons(){
       TParticle * negativeMC = fStack->Particle(TMath::Abs(neg->GetLabel()));
       TParticle * positiveMC = fStack->Particle(TMath::Abs(pos->GetLabel()));
 
-      if(negativeMC && positiveMC){
-        if(negativeMC->GetMother(0) != positiveMC->GetMother(0))
+      if(!negativeMC || !positiveMC)
           continue ;
-      }
+
+      if(negativeMC->GetMother(0) != positiveMC->GetMother(0))
+        continue ;
 
       if(TMath::Abs(negativeMC->GetPdgCode())!=11 || TMath::Abs(positiveMC->GetPdgCode())!=11){
         continue;
@@ -1191,7 +1519,15 @@ void AliAnalysisTaskCaloConv::FillRealMixed(){
   Int_t nEMCAL=fEMCALEvent->GetEntriesFast() ;
   Int_t nConv = fConvEvent->GetEntriesFast() ;
   //Some QA histograms
-  FillHistogram("hRunConvs",run,double(nConv)) ;
+  //Calculate number of good converion photons
+  Int_t nConvGood=0 ;
+  for(Int_t iConv = 0; iConv<nConv; iConv++){
+    TLorentzVector * cnv = static_cast<TLorentzVector*>(fConvEvent->At(iConv)) ;
+    if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvEta)){
+      nConvGood++ ;
+    }
+  }
+  FillHistogram("hRunConvs",run,double(nConvGood)) ;
   FillHistogram("hRunPHOS", run,double(nPHOS)) ;
   FillHistogram("hRunEMCAL",run,double(nEMCAL)) ;
 
@@ -1201,9 +1537,26 @@ void AliAnalysisTaskCaloConv::FillRealMixed(){
     for(Int_t iConv = 0; iConv<nConv; iConv++){
       TLorentzVector * cnv = static_cast<TLorentzVector*>(fConvEvent->At(iConv)) ;
       TLorentzVector pi=*cal + *cnv ;
-      if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
-        //Non-linearity check
+      Double_t alpha=TMath::Abs(cal->Energy()-cnv->Energy())/(cal->Energy()+cnv->Energy()) ;
+      if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvEta)){
         FillHistogram("PHOS_Re_mvsPt_all",pi.M(),pi.Pt()) ;
+        char keym[55] ;
+        for(Int_t iw=0;iw<10;iw++){ //resolution
+          for(Int_t in=0;in<10;in++){
+            snprintf(keym,55,"hMC_nonlinearity_w%d_n%d",iw,in) ;
+            Double_t mMod=0.,ptMod=0. ;
+            Recalibrate(mMod, ptMod, cal, cnv, iw, in) ;
+            FillHistogram(keym,mMod,ptMod) ;
+            snprintf(keym,55,"hMC_nonlinearity_ConvPHOS_w%d_n%d",iw,in) ;
+            RecalibrateConvPHOS(mMod, ptMod, cal, cnv, iw, in) ;
+            FillHistogram(keym,mMod,ptMod) ;
+          }
+        }
+        if(cal->TestBit(kCaloDistBad))
+          FillHistogram("PHOS_Re_mvsPt_all_dist",pi.M(),pi.Pt()) ;
+        FillHistogram("PHOS_Re_mvsPt_E",pi.M(),pi.Pt(),cal->Energy()) ;
+        FillHistogram("PHOS_Re_mvsPt_alpha",pi.M(),pi.Pt(),alpha) ;
         if(cal->TestBit(kCaloPIDdisp))
           FillHistogram("PHOS_Re_mvsPt_Disp",pi.M(),pi.Pt()) ;
         if(cal->TestBit(kCaloPIDtof))
@@ -1216,45 +1569,51 @@ void AliAnalysisTaskCaloConv::FillRealMixed(){
       //Vary Conversion cuts
       if(cnv->TestBit(kConvOnFly)){
         //Default
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+        if(!cnv->TestBit(kConvEta)){
           FillHistogram("PHOS_Re_mvsPt_OnFly",pi.M(),pi.Pt()) ;
-        if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
-          FillHistogram("PHOS_Re_mvsPt_On_Kink",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          FillHistogram("PHOS_Re_mvsPt_OnFly_mult",pi.M(),pi.Pt(),fCentr) ;
+        }
+        if(cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
           FillHistogram("PHOS_Re_mvsPt_On_dEdx",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
-          FillHistogram("PHOS_Re_mvsPt_On_Prob",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
+        if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
           FillHistogram("PHOS_Re_mvsPt_On_R120",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
+        if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
           FillHistogram("PHOS_Re_mvsPt_On_Z",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF)) 
+        if( !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF)) 
           FillHistogram("PHOS_Re_mvsPt_On_chi",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
+        if(1)
           FillHistogram("PHOS_Re_mvsPt_On_Eta",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan)) 
+        if( !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan)){ 
           FillHistogram("PHOS_Re_mvsPt_On_Wcut",pi.M(),pi.Pt()) ;
+          if(cal->TestBit(kCaloPIDneutral))
+            FillHistogram("PHOS_Re_mvsPt_On_Wcut_Neu",pi.M(),pi.Pt()) ;
+        }
+        if( !cnv->TestBit(kConvEta) && cnv->TestBit(kConvArmQt)) 
+          FillHistogram("PHOS_Re_mvsPt_On_ArmQt",pi.M(),pi.Pt()) ;
       }
       else{
         //Default
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+        if(!cnv->TestBit(kConvEta)){
           FillHistogram("PHOS_Re_mvsPt_Offline",pi.M(),pi.Pt()) ;
-        if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
-          FillHistogram("PHOS_Re_mvsPt_Off_Kink",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          FillHistogram("PHOS_Re_mvsPt_Offline_mult",pi.M(),pi.Pt(),fCentr) ;
+        }
+        if(cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
           FillHistogram("PHOS_Re_mvsPt_Off_dEdx",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
-          FillHistogram("PHOS_Re_mvsPt_Off_Prob",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
+        if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
           FillHistogram("PHOS_Re_mvsPt_Off_R120",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
+        if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
           FillHistogram("PHOS_Re_mvsPt_Off_Z",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
+        if( !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
           FillHistogram("PHOS_Re_mvsPt_Off_chi",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
+        if(1)
           FillHistogram("PHOS_Re_mvsPt_Off_Eta",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
+        if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan)){
           FillHistogram("PHOS_Re_mvsPt_Off_Wcut",pi.M(),pi.Pt()) ;
+          if(cal->TestBit(kCaloPIDneutral))
+            FillHistogram("PHOS_Re_mvsPt_Off_Wcut_Neu",pi.M(),pi.Pt()) ;
+        }
+        if( !cnv->TestBit(kConvEta) && cnv->TestBit(kConvArmQt)) 
+          FillHistogram("PHOS_Re_mvsPt_Off_ArmQt",pi.M(),pi.Pt()) ;
       }
     }
   }
@@ -1262,33 +1621,17 @@ void AliAnalysisTaskCaloConv::FillRealMixed(){
   for(Int_t iPHOS=0; iPHOS<nPHOS;iPHOS++){
     TLorentzVector * cal = static_cast<TLorentzVector*>(fPHOSEvent->At(iPHOS)) ;
     Int_t mod=1;
-    while(!cal->TestBit(BIT(16+mod)) && mod<5)mod++ ;
+    while(!cal->TestBit(BIT(17+mod)) && mod<5)mod++ ;
     TString base("PHOS_Re_mvsPt_mod") ; base+=mod ;
     TString full ;
     for(Int_t iConv = 0; iConv<nConv; iConv++){
       TLorentzVector * cnv = static_cast<TLorentzVector*>(fConvEvent->At(iConv)) ;
       TLorentzVector pi=*cal + *cnv ;
       full=base ; full+="_single" ;
-      if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
+      if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvEta)){
         FillHistogram(full,pi.M(),cal->Pt()) ;
         full=base ; full+="_all" ;
         FillHistogram(full,pi.M(),pi.Pt()) ;
-        if(cal->TestBit(kCaloPIDdisp)){
-          full=base ; full+="_Disp" ;
-          FillHistogram(full,pi.M(),pi.Pt()) ;
-        }
-        if(cal->TestBit(kCaloPIDtof)){
-          full=base ; full+="_TOF" ;
-          FillHistogram(full,pi.M(),pi.Pt()) ;
-        }
-          if(cal->TestBit(kCaloPIDneutral)){
-          full=base ; full+="_Neutral" ;
-          FillHistogram(full,pi.M(),pi.Pt()) ;
-        }
-        if(cal->TestBit(kCaloPIDneutral) && cal->TestBit(kCaloPIDdisp)){
-          full=base ; full+="_DispNeutral" ;
-            FillHistogram(full,pi.M(),pi.Pt()) ;
-        }
       }
     }
   }
@@ -1301,70 +1644,64 @@ void AliAnalysisTaskCaloConv::FillRealMixed(){
     for(Int_t iConv = 0; iConv<nConv; iConv++){
       TLorentzVector * cnv = static_cast<TLorentzVector*>(fConvEvent->At(iConv)) ;
       TLorentzVector pi=*cal + *cnv ;
+//      Double_t alpha=TMath::Abs(cal->Energy()-cnv->Energy())/(cal->Energy()+cnv->Energy()) ;
       full=base+"_single" ;
-      if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
+      if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvEta)){
         FillHistogram(full,pi.M(),cal->Pt()) ;
         full=base+"_all" ;
         FillHistogram(full,pi.M(),pi.Pt()) ;
-        if(cal->TestBit(kCaloPIDdisp)){
-          full=base+"_Disp" ;
-          FillHistogram(full,pi.M(),pi.Pt()) ;
-        }
-        if(cal->TestBit(kCaloPIDtof)){
-          full=base+"_TOF" ;
-          FillHistogram(full,pi.M(),pi.Pt()) ;
-        }
-        if(cal->TestBit(kCaloPIDneutral)){
-          full=base+"_Neutral" ;
-          FillHistogram(full,pi.M(),pi.Pt()) ;
-        }
-        if(cal->TestBit(kCaloPIDneutral) && cal->TestBit(kCaloPIDdisp)){
-          full=base+"_DispNeutral" ;
-          FillHistogram(full,pi.M(),pi.Pt()) ;
+        char keym[55] ;
+        for(Int_t iw=0;iw<10;iw++){ //resolution
+          for(Int_t in=0;in<10;in++){
+            snprintf(keym,55,"hMC_nonlinearity_EMCAL_w%d_n%d",iw,in) ;
+            Double_t mMod=0.,ptMod=0. ;
+            RecalibrateEMCAL(mMod, ptMod, cal, cnv, iw, in) ;
+            FillHistogram(keym,mMod,ptMod) ;
+          }
         }
       }
       //Vary Conversion cuts
       if(cnv->TestBit(kConvOnFly)){
         //Default
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+        if(!cnv->TestBit(kConvEta)){
           FillHistogram("EMCAL_Re_mvsPt_OnFly",pi.M(),pi.Pt()) ;
-        if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
-          FillHistogram("EMCAL_Re_mvsPt_On_Kink",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          FillHistogram("EMCAL_Re_mvsPt_OnFly_mult",pi.M(),pi.Pt(),fCentr) ;
+        }
+        if(cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
           FillHistogram("EMCAL_Re_mvsPt_On_dEdx",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
-          FillHistogram("EMCAL_Re_mvsPt_On_Prob",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
+        if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
           FillHistogram("EMCAL_Re_mvsPt_On_R120",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
+        if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
           FillHistogram("EMCAL_Re_mvsPt_On_Z",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
+        if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
           FillHistogram("EMCAL_Re_mvsPt_On_chi",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
+        if(1)
           FillHistogram("EMCAL_Re_mvsPt_On_Eta",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
+        if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
           FillHistogram("EMCAL_Re_mvsPt_On_Wcut",pi.M(),pi.Pt()) ;
+        if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvArmQt))
+          FillHistogram("EMCAL_Re_mvsPt_On_ArmQt",pi.M(),pi.Pt()) ;
       }
       else{
         //Default
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+        if(!cnv->TestBit(kConvEta)){
           FillHistogram("EMCAL_Re_mvsPt_Offline",pi.M(),pi.Pt()) ;
-        if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
-          FillHistogram("EMCAL_Re_mvsPt_Off_Kink",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          FillHistogram("EMCAL_Re_mvsPt_Offline_mult",pi.M(),pi.Pt(),fCentr) ;
+        }
+        if(cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
           FillHistogram("EMCAL_Re_mvsPt_Off_dEdx",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
-          FillHistogram("EMCAL_Re_mvsPt_Off_Prob",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
+        if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
           FillHistogram("EMCAL_Re_mvsPt_Off_R120",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
+        if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
           FillHistogram("EMCAL_Re_mvsPt_Off_Z",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
+        if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
           FillHistogram("EMCAL_Re_mvsPt_Off_chi",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
+        if(1)
           FillHistogram("EMCAL_Re_mvsPt_Off_Eta",pi.M(),pi.Pt()) ;
-        if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
+        if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
           FillHistogram("EMCAL_Re_mvsPt_Off_Wcut",pi.M(),pi.Pt()) ;
+        if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvArmQt))
+          FillHistogram("EMCAL_Re_mvsPt_Off_ArmQt",pi.M(),pi.Pt()) ;
       }
     }
   }
@@ -1381,7 +1718,7 @@ void AliAnalysisTaskCaloConv::FillRealMixed(){
       for(Int_t iConv = 0; iConv<mixConv->GetEntriesFast(); iConv++){
         TLorentzVector * cnv = static_cast<TLorentzVector*>(mixConv->At(iConv)) ;
         TLorentzVector pi=*cal + *cnv ;
-        if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
+        if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvEta)){
           FillHistogram("PHOS_Mi_mvsPt_all",pi.M(),pi.Pt()) ;
           if(cal->TestBit(kCaloPIDdisp))
             FillHistogram("PHOS_Mi_mvsPt_Disp",pi.M(),pi.Pt()) ;
@@ -1395,45 +1732,41 @@ void AliAnalysisTaskCaloConv::FillRealMixed(){
         //Vary Conversion cuts
         if(cnv->TestBit(kConvOnFly)){
           //Default
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          if(!cnv->TestBit(kConvEta))
             FillHistogram("PHOS_Mi_mvsPt_OnFly",pi.M(),pi.Pt()) ;
-          if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
-            FillHistogram("PHOS_Mi_mvsPt_On_Kink",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          if( cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
             FillHistogram("PHOS_Mi_mvsPt_On_dEdx",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
-            FillHistogram("PHOS_Mi_mvsPt_On_Prob",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
             FillHistogram("PHOS_Mi_mvsPt_On_R120",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
             FillHistogram("PHOS_Mi_mvsPt_On_Z",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
             FillHistogram("PHOS_Mi_mvsPt_On_chi",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
+          if(1)
             FillHistogram("PHOS_Mi_mvsPt_On_Eta",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
             FillHistogram("PHOS_Mi_mvsPt_On_Wcut",pi.M(),pi.Pt()) ;
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvArmQt))
+            FillHistogram("PHOS_Mi_mvsPt_On_ArmQt",pi.M(),pi.Pt()) ;
         }
         else{
           //Default
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          if(!cnv->TestBit(kConvEta))
             FillHistogram("PHOS_Mi_mvsPt_Offline",pi.M(),pi.Pt()) ;
-          if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
-            FillHistogram("PHOS_Mi_mvsPt_Off_Kink",pi.M(),pi.Pt()) ;
-            if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          if(cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
             FillHistogram("PHOS_Mi_mvsPt_Off_dEdx",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
-            FillHistogram("PHOS_Mi_mvsPt_Off_Prob",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
+          if( !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
             FillHistogram("PHOS_Mi_mvsPt_Off_R120",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
             FillHistogram("PHOS_Mi_mvsPt_Off_Z",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
             FillHistogram("PHOS_Mi_mvsPt_Off_chi",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
+          if(1)
             FillHistogram("PHOS_Mi_mvsPt_Off_Eta",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
             FillHistogram("PHOS_Mi_mvsPt_Off_Wcut",pi.M(),pi.Pt()) ;
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvArmQt))
+            FillHistogram("PHOS_Mi_mvsPt_Off_ArmQt",pi.M(),pi.Pt()) ;
         }
       }
     }
@@ -1445,7 +1778,7 @@ void AliAnalysisTaskCaloConv::FillRealMixed(){
       for(Int_t iPHOS=0; iPHOS<mixPHOS->GetEntriesFast();iPHOS++){
         TLorentzVector * cal = static_cast<TLorentzVector*>(mixPHOS->At(iPHOS)) ;
         TLorentzVector pi=*cal + *cnv ;
-        if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
+        if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvEta)){
           FillHistogram("PHOS_Mi_mvsPt_all",pi.M(),pi.Pt()) ;
           if(cal->TestBit(kCaloPIDdisp))
             FillHistogram("PHOS_Mi_mvsPt_Disp",pi.M(),pi.Pt()) ;
@@ -1459,55 +1792,52 @@ void AliAnalysisTaskCaloConv::FillRealMixed(){
         //Vary Conversion cuts
         if(cnv->TestBit(kConvOnFly)){
           //Default
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          if(!cnv->TestBit(kConvEta))
             FillHistogram("PHOS_Mi_mvsPt_OnFly",pi.M(),pi.Pt()) ;
-          if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
-            FillHistogram("PHOS_Mi_mvsPt_On_Kink",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          if(cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
             FillHistogram("PHOS_Mi_mvsPt_On_dEdx",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
-            FillHistogram("PHOS_Mi_mvsPt_On_Prob",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
             FillHistogram("PHOS_Mi_mvsPt_On_R120",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
             FillHistogram("PHOS_Mi_mvsPt_On_Z",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
             FillHistogram("PHOS_Mi_mvsPt_On_chi",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
+          if(1)
             FillHistogram("PHOS_Mi_mvsPt_On_Eta",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
             FillHistogram("PHOS_Mi_mvsPt_On_Wcut",pi.M(),pi.Pt()) ;
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvArmQt))
+            FillHistogram("PHOS_Mi_mvsPt_On_ArmQt",pi.M(),pi.Pt()) ;
         }
         else{
           //Default
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          if(!cnv->TestBit(kConvEta))
             FillHistogram("PHOS_Mi_mvsPt_Offline",pi.M(),pi.Pt()) ;
-          if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
-            FillHistogram("PHOS_Mi_mvsPt_Off_Kink",pi.M(),pi.Pt()) ;
-            if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          if(cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
             FillHistogram("PHOS_Mi_mvsPt_Off_dEdx",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
-            FillHistogram("PHOS_Mi_mvsPt_Off_Prob",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
             FillHistogram("PHOS_Mi_mvsPt_Off_R120",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
             FillHistogram("PHOS_Mi_mvsPt_Off_Z",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
             FillHistogram("PHOS_Mi_mvsPt_Off_chi",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
+          if(1)
             FillHistogram("PHOS_Mi_mvsPt_Off_Eta",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
             FillHistogram("PHOS_Mi_mvsPt_Off_Wcut",pi.M(),pi.Pt()) ;
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvArmQt))
+            FillHistogram("PHOS_Mi_mvsPt_Off_ArmQt",pi.M(),pi.Pt()) ;
         }
       }
     }
   }
  
+/*
   //PHOS module dependent
   for(Int_t iPHOS=0; iPHOS<nPHOS;iPHOS++){
     TLorentzVector * cal = static_cast<TLorentzVector*>(fPHOSEvent->At(iPHOS)) ;
     Int_t mod=1;
-    while(!cal->TestBit(BIT(16+mod)) && mod<5)mod++ ;
+    while(!cal->TestBit(BIT(17+mod)) && mod<5)mod++ ;
     TString base("PHOS_Mi_mvsPt_mod") ; base+=mod ;
     TString full ;
     for(Int_t ev=0; ev<prevConv->GetSize();ev++){
@@ -1516,24 +1846,8 @@ void AliAnalysisTaskCaloConv::FillRealMixed(){
         TLorentzVector * cnv = static_cast<TLorentzVector*>(mixConv->At(iConv)) ;
         TLorentzVector pi=*cal + *cnv ;
         full=base+"_all" ;
-        if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
+        if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvEta)){
           FillHistogram(full,pi.M(),pi.Pt()) ;
-          if(cal->TestBit(kCaloPIDdisp)){
-            full=base+"_Disp" ;
-            FillHistogram(full,pi.M(),pi.Pt()) ;
-          }
-          if(cal->TestBit(kCaloPIDtof)){
-            full=base+"_TOF" ;
-            FillHistogram(full,pi.M(),pi.Pt()) ;
-          }
-          if(cal->TestBit(kCaloPIDneutral)){
-            full=base+"_Neutral" ;
-            FillHistogram(full,pi.M(),pi.Pt()) ;
-          }
-          if(cal->TestBit(kCaloPIDneutral) && cal->TestBit(kCaloPIDdisp)){
-            full=base+"_DispNeutral" ;
-            FillHistogram(full,pi.M(),pi.Pt()) ;
-          }
         }
       }
     }
@@ -1545,34 +1859,18 @@ void AliAnalysisTaskCaloConv::FillRealMixed(){
       for(Int_t iPHOS=0; iPHOS<mixPHOS->GetEntriesFast();iPHOS++){
         TLorentzVector * cal = static_cast<TLorentzVector*>(mixPHOS->At(iPHOS)) ;
         Int_t mod=1;
-        while(!cal->TestBit(BIT(16+mod)) && mod<5)mod++ ;
+        while(!cal->TestBit(BIT(17+mod)) && mod<5)mod++ ;
         TString base("PHOS_Mi_mvsPt_mod") ; base+=mod ;
         TString full ;
         TLorentzVector pi=*cal + *cnv ;
         full=base+"_all" ;
-        if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
+        if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvEta)){
           FillHistogram(full,pi.M(),pi.Pt()) ;
-          if(cal->TestBit(kCaloPIDdisp)){
-            full=base+"_Disp" ;
-            FillHistogram(full,pi.M(),pi.Pt()) ;
-          }
-          if(cal->TestBit(kCaloPIDtof)){
-            full=base+"_TOF" ;
-            FillHistogram(full,pi.M(),pi.Pt()) ;
-          }
-          if(cal->TestBit(kCaloPIDneutral)){
-            full=base+"_Neutral" ;
-            FillHistogram(full,pi.M(),pi.Pt()) ;
-          }
-          if(cal->TestBit(kCaloPIDneutral) && cal->TestBit(kCaloPIDdisp)){
-            full=base+"_DispNeutral" ;
-            FillHistogram(full,pi.M(),pi.Pt()) ;
-          }
         }
       }
     }
   }
-
+*/
 
   //EMCAL
   for(Int_t iEMCAL=0; iEMCAL<nEMCAL;iEMCAL++){
@@ -1587,70 +1885,51 @@ void AliAnalysisTaskCaloConv::FillRealMixed(){
         TLorentzVector * cnv = static_cast<TLorentzVector*>(mixConv->At(iConv)) ;
         TLorentzVector pi=*cal + *cnv ;
         full=base+"_all" ;
-        if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
+        if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvEta)){
           FillHistogram(full,pi.M(),pi.Pt()) ;
-          if(cal->TestBit(kCaloPIDdisp)){
-            full=base+"_Disp" ;
-            FillHistogram(full,pi.M(),pi.Pt()) ;
-          }
-          if(cal->TestBit(kCaloPIDtof)){
-            full=base+"_TOF" ;
-            FillHistogram(full,pi.M(),pi.Pt()) ;
-          }
-          if(cal->TestBit(kCaloPIDneutral)){
-            full=base+"_Neutral" ;
-            FillHistogram(full,pi.M(),pi.Pt()) ;
-          }
-          if(cal->TestBit(kCaloPIDneutral) && cal->TestBit(kCaloPIDdisp)){
-            full=base+"_Neutral" ;
-            FillHistogram(full,pi.M(),pi.Pt()) ;
-          }
         } 
         if(cnv->TestBit(kConvOnFly)){
           //Default
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          if(!cnv->TestBit(kConvEta))
             FillHistogram("EMCAL_Mi_mvsPt_OnFly",pi.M(),pi.Pt()) ;
-          if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
-            FillHistogram("EMCAL_Mi_mvsPt_On_Kink",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          if(cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
             FillHistogram("EMCAL_Mi_mvsPt_On_dEdx",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
-            FillHistogram("EMCAL_Mi_mvsPt_On_Prob",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
             FillHistogram("EMCAL_Mi_mvsPt_On_R120",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
             FillHistogram("EMCAL_Mi_mvsPt_On_Z",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
             FillHistogram("EMCAL_Mi_mvsPt_On_chi",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
+          if(1)
             FillHistogram("EMCAL_Mi_mvsPt_On_Eta",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
             FillHistogram("EMCAL_Mi_mvsPt_On_Wcut",pi.M(),pi.Pt()) ;
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvArmQt))
+            FillHistogram("EMCAL_Mi_mvsPt_On_ArmQt",pi.M(),pi.Pt()) ;
         }
         else{
           //Default
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          if(!cnv->TestBit(kConvEta))
             FillHistogram("EMCAL_Mi_mvsPt_Offline",pi.M(),pi.Pt()) ;
-          if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
-            FillHistogram("EMCAL_Mi_mvsPt_Off_Kink",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          if( cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
             FillHistogram("EMCAL_Mi_mvsPt_Off_dEdx",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
-            FillHistogram("EMCAL_Mi_mvsPt_Off_Prob",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
             FillHistogram("EMCAL_Mi_mvsPt_Off_R120",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
             FillHistogram("EMCAL_Mi_mvsPt_Off_Z",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
+          if( !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
             FillHistogram("EMCAL_Mi_mvsPt_Off_chi",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
+          if(1)
             FillHistogram("EMCAL_Mi_mvsPt_Off_Eta",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
             FillHistogram("EMCAL_Mi_mvsPt_Off_Wcut",pi.M(),pi.Pt()) ;
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvArmQt))
+            FillHistogram("EMCAL_Mi_mvsPt_Off_ArmQt",pi.M(),pi.Pt()) ;
         }
       }
     }
   }
+/*
   for(Int_t iConv = 0; iConv<nConv; iConv++){
     TLorentzVector * cnv = static_cast<TLorentzVector*>(fConvEvent->At(iConv)) ;
     for(Int_t ev=0; ev<prevEMCAL->GetSize();ev++){
@@ -1663,7 +1942,7 @@ void AliAnalysisTaskCaloConv::FillRealMixed(){
         TString full ;
         TLorentzVector pi=*cal + *cnv ;
         full=base+"_all" ;
-        if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
+        if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvEta)){
           FillHistogram(full,pi.M(),pi.Pt()) ;
           if(cal->TestBit(kCaloPIDdisp)){
             full=base+"_Disp" ;
@@ -1684,49 +1963,46 @@ void AliAnalysisTaskCaloConv::FillRealMixed(){
         }
         if(cnv->TestBit(kConvOnFly)){
           //Default
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          if(!cnv->TestBit(kConvEta))
             FillHistogram("EMCAL_Mi_mvsPt_OnFly",pi.M(),pi.Pt()) ;
-          if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
-            FillHistogram("EMCAL_Mi_mvsPt_On_Kink",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          if(cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
             FillHistogram("EMCAL_Mi_mvsPt_On_dEdx",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
-            FillHistogram("EMCAL_Mi_mvsPt_On_Prob",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
             FillHistogram("EMCAL_Mi_mvsPt_On_R120",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
             FillHistogram("EMCAL_Mi_mvsPt_On_Z",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
+          if( !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
             FillHistogram("EMCAL_Mi_mvsPt_On_chi",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
+          if(1)
             FillHistogram("EMCAL_Mi_mvsPt_On_Eta",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan)) 
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan)) 
             FillHistogram("EMCAL_Mi_mvsPt_On_Wcut",pi.M(),pi.Pt()) ;
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvArmQt)) 
+            FillHistogram("EMCAL_Mi_mvsPt_On_ArmQt",pi.M(),pi.Pt()) ;
         }
         else{
           //Default
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          if(!cnv->TestBit(kConvEta))
             FillHistogram("EMCAL_Mi_mvsPt_Offline",pi.M(),pi.Pt()) ;
-          if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
-            FillHistogram("EMCAL_Mi_mvsPt_Off_Kink",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
+          if(cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
             FillHistogram("EMCAL_Mi_mvsPt_Off_dEdx",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
-            FillHistogram("EMCAL_Mi_mvsPt_Off_Prob",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
             FillHistogram("EMCAL_Mi_mvsPt_Off_R120",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR)) 
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR)) 
             FillHistogram("EMCAL_Mi_mvsPt_Off_Z",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
             FillHistogram("EMCAL_Mi_mvsPt_Off_chi",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
+          if(1)
             FillHistogram("EMCAL_Mi_mvsPt_Off_Eta",pi.M(),pi.Pt()) ;
-          if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
             FillHistogram("EMCAL_Mi_mvsPt_Off_Wcut",pi.M(),pi.Pt()) ;
+          if(!cnv->TestBit(kConvEta) && cnv->TestBit(kConvArmQt)) 
+            FillHistogram("EMCAL_Mi_mvsPt_Off_ArmQt",pi.M(),pi.Pt()) ;
         }
       }
     }
   }
+*/
 
 
       
@@ -1759,7 +2035,7 @@ void AliAnalysisTaskCaloConv::FillRealMixed(){
 }
 //___________________________________________________________________________
 void AliAnalysisTaskCaloConv::ProcessMC(){
-
+  //ProcessMC
   //fill histograms for efficiensy etc. calculation
   if(!fStack) return ;
   
@@ -1769,125 +2045,162 @@ void AliAnalysisTaskCaloConv::ProcessMC(){
   vtx[1] = fESDEvent->GetPrimaryVertex()->GetY();
   vtx[2] = fESDEvent->GetPrimaryVertex()->GetZ();
 
-  //---------First pi0s-----------------------------
+  Int_t nPHOS=fPHOSEvent->GetEntriesFast() ;
+  Int_t nEMCAL=fEMCALEvent->GetEntriesFast() ;
+  Int_t nConv = fConvEvent->GetEntriesFast() ;
+  //---------First pi0/eta-----------------------------
+  char partName[10] ;
+  char hkey[55] ;
   for (Int_t iTracks = 0; iTracks < fStack->GetNtrack(); iTracks++) {
     TParticle* particle = (TParticle *)fStack->Particle(iTracks);
-    if(particle->GetPdgCode() != 111)
-      continue ;
+    if(particle->GetPdgCode() == 111)
+      snprintf(partName,10,"pi0") ;
+    else
+      if(particle->GetPdgCode() == 221)
+        snprintf(partName,10,"eta") ;
+      else
+        continue ;
      
+    //Primary particle
     if(particle->R() >rcut)
       continue ;
 
-   Double_t pt = particle->Pt() ;
-   //Total number of pi0 with creation radius <1 cm
-   FillHistogram("hMC_CaloConv_allPi0",pt) ;
-   if(TMath::Abs(particle->Eta())<1.)
-     FillHistogram("hMC_CaloConv_pi0_unitEta",pt) ;
+    Double_t pt = particle->Pt() ;
+    //Total number of pi0 with creation radius <1 cm
+    snprintf(hkey,55,"hMC_CaloConv_all%s",partName) ;
+    FillHistogram(hkey,pt) ;
+    if(TMath::Abs(particle->Y())<1.){
+      snprintf(hkey,55,"hMC_CaloConv_%s_unitEta",partName) ;
+      FillHistogram(hkey,pt,fCentr) ;
+    }
 
-   //Check if one of photons converted
-   if(particle->GetNDaughters()!=2)
+    //Check if one of photons converted
+    if(particle->GetNDaughters()!=2)
      continue ; //Do not account Dalitz decays
 
-   TParticle * gamma1 = fStack->Particle(particle->GetFirstDaughter());
-   TParticle * gamma2 = fStack->Particle(particle->GetLastDaughter());
-   //Number of pi0s decayed into acceptance
-   Bool_t inAcc1 = (TMath::Abs(gamma1->Eta())<0.9) ;
-   Bool_t inAcc2 = (TMath::Abs(gamma2->Eta())<0.9) ;
-   Int_t mod ;
-   Double_t x,z ;
-   Bool_t hitPHOS1 = fPHOSgeom->ImpactOnEmc(gamma1, mod, z,x) ;
-   Bool_t hitPHOS2 = fPHOSgeom->ImpactOnEmc(gamma2, mod, z,x) ;
-   Bool_t hitEMCAL1= fEMCALgeom->Impact(gamma1) ;
-   Bool_t hitEMCAL2= fEMCALgeom->Impact(gamma2) ;
-
-   Bool_t goodPair=kFALSE ;
-   if((inAcc1 && hitPHOS2) || (inAcc2 && hitPHOS1)){
-     FillHistogram("hMC_CaloConv_pi0PHOSacc",pt) ;
-     goodPair=kTRUE ;
-   } 
-   if((inAcc1 && hitEMCAL2) || (inAcc2 && hitEMCAL1)){
-     FillHistogram("hMC_CaloConv_pi0EMCALacc",pt) ;
-     goodPair=kTRUE ;
-   }
-   if(!goodPair){
-     continue ;
-   }
-
-   Bool_t converted1 = kFALSE ;
-   if(gamma1->GetNDaughters()==2){
-     TParticle * e1=fStack->Particle(gamma1->GetFirstDaughter()) ;
-     TParticle * e2=fStack->Particle(gamma1->GetLastDaughter()) ;
-     if(TMath::Abs(e1->GetPdgCode())==11 && TMath::Abs(e2->GetPdgCode())==11){ //conversion
-       if(e1->R()<180.)
-         converted1 = kTRUE ;
-     }
-   }
-   Bool_t converted2 = kFALSE ;
-   if(gamma2->GetNDaughters()==2){
-     TParticle * e1=fStack->Particle(gamma2->GetFirstDaughter()) ;
-     TParticle * e2=fStack->Particle(gamma2->GetLastDaughter()) ;
-     if(TMath::Abs(e1->GetPdgCode())==11 && TMath::Abs(e2->GetPdgCode())==11){ //conversion
-       if(e1->R()<180.)
-         converted2 = kTRUE ;
-     }
-   }
+    TParticle * gamma1 = fStack->Particle(particle->GetFirstDaughter());
+    TParticle * gamma2 = fStack->Particle(particle->GetLastDaughter());
+    //Number of pi0s decayed into acceptance
+    Bool_t inAcc1 = (TMath::Abs(gamma1->Eta())<0.9) ;
+    Bool_t inAcc2 = (TMath::Abs(gamma2->Eta())<0.9) ;
+    Int_t mod1,mod2 ;
+    Double_t x=0.,z=0. ;
+    Bool_t hitPHOS1 = fPHOSgeom->ImpactOnEmc(gamma1, mod1, z,x) ;
+    Bool_t hitPHOS2 = fPHOSgeom->ImpactOnEmc(gamma2, mod2, z,x) ;
+    Bool_t hitEMCAL1= fEMCALgeom->Impact(gamma1) ;
+    Bool_t hitEMCAL2= fEMCALgeom->Impact(gamma2) ;
  
-   //Number of pi0s with one photon converted
-   if((converted1 && !converted2 && hitPHOS2) || (!converted1 && hitPHOS1 && converted2)) 
-     FillHistogram("hMC_CaloConv_pi0_PHOS_conv",pt) ;
-
-   if((converted1 && !converted2 && hitEMCAL2) || (!converted1 && hitEMCAL1 && converted2)) 
-     FillHistogram("hMC_CaloConv_pi0_EMCAL_conv",pt) ;
-
-   //Both converted
-   if(converted1 && converted2) {
-     FillHistogram("hMC_CaloConv_pi0_bothphot_conv",pt) ;
-     continue ;
-   }
-
-   //photon pointing calorimeter converted
-   if((converted1 && hitPHOS1 && !hitEMCAL2) || (converted2 && hitPHOS2 && !hitEMCAL1) || 
-      (converted1 && hitEMCAL1 && !hitPHOS2) || (converted2 && hitEMCAL2 && !hitPHOS1)){
-     FillHistogram("hMC_CaloConv_pi0__convPhotInCalo",pt) ;
+    Bool_t goodPair=kFALSE ;
+    if((inAcc1 && hitPHOS2) || (inAcc2 && hitPHOS1)){
+      snprintf(hkey,55,"hMC_CaloConv_%sPHOSacc",partName) ;
+      FillHistogram(hkey,pt) ;
+      goodPair=kTRUE ;
+    } 
+    if((inAcc1 && hitEMCAL2) || (inAcc2 && hitEMCAL1)){
+      snprintf(hkey,55,"hMC_CaloConv_%sEMCALacc",partName) ;
+      FillHistogram(hkey,pt) ;
+       goodPair=kTRUE ;
+    }
+    if(!goodPair){
       continue ;
-   }
+    }
  
-   //Converted pi0 with v0 and photon PHOS or EMCAL
-   Bool_t foundV01=kFALSE, foundV02=kFALSE ;
-   TLorentzVector pConv ;
-   for(Int_t iv0=0; iv0<fESDEvent->GetNumberOfV0s();iv0++){
-     AliESDv0 * v0 = fESDEvent->GetV0(iv0) ;
-
-     TParticle * negativeMC = fStack->Particle(TMath::Abs(fESDEvent->GetTrack(v0->GetNindex())->GetLabel()));
-     TParticle * positiveMC = fStack->Particle(TMath::Abs(fESDEvent->GetTrack(v0->GetPindex())->GetLabel()));
-
-     if(negativeMC && positiveMC){
-       if(negativeMC->GetMother(0) != positiveMC->GetMother(0))
-         continue ;
-     }
-
-     if(TMath::Abs(negativeMC->GetPdgCode())!=11 || TMath::Abs(positiveMC->GetPdgCode())!=11){
-       continue;
-     }
-     if(negativeMC->GetPdgCode()==positiveMC->GetPdgCode()){
-       continue;
-     }
+    Bool_t converted1 = kFALSE ;
+    if(gamma1->GetNDaughters()==2){
+      TParticle * e1=fStack->Particle(gamma1->GetFirstDaughter()) ;
+      TParticle * e2=fStack->Particle(gamma1->GetLastDaughter()) ;
+      if(TMath::Abs(e1->GetPdgCode())==11 && TMath::Abs(e2->GetPdgCode())==11){ //conversion
+        if(e1->R()<180.)
+          converted1 = kTRUE ;
+      }
+    }
+    Bool_t converted2 = kFALSE ;
+    if(gamma2->GetNDaughters()==2){
+      TParticle * e1=fStack->Particle(gamma2->GetFirstDaughter()) ;
+      TParticle * e2=fStack->Particle(gamma2->GetLastDaughter()) ;
+      if(TMath::Abs(e1->GetPdgCode())==11 && TMath::Abs(e2->GetPdgCode())==11){ //conversion
+        if(e1->R()<180.)
+          converted2 = kTRUE ;
+      }
+    }
+  
+    //Number of pi0s with one photon converted
+    if((converted1 && !converted2 && hitPHOS2) || (!converted1 && hitPHOS1 && converted2)) {
+      snprintf(hkey,55,"hMC_CaloConv_%s_PHOS_conv",partName) ;
+      FillHistogram(hkey,pt) ;
+    }
  
-     TParticle * v0Gamma = fStack->Particle(negativeMC->GetMother(0));
-     Bool_t same = (v0Gamma == gamma1) ;
-     TParticle * tmp = v0Gamma ;
-     while(!same && tmp->GetFirstMother()>=0){
-       tmp = fStack->Particle(tmp->GetFirstMother());
+    if((converted1 && !converted2 && hitEMCAL2) || (!converted1 && hitEMCAL1 && converted2)) {
+      snprintf(hkey,55,"hMC_CaloConv_%s_EMCAL_conv",partName) ;
+      FillHistogram(hkey,pt) ;
+    }
+    //Both converted
+    if(converted1 && converted2) {
+      snprintf(hkey,55,"hMC_CaloConv_%s_bothphot_conv",partName) ;
+      FillHistogram(hkey,pt) ;
+        continue ;
+    }
+    //photon pointing calorimeter converted
+    if((converted1 && hitPHOS1 && !hitEMCAL2) || (converted2 && hitPHOS2 && !hitEMCAL1) || 
+       (converted1 && hitEMCAL1 && !hitPHOS2) || (converted2 && hitEMCAL2 && !hitPHOS1)){
+      snprintf(hkey,55,"hMC_CaloConv_%s_convPhotInCalo",partName) ;
+      FillHistogram(hkey,pt) ;
+       continue ;
+    }
+   
+    //Converted pi0 with v0 and photon PHOS or EMCAL
+    Bool_t foundV01onfly=kFALSE, foundV01offline=kFALSE, foundV02onfly=kFALSE, foundV02offline=kFALSE ;
+    Bool_t foundV01onflyPID=kFALSE, foundV01offlinePID=kFALSE, foundV02onflyPID=kFALSE, foundV02offlinePID=kFALSE ;
+    TLorentzVector pConvOn,pConvOff ;
+    for(Int_t iv0=0; iv0<fESDEvent->GetNumberOfV0s();iv0++){
+      AliESDv0 * v0 = fESDEvent->GetV0(iv0) ;
+      TParticle * negativeMC = fStack->Particle(TMath::Abs(fESDEvent->GetTrack(v0->GetNindex())->GetLabel()));
+      TParticle * positiveMC = fStack->Particle(TMath::Abs(fESDEvent->GetTrack(v0->GetPindex())->GetLabel()));
+      if(negativeMC->GetMother(0) != positiveMC->GetMother(0))
+        continue ;
+      if(TMath::Abs(negativeMC->GetPdgCode())!=11 || TMath::Abs(positiveMC->GetPdgCode())!=11){
+        continue;
+       }
+      if(negativeMC->GetPdgCode()==positiveMC->GetPdgCode()){
+        continue;
+      }
+  
+      TParticle * v0Gamma = fStack->Particle(negativeMC->GetMother(0));
+      Bool_t same = (v0Gamma == gamma1) ;
+      TParticle * tmp = v0Gamma ;
+      while(!same && tmp->GetFirstMother()>=0){
+        tmp = fStack->Particle(tmp->GetFirstMother());
        same = (tmp == gamma1) ;
      }
      if(same){
-       foundV01 = kTRUE ;
-       const AliExternalTrackParam * paramPos = v0->GetParamP() ;
-       const AliExternalTrackParam * paramNeg = v0->GetParamN() ;
-       AliKFParticle negKF(*paramNeg,11);
-       AliKFParticle posKF(*paramPos,-11);
-       pConv.SetXYZM(negKF.Px()+posKF.Px(),negKF.Py()+posKF.Py(),negKF.Pz()+negKF.Pz(),0.) ;
-       break ;
+       if(v0->GetOnFlyStatus())
+         foundV01onfly = kTRUE ;
+       else
+         foundV01offline= kTRUE ;
+       for(Int_t iconv=0; iconv<nConv;iconv++){
+         if(fGammaV0s[iconv] == iv0){
+           TLorentzVector * cnv = static_cast<TLorentzVector*>(fConvEvent->At(iconv)) ;
+           //default cuts
+           if(!cnv->TestBit(kConvEta)){
+             if(v0->GetOnFlyStatus()){
+               pConvOn= *cnv ; 
+               foundV01onflyPID = kTRUE ;
+             }
+             else{
+               pConvOff= *cnv ;
+               foundV01offlinePID = kTRUE ;
+             }
+           }
+           break ;
+         }
+       }
+       continue ;
      } 
      same = (v0Gamma == gamma2) ;
      tmp = v0Gamma ;
@@ -1896,23 +2209,49 @@ void AliAnalysisTaskCaloConv::ProcessMC(){
        same = (tmp == gamma2) ;
      }
      if(same){
-       foundV02 = kTRUE ;
-       const AliExternalTrackParam * paramPos = v0->GetParamP() ;
-       const AliExternalTrackParam * paramNeg = v0->GetParamN() ;
-       AliKFParticle negKF(*paramNeg,11);
-       AliKFParticle posKF(*paramPos,-11);
-       pConv.SetXYZM(negKF.Px()+posKF.Px(),negKF.Py()+posKF.Py(),negKF.Pz()+negKF.Pz(),0.) ;
-       break ;
+       if(v0->GetOnFlyStatus())
+         foundV02onfly = kTRUE ;
+       else
+         foundV02offline = kTRUE ;
+       for(Int_t iconv=0; iconv<nConv;iconv++){
+         if(fGammaV0s[iconv] == iv0){
+           TLorentzVector * cnv = static_cast<TLorentzVector*>(fConvEvent->At(iconv)) ;
+           //default cuts
+           if(!cnv->TestBit(kConvEta)){
+             if(v0->GetOnFlyStatus()){
+               pConvOn= *cnv ;
+               foundV02onflyPID = kTRUE ;
+             }
+             else{
+               pConvOff= *cnv ;
+               foundV02offlinePID = kTRUE ;
+             }
+           }
+           break ;
+         }
+       }
      } 
    }
 
    goodPair=kFALSE ;
-   if((foundV01 && hitPHOS2) || (foundV02 && hitPHOS1)){
-     FillHistogram("hMC_CaloConv_pi0_v0_PHOSacc",pt) ;
+   if((foundV01onfly && hitPHOS2) || (foundV02onfly && hitPHOS1)){
+     snprintf(hkey,55,"hMC_CaloConv_%s_v0onfly_PHOSacc",partName) ;
+     FillHistogram(hkey,pt) ;
+     goodPair=kTRUE;
+   }
+   if((foundV01offline && hitPHOS2) || (foundV02offline && hitPHOS1)){
+     snprintf(hkey,55,"hMC_CaloConv_%s_v0offline_PHOSacc",partName) ;
+     FillHistogram(hkey,pt) ;
      goodPair=kTRUE;
    }
-   if((foundV01 && hitEMCAL2) || (foundV02 && hitEMCAL1)){
-     FillHistogram("hMC_CaloConv_pi0_v0_EMCALacc",pt) ;
+   if((foundV01onfly && hitEMCAL2) || (foundV02onfly && hitEMCAL1)){
+     snprintf(hkey,55,"hMC_CaloConv_%s_v0onfly_EMCALacc",partName) ;
+     FillHistogram(hkey,pt) ;
+     goodPair=kTRUE;
+   }
+   if((foundV01offline && hitEMCAL2) || (foundV02offline && hitEMCAL1)){
+     snprintf(hkey,55,"hMC_CaloConv_%s_v0offline_EMCALacc",partName) ;
+     FillHistogram(hkey,pt) ;
      goodPair=kTRUE;
    }
    if(!goodPair){
@@ -1921,6 +2260,8 @@ void AliAnalysisTaskCaloConv::ProcessMC(){
 
    //Converted pi0 with v0 and cluster in PHOS/EMCAL
    Bool_t cluInPHOS = kFALSE,cluInEMCAL=kFALSE ;
+   Bool_t cluInPHOSpid = kFALSE,cluInEMCALpid=kFALSE ;
+   Bool_t closeToBad= kFALSE ;
    TLorentzVector pCalo ;
    for (Int_t i=0; i<fESDEvent->GetNumberOfCaloClusters(); i++) {
      AliESDCaloCluster * clu = fESDEvent->GetCaloCluster(i);
@@ -1939,33 +2280,337 @@ void AliAnalysisTaskCaloConv::ProcessMC(){
        continue ;
      if(clu->IsPHOS() && (hitPHOS1 || hitPHOS2)){
        cluInPHOS=kTRUE ;
+       //Check if cluster passed PID
+       for(Int_t inPHOS=0; inPHOS<nPHOS;inPHOS++){
+         if(fGammaPHOS[inPHOS] == i){
+           cluInPHOSpid=kTRUE ;
+           break ;
+         }
+       }
        clu->GetMomentum(pCalo ,vtx);
+       if(clu->GetDistanceToBadChannel()<fBadDistCutPHOS)
+         closeToBad=kTRUE ;
        break ;
      }
      if(!clu->IsPHOS() && (hitEMCAL1 || hitEMCAL2)){
        cluInEMCAL=kTRUE ;
+       //Check if cluster passed PID
+       for(Int_t inEMCAL=0; inEMCAL<nEMCAL;inEMCAL++){
+         if(fGammaEMCAL[inEMCAL] == i){
+           cluInPHOSpid=kTRUE ;
+           break ;
+         }
+       }
        clu->GetMomentum(pCalo ,vtx);
+       if(clu->GetDistanceToBadChannel()<fBadDistCutEMCAL)
+         closeToBad=kTRUE ;
        break ;
      }
    }
 
    if(cluInPHOS){
-     FillHistogram("hMC_CaloConv_pi0_v0_PHOSclu",pt) ;
-     Double_t m=(pCalo+pConv).M() ;
-     Double_t ptm=(pCalo+pConv).Pt() ;
-     FillHistogram("hMC_CaloConv_pi0_v0_PHOSclu_ptRec",ptm) ;
-     FillHistogram("hMC_CaloConv_pi0_v0_PHOSclu_mvsPt",m,ptm) ;
+     //OnFly
+     if(foundV01onfly ||foundV02onfly){
+       snprintf(hkey,55,"hMC_CaloConv_%s_v0onfly_PHOSclu",partName) ;
+       FillHistogram(hkey,pt) ;
+
+       if((foundV01onflyPID ||foundV02onflyPID) && cluInPHOSpid){
+       snprintf(hkey,55,"hMC_CaloConv_%s_v0onfly_PHOSclu_pid",partName) ;
+         FillHistogram(hkey,pt) ;
+         for(Int_t iw=0;iw<10;iw++){ //resolution
+           for(Int_t in=0;in<10;in++){
+             char keym[55] ;
+             snprintf(keym,55,"hMC_CaloConv_%s_v0onfly_PHOSclu_w%d_n%d",partName,iw,in) ;
+             Double_t mMod=0.,ptMod=0. ;
+             Recalibrate(mMod, ptMod, &pCalo, &pConvOn, iw, in) ;
+             FillHistogram(keym,ptMod) ;
+             snprintf(keym,55,"hMC_CaloConv_%s_v0onfly_ConvPHOSclu_w%d_n%d",partName,iw,in) ;
+             RecalibrateConvPHOS(mMod, ptMod, &pCalo, &pConvOn, iw, in) ;
+             FillHistogram(keym,ptMod) ;
+           }
+         }
+         if(!closeToBad){
+           snprintf(hkey,55,"hMC_CaloConv_%s_v0onfly_PHOSclu_good",partName) ;
+           FillHistogram(hkey,pt) ;
+         }
+         Double_t m=(pCalo+pConvOn).M() ;
+         Double_t ptm=(pCalo+pConvOn).Pt() ;
+         snprintf(hkey,55,"hMC_CaloConv_%s_v0on_PHOSclu_ptRec",partName) ;
+         FillHistogram(hkey,ptm) ;
+         snprintf(hkey,55,"hMC_CaloConv_%s_v0on_PHOSclu_mvsPt",partName) ;
+         FillHistogram(hkey,m,ptm) ;
+       }
+     }
+
+     //Offline
+     if(foundV01offline ||foundV02offline){
+       snprintf(hkey,55,"hMC_CaloConv_%s_v0offline_PHOSclu",partName) ;
+       FillHistogram(hkey,pt) ;
+       if((foundV01offlinePID ||foundV02offlinePID) && cluInPHOSpid){
+         snprintf(hkey,55,"hMC_CaloConv_%s_v0offline_PHOSclu_pid",partName) ;
+         FillHistogram(hkey,pt) ;
+         Double_t m=(pCalo+pConvOff).M() ;
+         Double_t ptm=(pCalo+pConvOff).Pt() ;
+         snprintf(hkey,55,"hMC_CaloConv_%s_v0off_PHOSclu_ptRec",partName) ;
+         FillHistogram(hkey,ptm) ;
+         snprintf(hkey,55,"hMC_CaloConv_%s_v0off_PHOSclu_mvsPt",partName) ;
+         FillHistogram(hkey,m,ptm) ;
+         if(!closeToBad){
+           snprintf(hkey,55,"hMC_CaloConv_%s_v0offline_PHOSclu_good",partName) ;
+           FillHistogram(hkey,pt) ;
+         }
+       }
+     } 
+
+     if((foundV01onflyPID ||foundV02onflyPID) && cluInPHOSpid){
+       TString base("hMC_CaloConv_") ; base+=partName; base+="_v0onfly_PHOSclu_mod" ;
+       if(hitPHOS1)
+         base+=mod1 ;
+       else
+         base+=mod2 ;
+       FillHistogram(base.Data(),pt) ;
+     }
+
+     if((foundV01offlinePID ||foundV02offlinePID) && cluInPHOSpid){
+       TString base("hMC_CaloConv_") ; base+=partName; base+="_v0offline_PHOSclu_mod" ;
+       if(hitPHOS1)
+         base+=mod1 ;
+       else
+         base+=mod2 ;
+       FillHistogram(base.Data(),pt) ;
+     }
    }
-   if(cluInEMCAL){
-     FillHistogram("hMC_CaloConv_pi0_v0_EMCALclu",pt) ;
-     Double_t m=(pCalo+pConv).M() ;
-     Double_t ptm=(pCalo+pConv).Pt() ;
-     FillHistogram("hMC_CaloConv_pi0_v0_EMCALclu_ptRec",ptm) ;
-     FillHistogram("hMC_CaloConv_pi0_v0_EMCALclu_mvsPt",m,ptm) ;
+   if(cluInEMCAL && strcmp(partName,"pi0")==0){
+     //OnFly
+     if(foundV01onfly ||foundV02onfly){
+       FillHistogram("hMC_CaloConv_pi0_v0onfly_EMCALclu",pt) ;
+
+       if((foundV01onflyPID ||foundV02onflyPID) && cluInEMCALpid){
+         FillHistogram("hMC_CaloConv_pi0_v0onfly_EMCALclu_pid",pt) ;
+         for(Int_t iw=0;iw<10;iw++){ //resolution
+           for(Int_t in=0;in<10;in++){
+             char keym[55] ;
+             snprintf(keym,55,"hMC_CaloConv_pi0_v0onfly_EMCALclu_w%d_n%d",iw,in) ;
+             Double_t mMod=0.,ptMod=0. ;
+             RecalibrateEMCAL(mMod, ptMod, &pCalo, &pConvOn, iw, in) ;
+             FillHistogram(keym,ptMod) ;
+           }
+         }
+         if(!closeToBad)
+           FillHistogram("hMC_CaloConv_pi0_v0onfly_EMCALclu_good",pt) ;
+         Double_t m=(pCalo+pConvOn).M() ;
+         Double_t ptm=(pCalo+pConvOn).Pt() ;
+         FillHistogram("hMC_CaloConv_pi0_v0on_EMCALclu_ptRec",ptm) ;
+         FillHistogram("hMC_CaloConv_pi0_v0on_EMCALclu_mvsPt",m,ptm) ;
+       }
+     }
+
+     //Offline
+     if(foundV01offline ||foundV02offline){
+       FillHistogram("hMC_CaloConv_pi0_v0offline_EMCALclu",pt) ;
+       if((foundV01offlinePID ||foundV02offlinePID) && cluInEMCALpid){
+         FillHistogram("hMC_CaloConv_pi0_v0offline_EMCALclu_pid",pt) ;
+         Double_t m=(pCalo+pConvOff).M() ;
+         Double_t ptm=(pCalo+pConvOff).Pt() ;
+         FillHistogram("hMC_CaloConv_pi0_v0off_EMCALclu_ptRec",ptm) ;
+         FillHistogram("hMC_CaloConv_pi0_v0off_EMCALclu_mvsPt",m,ptm) ;
+         if(!closeToBad)
+           FillHistogram("hMC_CaloConv_pi0_v0offline_EMCALclu_good",pt) ;
+       }
+     }
    }
   }
 
+  //Construct Inv mass distributions for residual correlations
+  if(fPHOSEvent && fConvEvent){
+    for(Int_t iPHOS=0; iPHOS<fPHOSEvent->GetEntriesFast();iPHOS++){
+      TLorentzVector * cal = static_cast<TLorentzVector*>(fPHOSEvent->At(iPHOS)) ;
+      Int_t iclu=fGammaPHOS[iPHOS] ;
+      AliESDCaloCluster * clu = fESDEvent->GetCaloCluster(iclu);
+      Int_t iprimPHOS = clu->GetLabel() ; //# of particle hit PHOS/EMCAL
+      for(Int_t iConv = 0; iConv<fConvEvent->GetEntriesFast(); iConv++){
+        TLorentzVector * cnv = static_cast<TLorentzVector*>(fConvEvent->At(iConv)) ;
+        if(!cnv->TestBit(kConvOnFly) || cnv->TestBit(kConvEta)) 
+          continue;
+
+        Int_t iv0=fGammaV0s[iConv] ;
+        AliESDv0 * v0 = fESDEvent->GetV0(iv0) ;
+        Int_t iprimNeg = TMath::Abs(fESDEvent->GetTrack(v0->GetNindex())->GetLabel()) ;
+        Int_t iprimPos = TMath::Abs(fESDEvent->GetTrack(v0->GetPindex())->GetLabel()) ;
+
+        //Check if there was a common ancistor
+        Bool_t found = kFALSE ;
+        Int_t curPHOS=iprimPHOS ;
+        Int_t commonA=-1 ; 
+        while(!found && curPHOS>-1){
+          Int_t curNeg=iprimNeg ;
+          while(!found && curNeg>-1){
+            if(curNeg==curPHOS){
+              found=kTRUE ;
+              commonA=curPHOS ;
+            }
+            else{
+              curNeg=fStack->Particle(curNeg)->GetFirstMother() ;
+            }
+          }
+          curPHOS=fStack->Particle(curPHOS)->GetFirstMother() ;
+        }
+        found = kFALSE ;
+        curPHOS=iprimPHOS ;
+        Int_t commonB=-1 ;
+        while(!found && curPHOS>-1){
+          Int_t curPos=iprimPos ;
+          while(!found && curPos>-1){
+            if(curPos==curPHOS){
+              found=kTRUE ;
+              commonB=curPHOS ;
+            }
+            else{
+              curPos=fStack->Particle(curPos)->GetFirstMother() ;
+            }
+          }
+          curPHOS=fStack->Particle(curPHOS)->GetFirstMother() ;
+        }
+        if(commonA != commonB){
+           //Strange
+           AliInfo(Form("CommonA=%d, commonB=%d",commonA,commonB)) ; 
+        }
+        if(commonA>-1){//There was common particles
+          Int_t pdg = fStack->Particle(commonA)->GetPdgCode() ;
+          TLorentzVector pi=*cal + *cnv ;
+          Double_t m=pi.M() ;
+          Double_t pt=pi.Pt() ;
+          Double_t alpha=TMath::Abs(cal->Energy()-cnv->Energy())/(cal->Energy()+cnv->Energy()) ;
+          switch(pdg){
+          case 11:
+          case -11:
+          case 22: //conversion
+            FillHistogram("hMC_Resid_PHOS_Phot_mvsPt",m,pt,alpha) ;
+            break ;
+          case 111: //pi0
+            FillHistogram("hMC_Resid_PHOS_Pi0_mvsPt",m,pt,alpha) ;
+            break ;
+          case 221: //eta
+              FillHistogram("hMC_Resid_PHOS_eta_mvsPt",m,pt,alpha) ;
+            break ;
+          case 321: //K+
+          case -321: //K-
+          case 310:  //K0s
+          case 130:  //K0L
+            FillHistogram("hMC_Resid_PHOS_K_mvsPt",m,pt,alpha) ;
+            break ;
+          case 211:
+          case -211: 
+            FillHistogram("hMC_Resid_PHOS_pi_mvsPt",m,pt,alpha) ;
+            break ;
+          case -2212:  //pbar
+          case -2112:  //nbar
+            FillHistogram("hMC_Resid_PHOS_pbar_mvsPt",m,pt,alpha) ;
+            break ;
+          default: //else
+            FillHistogram("hMC_Resid_PHOS_other_mvsPt",m,pt,alpha) ;
+            break ;
+          }
+        }
+       }
+     }
+   }
+  
 
+  if(fEMCALEvent && fConvEvent){
+    for(Int_t iEMCAL=0; iEMCAL<fEMCALEvent->GetEntriesFast();iEMCAL++){
+      TLorentzVector * cal = static_cast<TLorentzVector*>(fEMCALEvent->At(iEMCAL)) ;
+      Int_t iclu=fGammaEMCAL[iEMCAL] ;
+      AliESDCaloCluster * clu = fESDEvent->GetCaloCluster(iclu);
+      Int_t iprimEMCAL = clu->GetLabel() ; //# of particle hit EMCAL
+      for(Int_t iConv = 0; iConv<fConvEvent->GetEntriesFast(); iConv++){
+        TLorentzVector * cnv = static_cast<TLorentzVector*>(fConvEvent->At(iConv)) ;
+        if(!cnv->TestBit(kConvOnFly) || cnv->TestBit(kConvEta)) 
+          continue;
+        Int_t iv0=fGammaV0s[iConv] ;
+        AliESDv0 * v0 = fESDEvent->GetV0(iv0) ;
+        Int_t iprimNeg = TMath::Abs(fESDEvent->GetTrack(v0->GetNindex())->GetLabel()) ;
+        Int_t iprimPos = TMath::Abs(fESDEvent->GetTrack(v0->GetPindex())->GetLabel()) ;
+  
+        //Check if there was a common ancistor
+        Bool_t found = kFALSE ;
+        Int_t curEMCAL=iprimEMCAL ;
+        Int_t commonA=-1 ;
+        while(!found && curEMCAL>-1){
+          Int_t curNeg=iprimNeg ;
+          while(!found && curNeg>-1){
+            if(curNeg==curEMCAL){
+              found=kTRUE ;
+              commonA=curEMCAL ;
+            }
+            else{
+              curNeg=fStack->Particle(curNeg)->GetFirstMother() ;
+            }
+          }
+          curEMCAL=fStack->Particle(curEMCAL)->GetFirstMother() ;
+        }
+        found = kFALSE ;
+        curEMCAL=iprimEMCAL ;
+        Int_t commonB=-1 ;
+        while(!found && curEMCAL>-1){
+          Int_t curPos=iprimPos ;
+          while(!found && curPos>-1){
+            if(curPos==curEMCAL){
+              found=kTRUE ;
+              commonB=curEMCAL ;
+            }
+            else{
+              curPos=fStack->Particle(curPos)->GetFirstMother() ;
+            }
+          }
+          curEMCAL=fStack->Particle(curEMCAL)->GetFirstMother() ;
+        }
+  
+        if(commonA != commonB){
+           //Strange
+           AliInfo(Form("CommonA=%d, commonB=%d",commonA,commonB)) ;
+        }
+        if(commonA>-1){//There was common particles
+          Int_t pdg = fStack->Particle(commonA)->GetPdgCode() ;
+          TLorentzVector pi=*cal + *cnv ;
+          Double_t m=pi.M() ;
+          Double_t pt=pi.Pt() ;
+          Double_t alpha=TMath::Abs(cal->Energy()-cnv->Energy())/(cal->Energy()+cnv->Energy()) ;
+          switch(pdg){
+          case 11:
+          case -11:
+          case 22: //conversion
+            FillHistogram("hMC_Resid_EMCAL_Phot_mvsPt",m,pt,alpha) ;
+            break ;
+          case 111: //pi0
+            FillHistogram("hMC_Resid_EMCAL_Pi0_mvsPt",m,pt,alpha) ;
+            break ;
+          case 221: //eta
+            FillHistogram("hMC_Resid_EMCAL_eta_mvsPt",m,pt,alpha) ;
+            break ;
+          case 321: //K+
+          case -321: //K-
+          case 310:  //K0s
+          case 130:  //K0L
+            FillHistogram("hMC_Resid_EMCAL_K_mvsPt",m,pt,alpha) ;
+            break ;
+          case 211:
+          case -211:
+            FillHistogram("hMC_Resid_EMCAL_pi_mvsPt",m,pt,alpha) ;
+            break ;
+          case -2212:  //pbar
+          case -2112:  //nbar
+            FillHistogram("hMC_Resid_EMCAL_pbar_mvsPt",m,pt,alpha) ;
+            break ;
+          default: //else
+            FillHistogram("hMC_Resid_EMCAL_other_mvsPt",m,pt,alpha) ;
+            break ;
+          }
+        }
+       }
+     }
+   } 
+   
 
    //------------- now photons ----------------
    for (Int_t iTracks = 0; iTracks < fStack->GetNtrack(); iTracks++) {
@@ -1984,7 +2629,7 @@ void AliAnalysisTaskCaloConv::ProcessMC(){
      FillHistogram("hMC_CaloConv_phot",pt) ;
 
      Int_t mod ;
-     Double_t x,z ;
+     Double_t x=0.,z=0. ;
      Bool_t hitPHOS = fPHOSgeom->ImpactOnEmc(particle, mod, z,x) ;
      Bool_t hitEMCAL= fEMCALgeom->Impact(particle) ;
 
@@ -2016,10 +2661,8 @@ void AliAnalysisTaskCaloConv::ProcessMC(){
        TParticle * negativeMC = fStack->Particle(TMath::Abs(fESDEvent->GetTrack(v0->GetNindex())->GetLabel()));
        TParticle * positiveMC = fStack->Particle(TMath::Abs(fESDEvent->GetTrack(v0->GetPindex())->GetLabel()));
 
-       if(negativeMC && positiveMC){
-         if(negativeMC->GetMother(0) != positiveMC->GetMother(0))
-           continue ;
-       }
+       if(negativeMC->GetMother(0) != positiveMC->GetMother(0))
+         continue ;
 
        if(TMath::Abs(negativeMC->GetPdgCode())!=11 || TMath::Abs(positiveMC->GetPdgCode())!=11){
          continue;
@@ -2053,6 +2696,7 @@ void AliAnalysisTaskCaloConv::ProcessMC(){
       //Registered in PHOS/EMCAL
      Bool_t cluInPHOS = kFALSE,cluInEMCAL=kFALSE ;
      TLorentzVector pCalo ;
+     Bool_t dist1=kFALSE, dist2=kFALSE ;
      for (Int_t i=0; i<fESDEvent->GetNumberOfCaloClusters(); i++) {
        AliESDCaloCluster * clu = fESDEvent->GetCaloCluster(i);
        Int_t iprim = clu->GetLabel() ; //# of particle hit PHOS/EMCAL
@@ -2071,22 +2715,38 @@ void AliAnalysisTaskCaloConv::ProcessMC(){
        if(clu->IsPHOS() && hitPHOS){
          cluInPHOS=kTRUE ;
          clu->GetMomentum(pCalo ,vtx);
+         if(clu->GetDistanceToBadChannel()<fBadDistCutPHOS)
+           dist1=kTRUE ;
+         if(clu->GetDistanceToBadChannel()<2.*fBadDistCutPHOS)
+           dist2=kTRUE ;
          break ;
        }
        if(!clu->IsPHOS() && hitEMCAL){
          cluInEMCAL=kTRUE ;
          clu->GetMomentum(pCalo ,vtx);
+         if(clu->GetDistanceToBadChannel()<fBadDistCutEMCAL)
+           dist1=kTRUE ;
+         if(clu->GetDistanceToBadChannel()<2.*fBadDistCutEMCAL)
+           dist2=kTRUE ;
          break ;
        }
      }
 
      if(cluInPHOS){
        FillHistogram("hMC_CaloConv_gamma_PHOSclu",pt) ;
+       if(!dist1)
+         FillHistogram("hMC_CaloConv_gamma_PHOSclu_dist1",pt) ;
+       if(!dist2)
+         FillHistogram("hMC_CaloConv_gamma_PHOSclu_dist2",pt) ;
        FillHistogram("hMC_CaloConv_gamma_PHOSclu_recE",pCalo.E()) ;
        FillHistogram("hMC_CaloConv_gamma_PHOSclu_devsE",(particle->Energy()-pCalo.E())/particle->Energy(),particle->Energy()) ;
      }
      if(cluInEMCAL){
        FillHistogram("hMC_CaloConv_gamma_EMCALclu",pt) ;
+       if(!dist1)
+         FillHistogram("hMC_CaloConv_gamma_EMCALclu_dist1",pt) ;
+       if(!dist2)
+         FillHistogram("hMC_CaloConv_gamma_EMCALclu_dist2",pt) ;
        FillHistogram("hMC_CaloConv_gamma_EMCALclu_recE",pCalo.E()) ;
        FillHistogram("hMC_CaloConv_gamma_EMCALclu_devsE",(particle->Energy()-pCalo.E())/particle->Energy(),particle->Energy()) ;
      }
@@ -2094,14 +2754,22 @@ void AliAnalysisTaskCaloConv::ProcessMC(){
 }
 //_____________________________________________________________________________
 void AliAnalysisTaskCaloConv::FillHistogram(const char * key,Double_t x)const{
+  //FillHistogram
   TH1F * tmp = dynamic_cast<TH1F*>(fOutputContainer->FindObject(key)) ;
-  if(!tmp)
-    AliError(Form("can not find histogram <%s> ",key)) ;
+  if(!tmp){
+    AliInfo(Form("can not find histogram <%s> ",key)) ;
+    return ;
+  }
   tmp->Fill(x) ;
 }
 //_____________________________________________________________________________
 void AliAnalysisTaskCaloConv::FillHistogram(const char * key,Double_t x,Double_t y)const{
+  //FillHistogram
   TObject * tmp = fOutputContainer->FindObject(key) ;
+  if(!tmp){
+    AliInfo(Form("can not find histogram <%s> ",key)) ;
+    return ;
+  }
   if(tmp->IsA() == TClass::GetClass("TH1F")){
     ((TH1F*)tmp)->Fill(x,y) ;
     return ;
@@ -2110,14 +2778,17 @@ void AliAnalysisTaskCaloConv::FillHistogram(const char * key,Double_t x,Double_t
     ((TH2F*)tmp)->Fill(x,y) ;
     return ;
   }
-  AliError(Form("Calling FillHistogram with 2 parameters for histo <%s> of type %s",key,tmp->IsA())) ;
+  AliError(Form("Calling FillHistogram with 2 parameters for histo <%s> of type %s",key,tmp->IsA()->GetName())) ;
 }
 
-
 //_____________________________________________________________________________
 void AliAnalysisTaskCaloConv::FillHistogram(const char * key,Double_t x,Double_t y, Double_t z) const{
   //Fills 1D histograms with key
   TObject * tmp = fOutputContainer->FindObject(key) ;
+  if(!tmp){
+    AliInfo(Form("can not find histogram <%s> ",key)) ;
+    return ;
+  }
   if(tmp->IsA() == TClass::GetClass("TH2F")){
     ((TH2F*)tmp)->Fill(x,y,z) ;
     return ;
@@ -2148,6 +2819,143 @@ Double_t AliAnalysisTaskCaloConv::PlanarityAngle(const AliExternalTrackParam * p
     return TMath::Pi()-wa ; //reverse field
 
 }
+//______________________________________________________________________________
+Bool_t AliAnalysisTaskCaloConv::IsGoodChannel(const char * det, Int_t mod, Int_t ix, Int_t iz){
+//Check if this channel belogs to the good ones
+
+  if(strcmp(det,"PHOS")==0){
+    if(mod>5 || mod<1){
+      AliError(Form("No bad map for PHOS module %d ",mod)) ;
+      return kTRUE ;
+    } 
+    if(!fPHOSBadMap[mod]){
+      AliError(Form("No Bad map for PHOS module %d",mod)) ;
+      return kTRUE ;
+    }
+    if(fPHOSBadMap[mod]->GetBinContent(ix,iz)>0)
+      return kFALSE ;
+    else
+      return kTRUE ;
+  }
+  else{
+    if(strcmp(det,"EMCAL")==0){
+      if(mod>9 || mod<0){
+        AliError(Form("No bad map for EMCAL module %d ",mod)) ;
+        return kTRUE ;
+      }
+      if(!fEMCALBadMap[mod]){
+        AliError(Form("No bad map for EMCAL module %d ",mod)) ;
+        return kTRUE ;
+      }
+      if(fEMCALBadMap[mod]->GetBinContent(ix,iz)>0)
+        return kFALSE ;
+      else
+        return kTRUE ;
+    }
+    else{
+      AliError(Form("Can not find bad channels for detector %s ",det)) ;
+    }
+  } 
+   
+  return kTRUE ;
+}
+//______________________________________________________________________________
+void AliAnalysisTaskCaloConv::Recalibrate(Double_t &m, Double_t &pt, const TLorentzVector *calo, const TLorentzVector * conv, Int_t iw, Int_t in) {
+  //Apply decalibration and non-linearity
+  TLorentzVector calo2(*calo) ;
+  Double_t en=calo2.E() ;
+
+  Double_t sigma=0.06+0.005*iw ; //additional smearing
+  //Nonlinearity
+  Double_t a=0.02*(in%6-2.5) ;
+  Double_t b=0.5+1.*((Int_t)in/6) ;
+  Double_t enNew=1.-a*TMath::Exp(-en/b) ;
+  Double_t corr=gRandom->Gaus(enNew,sigma) ;
+  calo2*=corr ;
+
+  m=(calo2+ *conv).M() ;
+  pt=(calo2+ *conv).Pt() ;
+
+}
+//______________________________________________________________________________
+void AliAnalysisTaskCaloConv::RecalibrateEMCAL(Double_t &m, Double_t &pt, const TLorentzVector *calo, const TLorentzVector * conv, Int_t iw, Int_t in) {
+  //Apply decalibration and non-linearity
+  TLorentzVector calo2(*calo) ;
+  Double_t en=calo2.E() ;
+
+  Double_t sigma=0.04+0.005*iw ; //additional smearing
+  //Nonlinearity
+  Double_t a=0.02*(in%6-2.5) ;
+  Double_t b=0.25+0.5*((Int_t)in/6) ;
+  Double_t enNew=1.-a*TMath::Exp(-en/b) ;
+  Double_t corr=gRandom->Gaus(enNew,sigma) ;
+  calo2*=corr ;
+
+  m=(calo2+ *conv).M() ;
+  pt=(calo2+ *conv).Pt() ;
+
+}
+//______________________________________________________________________________
+void AliAnalysisTaskCaloConv::RecalibrateConvPHOS(Double_t &m, Double_t &pt, const TLorentzVector *calo, const TLorentzVector * conv, Int_t iw, Int_t in) {
+  //Apply decalibration and non-linearity
+
+  //First default PHOS smearing
+  TLorentzVector calo2(*calo) ;
+  Double_t en=calo2.E() ;
+
+  Double_t sigma=0.065 ; //additional smearing
+  //Nonlinearity
+  Double_t a=0.15 ;
+  Double_t b=0.45 ;
+  Double_t enNew=1.+a*TMath::Exp(-en/b) ;
+  Double_t corr=gRandom->Gaus(enNew,sigma) ;
+  calo2*=corr ;
+
+  //Now conversion photon
+  TLorentzVector conv2(*conv) ;
+  //linear offset in z:
+  Double_t eta=conv2.Eta() ;
+  Double_t c=1.e-3*iw ;
+  eta+= c *TMath::Sign(0.9-TMath::Abs(eta),eta) ;
+
+  //Smear energy and add nonlinearity
+  //Nonlinearity
+  Double_t enConv=conv2.E() ;
+  Double_t ac=0.02*(in%5) ;
+  Double_t bc=0.25+0.5*((Int_t)in/5) ;
+  Double_t enNewc=1.+ac*TMath::Exp(-enConv/bc) ;
+  corr=gRandom->Gaus(enNewc,0.01) ;
+  Double_t ptc=conv2.Pt()*corr ;
+  conv2.SetPtEtaPhiM(ptc,eta,conv2.Phi(),0.) ;
+
+  m =(calo2 + conv2).M() ;
+  pt=(calo2 + conv2).Pt() ;
+
+}
+//______________________________________________________________________________
+void AliAnalysisTaskCaloConv::GetArmenterosQtAlfa(AliKFParticle* positiveKFParticle, AliKFParticle * negativeKFParticle, AliKFParticle * gammaKFCandidate, Double_t armenterosQtAlfa[2] ){
+  //see header file for documentation
+
+  TVector3 momentumVectorPositiveKF(positiveKFParticle->GetPx(),positiveKFParticle->GetPy(),positiveKFParticle->GetPz());
+  TVector3 momentumVectorNegativeKF(negativeKFParticle->GetPx(),negativeKFParticle->GetPy(),negativeKFParticle->GetPz());
+  TVector3 vecV0(gammaKFCandidate->GetPx(),gammaKFCandidate->GetPy(),gammaKFCandidate->GetPz());
+
+  Float_t thetaV0pos=TMath::ACos(( momentumVectorPositiveKF* vecV0)/(momentumVectorPositiveKF.Mag() * vecV0.Mag()));
+  Float_t thetaV0neg=TMath::ACos(( momentumVectorNegativeKF* vecV0)/(momentumVectorNegativeKF.Mag() * vecV0.Mag()));
+
+  Float_t alfa =((momentumVectorPositiveKF.Mag())*TMath::Cos(thetaV0pos)-(momentumVectorNegativeKF.Mag())*TMath::Cos(thetaV0neg))/
+    ((momentumVectorPositiveKF.Mag())*TMath::Cos(thetaV0pos)+(momentumVectorNegativeKF.Mag())*TMath::Cos(thetaV0neg)) ;
+
+
+  Float_t qt = momentumVectorPositiveKF.Mag()*TMath::Sin(thetaV0pos);
+
+  armenterosQtAlfa[0]=qt;
+  armenterosQtAlfa[1]=alfa;
+
+}
+
+
+