]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
updates from Saehanseul.
authorloizides <loizides@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 18 Jun 2012 15:04:24 +0000 (15:04 +0000)
committerloizides <loizides@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 18 Jun 2012 15:04:24 +0000 (15:04 +0000)
PWGGA/EMCALJetTasks/AliAnalysisTaskSOH.cxx
PWGGA/EMCALJetTasks/AliAnalysisTaskSOH.h

index fbe5c49cd0521286deeae0cfb639817fdf2dd221..64532ecc6fa95641d5d0f68eb0990eadb025d25e 100644 (file)
-// $Id$\r
-//\r
-// Simulation EMCal task.\r
-//\r
-// Author: Saehanseul Oh\r
-\r
-#include "AliAnalysisTaskSOH.h"\r
-\r
-#include <TH1F.h>\r
-#include <TH2F.h>\r
-\r
-#include "AliAnalysisManager.h"\r
-#include "AliAnalysisTask.h"\r
-#include "AliEMCALRecoUtils.h"\r
-#include "AliEMCALTrack.h"\r
-#include "AliESDCaloCluster.h"\r
-#include "AliESDEvent.h"\r
-#include "AliESDInputHandler.h"\r
-#include "AliESDtrack.h"\r
-#include "AliESDtrackCuts.h"\r
-#include "AliExternalTrackParam.h"\r
-#include "AliLog.h"\r
-#include "AliMCEvent.h"\r
-\r
-ClassImp(AliAnalysisTaskSOH)\r
-\r
-//________________________________________________________________________\r
-AliAnalysisTaskSOH::AliAnalysisTaskSOH() :\r
-  AliAnalysisTaskSE(), \r
-  fESD(0), \r
-  fMC(0), \r
-  fEsdTrackCuts(0x0),\r
-  fHybridTrackCuts1(0x0),\r
-  fHybridTrackCuts2(0x0),\r
-  fTrackIndices(0x0),\r
-  fOutputList(0x0),        \r
-  fHEventStat(0),      \r
-  fHTrkEffParGenPt(0), \r
-  fHTrkEffDetGenPt(0), \r
-  fHTrkEffDetRecPt(0), \r
-  fHEOverPVsPt(0x0),\r
-  fHEMCalResponsePion(0x0), \r
-  fHEMCalResponseElec(0x0),\r
-  fHEMCalResponseProton(0x0), \r
-  fHEMCalRecPhiEtaClus(0x0),\r
-  fHEMCalRecPhiEtaTrk(0x0), \r
-  fHClsPhiEta(0x0),\r
-  fHEMCalRecdPhidEta(0x0),\r
-  fHEMCalRecdPhidEtaP(0x0),\r
-  fHEMCalRecdPhidEtaM(0x0),\r
-  fHEMCalRecdPhidEta_Truth(0x0),\r
-  fHEMCalRecdPhidEtaP_Truth(0x0),\r
-  fHEMCalRecdPhidEtaM_Truth(0x0),\r
-  fHEMCalRecdPhidEtaposEta(0x0),\r
-  fHEMCalRecdPhidEtanegEta(0x0)\r
-{\r
-  // Constructor\r
-\r
-  // Output slot #1 writes into a TH1 container\r
-  DefineOutput(1, TList::Class());\r
-}\r
-\r
-\r
-//________________________________________________________________________\r
-AliAnalysisTaskSOH::AliAnalysisTaskSOH(const char *name) :\r
-  AliAnalysisTaskSE(name), \r
-  fESD(0), \r
-  fMC(0), \r
-  fEsdTrackCuts(0x0),\r
-  fHybridTrackCuts1(0x0),\r
-  fHybridTrackCuts2(0x0),\r
-  fTrackIndices(0x0),\r
-  fOutputList(0x0),        \r
-  fHEventStat(0),      \r
-  fHTrkEffParGenPt(0), \r
-  fHTrkEffDetGenPt(0), \r
-  fHTrkEffDetRecPt(0), \r
-  fHEOverPVsPt(0x0),\r
-  fHEMCalResponsePion(0x0), \r
-  fHEMCalResponseElec(0x0),\r
-  fHEMCalResponseProton(0x0), \r
-  fHEMCalRecPhiEtaClus(0x0),\r
-  fHEMCalRecPhiEtaTrk(0x0), \r
-  fHClsPhiEta(0x0),\r
-  fHEMCalRecdPhidEta(0x0),\r
-  fHEMCalRecdPhidEtaP(0x0),\r
-  fHEMCalRecdPhidEtaM(0x0),\r
-  fHEMCalRecdPhidEta_Truth(0x0),\r
-  fHEMCalRecdPhidEtaP_Truth(0x0),\r
-  fHEMCalRecdPhidEtaM_Truth(0x0),\r
-  fHEMCalRecdPhidEtaposEta(0x0),\r
-  fHEMCalRecdPhidEtanegEta(0x0)\r
-{\r
-  // Constructor\r
-\r
-  // Output slot #1 writes into a TH1 container\r
-  DefineOutput(1, TList::Class());\r
-}\r
-\r
-\r
-//________________________________________________________________________\r
-AliAnalysisTaskSOH::~AliAnalysisTaskSOH()\r
-{\r
-  // Destructor.\r
-\r
-  delete fEsdTrackCuts;\r
-  delete fHybridTrackCuts1;\r
-  delete fHybridTrackCuts2;\r
-  delete fTrackIndices;\r
-}\r
-\r
-\r
-//________________________________________________________________________\r
-void AliAnalysisTaskSOH::UserCreateOutputObjects()\r
-{\r
-  // Create histograms, called once.\r
-\r
-  OpenFile(1);\r
-  \r
-  fOutputList = new TList();\r
-  fOutputList->SetOwner(1);\r
-\r
-  fHEventStat = new TH1F("fHEventStat","Event statistics for analysis",1,0,1);\r
-  fHEventStat->GetXaxis()->SetBinLabel(1,"Event");\r
-  fOutputList->Add(fHEventStat);\r
-\r
-  fHTrkEffParGenPt = new TH1F("fHTrkEffParGenPt", "Particle level truth p_{T} distribution of generated primary charged pions;p_{T}^{gen} (GeV/c)",15,0.15,3.1);\r
-  fOutputList->Add(fHTrkEffParGenPt);\r
-\r
-  fHTrkEffDetGenPt = new TH1F("fHTrkEffDetGenPt", "Detector level truth p_{T} distribution of primary charged pions;p_{T}^{gen} (GeV/c)",15,0.15,3.1);\r
-  fOutputList->Add(fHTrkEffDetGenPt);\r
-\r
-  fHTrkEffDetRecPt = new TH1F("fHTrkEffDetRecPt", "Reconstructed track p_{T} distribution of primary charged pions;p_{T}^{rec} (GeV/c)",15,0.15,3.1);\r
-  fOutputList->Add(fHTrkEffDetRecPt);\r
-\r
-  fHEOverPVsPt = new TH2F("fHEOverPVsPt", "E/P vs track p_{T}; p_{T} (GeV/c); E/P", 20 , 0, 4, 40, 0, 3.2);\r
-  fOutputList->Add(fHEOverPVsPt);\r
-\r
-  fHEMCalResponsePion = new TH2F("fHEMCalResponsePion", "Pion E/P vs track p_{T}; p_{T} (GeV/c); E/P", 100 , 0, 4, 100, 0, 3.2);\r
-  fOutputList->Add(fHEMCalResponsePion);\r
-\r
-  fHEMCalResponseElec = new TH2F("fHEMCalResponseElec", "Electron E/P vs track p_{T};  p_{T} (GeV/c); E/P", 100 , 0, 4, 100, 0, 3.2);\r
-  fOutputList->Add(fHEMCalResponseElec);\r
-\r
-  fHEMCalResponseProton = new TH2F("fHEMCalResponseProton", "Proton E/P vs track p_{T};  p_{T} (GeV/c); E/P", 100 , 0, 4, 100, 0, 3.2);\r
-  fOutputList->Add(fHEMCalResponseElec);\r
-\r
-  fHEMCalRecPhiEtaClus = new TH2F("fHEMCalRecPhiEtaClus","EMCAL Cluster#phi-#eta; #eta; #phi",1000,-3,3,1000,-4,4);\r
-  fOutputList->Add(fHEMCalRecPhiEtaClus);\r
-\r
-  fHEMCalRecPhiEtaTrk = new TH2F("fHEMCalRecPhiEtaTrk","EMCAL Track #phi-#eta; #eta; #phi",1000,-3,3,1000,-4,4);\r
-  fOutputList->Add(fHEMCalRecPhiEtaTrk);\r
-\r
-  fHClsPhiEta = new TH2F("fHClsPhiEta", "cluster #phi-#eta; #eta; #phi",1000,-3,3,1000,-4,4);\r
-  fOutputList->Add(fHClsPhiEta);\r
-\r
-  fHEMCalRecdPhidEta = new TH2F("fHEMCalRecdPhidEta","EMCAL Cluster-Track #Delta#phi-#Delta#eta; #Delta#eta; #Delta#phi",1000,-0.1,0.1,1000,-0.5,0.5);\r
-  fOutputList->Add(fHEMCalRecdPhidEta);\r
-\r
-  fHEMCalRecdPhidEtaP = new TH2F("fHEMCalRecdPhidEtaP","EMCAL Charge+ Cluster-Track #Delta#phi-#Delta#eta; #Delta#eta; #Delta#phi",1000,-0.1,0.1,1000,-0.5,0.5);\r
-  fOutputList->Add(fHEMCalRecdPhidEtaP);\r
-\r
-  fHEMCalRecdPhidEtaM = new TH2F("fHEMCalRecdPhidEtaM","EMCAL Charge- Cluster-Track #Delta#phi-#Delta#eta; #Delta#eta; #Delta#phi",1000,-0.1,0.1,1000,-0.5,0.5);\r
-  fOutputList->Add(fHEMCalRecdPhidEtaM);\r
-\r
-  fHEMCalRecdPhidEta_Truth = new TH2F("fHEMCalRecdPhidEta_Truth","EMCAL Cluster-Track(Truth matched) #Delta#phi-#Delta#eta; #Delta#eta; #Delta#phi",1000,-0.1,0.1,1000,-0.5,0.5);\r
-  fOutputList->Add(fHEMCalRecdPhidEta_Truth);\r
-\r
-  fHEMCalRecdPhidEtaP_Truth = new TH2F("fHEMCalRecdPhidEtaP_Truth","EMCAL Charge+ Cluster-Track(Truth matched) #Delta#phi-#Delta#eta; #Delta#eta; #Delta#phi",1000,-0.1,0.1,1000,-0.5,0.5);\r
-  fOutputList->Add(fHEMCalRecdPhidEtaP_Truth);\r
-\r
-  fHEMCalRecdPhidEtaM_Truth = new TH2F("fHEMCalRecdPhidEtaM_Truth","EMCAL Charge- Cluster-Track(Truth matched) #Delta#phi-#Delta#eta; #Delta#eta; #Delta#phi",1000,-0.1,0.1,1000,-0.5,0.5);\r
-  fOutputList->Add(fHEMCalRecdPhidEtaM_Truth);\r
-\r
-  fHEMCalRecdPhidEtaposEta = new TH2F("fHEMCalRecdPhidEtaposEta","(+eta track) EMCAL Cluster-Track #Delta#phi-#Delta#eta; #Delta#eta; #Delta#phi",1000,-0.1,0.1,1000,-0.5,0.5);\r
-  fOutputList->Add(fHEMCalRecdPhidEtaposEta);\r
-\r
-  fHEMCalRecdPhidEtanegEta = new TH2F("fHEMCalRecdPhidEtanegEta","(-eta track) EMCAL Cluster-Track #Delta#phi-#Delta#eta; #Delta#eta; #Delta#phi",1000,-0.1,0.1,1000,-0.5,0.5);\r
-  fOutputList->Add(fHEMCalRecdPhidEtanegEta);\r
-  fTrackIndices = new TArrayI();\r
-\r
-  PostData(1, fOutputList);\r
-}\r
-\r
-//________________________________________________________________________\r
-void AliAnalysisTaskSOH::UserExec(Option_t *) \r
-{\r
-  // Main loop, called for each event.\r
-\r
-  // Post output data.\r
-  fESD = dynamic_cast<AliESDEvent*>(InputEvent());\r
-  if (!fESD) {\r
-    printf("ERROR: fESD not available\n");\r
-    return;\r
-  }\r
-\r
-  fMC = MCEvent();\r
-  if (!fMC) {\r
-    printf("ERROR: fMC not available\n");\r
-    return;\r
-  }\r
-\r
-  fHEventStat->Fill(0.5);\r
-\r
-  if(fTrackIndices) \r
-    fTrackIndices->Reset();\r
-\r
-  ProcessTrack();\r
-  ProcessMc();\r
-  \r
-  PostData(1, fOutputList);\r
-}   \r
-   \r
-//________________________________________________________________________\r
-void  AliAnalysisTaskSOH::ProcessTrack()\r
-{\r
-  // Process track.\r
-\r
-  fTrackIndices->Set(fESD->GetNumberOfTracks());\r
-  AliDebug(3,Form("%s:%d Selecting tracks",(char*)__FILE__,__LINE__));\r
-\r
-  Int_t isMth = 0;\r
-  Int_t nTracks = 0;\r
-\r
-  Float_t ClsPos[3] = {-999,-999,-999};\r
-  Double_t emcTrkpos[3] = {-999,-999,-999};\r
-\r
-  for(Int_t itr=0; itr<fESD->GetNumberOfCaloClusters(); itr++)\r
-  {\r
-    AliESDCaloCluster *cluster = fESD->GetCaloCluster(itr);\r
-    if(!cluster) continue;\r
-    cluster->GetPosition(ClsPos);\r
-    TVector3 VClsPos(ClsPos[0], ClsPos[1], ClsPos[2]);\r
-    fHClsPhiEta->Fill(VClsPos.Eta(), VClsPos.Phi());\r
-  }\r
-\r
-  for(Int_t itr=0; itr<fESD->GetNumberOfTracks(); itr++)\r
-  {\r
-    AliESDtrack *esdtrack = fESD->GetTrack(itr);\r
-    if(!esdtrack)continue;\r
-    AliESDtrack *newTrack = GetAcceptTrack(esdtrack);\r
-    if(!newTrack) continue;\r
-  \r
-    Double_t clsE = -1;\r
-    Int_t clsIndex = newTrack->GetEMCALcluster();\r
-    if(newTrack->GetEMCALcluster()>-1)\r
-    {\r
-      AliESDCaloCluster *cluster = fESD->GetCaloCluster(clsIndex);\r
-      if(IsGoodCluster(cluster))\r
-      {\r
-        isMth=1;\r
-             \r
-        cluster->GetPosition(ClsPos);\r
-        TVector3 VClsPos(ClsPos[0], ClsPos[1], ClsPos[2]);\r
-             \r
-        AliEMCALTrack EMCTrk(*newTrack);\r
-        if(!EMCTrk.PropagateToGlobal(ClsPos[0], ClsPos[1], ClsPos[2], 0.0, 0.0)) {\r
-          continue;\r
-        }\r
-        EMCTrk.GetXYZ(emcTrkpos);\r
-        TVector3 VemcTrkPos(emcTrkpos[0],emcTrkpos[1],emcTrkpos[2]);\r
-             \r
-        fHEMCalRecPhiEtaClus->Fill(VClsPos.Eta(), VClsPos.Phi());\r
-        fHEMCalRecPhiEtaTrk->Fill(VemcTrkPos.Eta(), VemcTrkPos.Phi());\r
-             \r
-        Double_t dPhi = VClsPos.Phi() - VemcTrkPos.Phi();\r
-        if (dPhi < -1*TMath::Pi()) dPhi += (2*TMath::Pi());\r
-        else if (dPhi > TMath::Pi()) dPhi -= (2*TMath::Pi());\r
-             \r
-        Double_t dEta = VClsPos.Eta() - VemcTrkPos.Eta();\r
-             \r
-        fHEMCalRecdPhidEta->Fill(dEta, dPhi);  \r
-\r
-        if((newTrack->GetLabel())>-1 && (newTrack->GetLabel()) < fMC->GetNumberOfTracks())\r
-        {\r
-          AliVParticle *vParticle = fMC->GetTrack(newTrack->GetLabel());\r
-          if(IsGoodMcParticle(vParticle, newTrack->GetLabel()))\r
-          {\r
-            fHEMCalRecdPhidEta_Truth->Fill(dEta, dPhi);\r
-            if(vParticle->Charge() > 0) fHEMCalRecdPhidEtaP_Truth->Fill(dEta, dPhi);\r
-            if(vParticle->Charge() < 0) fHEMCalRecdPhidEtaM_Truth->Fill(dEta, dPhi);\r
-          }\r
-        }\r
-\r
-        if(esdtrack->Charge() > 0) {fHEMCalRecdPhidEtaP->Fill(dEta, dPhi);}\r
-        if(esdtrack->Charge() < 0) {fHEMCalRecdPhidEtaM->Fill(dEta, dPhi);}\r
-\r
-        if(VemcTrkPos.Eta() > 0) fHEMCalRecdPhidEtaposEta->Fill(dEta, dPhi);\r
-        if(VemcTrkPos.Eta() < 0) fHEMCalRecdPhidEtanegEta->Fill(dEta, dPhi);\r
-             \r
-        clsE = cluster->E();\r
-        if(newTrack->P()>0) fHEOverPVsPt->Fill(newTrack->Pt(),clsE/newTrack->P());\r
-      }\r
-         \r
-      Int_t ipart = newTrack->GetLabel();\r
-      if(ipart>-1 && ipart<fMC->GetNumberOfTracks())\r
-      {\r
-        AliVParticle* vParticle = fMC->GetTrack(ipart);\r
-        if(isMth && vParticle)\r
-        {\r
-          if(TMath::Abs(vParticle->PdgCode())==211)\r
-          {\r
-            fHEMCalResponsePion->Fill(newTrack->Pt(),clsE/newTrack->P());\r
-          }\r
-          if(TMath::Abs(vParticle->PdgCode())==11)\r
-          {\r
-            fHEMCalResponseElec->Fill(newTrack->Pt(),clsE/newTrack->P());\r
-          }\r
-          if(TMath::Abs(vParticle->PdgCode())==2212)\r
-          {\r
-            fHEMCalResponseProton->Fill(newTrack->Pt(),clsE/newTrack->P());\r
-          }\r
-        }\r
-      }\r
-    }\r
-    fTrackIndices->AddAt(itr,nTracks);\r
-    nTracks++;\r
-  }\r
-  fTrackIndices->Set(nTracks);\r
-}\r
-\r
-//________________________________________________________________________\r
-void AliAnalysisTaskSOH::ProcessMc()\r
-{\r
-  // Process MC.\r
-\r
-  for(Int_t ipart=0; ipart<fMC->GetNumberOfTracks(); ipart++)\r
-  {\r
-    AliVParticle* vParticle = fMC->GetTrack(ipart);\r
-    if(!IsGoodMcParticle(vParticle, ipart)) continue;\r
-    Int_t pdgCode = vParticle->PdgCode();\r
-      \r
-    //tracking effciency\r
-    if(TMath::Abs(vParticle->Eta())<0.9 && TMath::Abs(pdgCode==211))\r
-    {\r
-      fHTrkEffParGenPt->Fill(vParticle->Pt());\r
-      for(Int_t j=0; j<fTrackIndices->GetSize(); j++)\r
-      {\r
-        AliESDtrack *esdtrack = fESD->GetTrack(fTrackIndices->At(j));\r
-        if(esdtrack && esdtrack->GetLabel()==ipart)\r
-        {\r
-          fHTrkEffDetGenPt->Fill(vParticle->Pt());\r
-          fHTrkEffDetRecPt->Fill(esdtrack->Pt());\r
-          break;\r
-        }\r
-      }\r
-    }\r
-  } \r
-}\r
-\r
-//________________________________________________________________________\r
-AliESDtrack *AliAnalysisTaskSOH::GetAcceptTrack(AliESDtrack *esdtrack)\r
-{\r
-  // Get accepted track.\r
-\r
-  static AliESDtrack newTrack;\r
-  if(fEsdTrackCuts->AcceptTrack(esdtrack))\r
-  {\r
-    esdtrack->Copy(newTrack);\r
-    newTrack.SetTRDQuality(0);\r
-  }\r
-  else if(fHybridTrackCuts1->AcceptTrack(esdtrack))\r
-  {\r
-    if(esdtrack->GetConstrainedParam())\r
-    {\r
-      esdtrack->Copy(newTrack);\r
-      const AliExternalTrackParam* constrainParam = esdtrack->GetConstrainedParam();\r
-      newTrack.Set(constrainParam->GetX(),constrainParam->GetAlpha(),constrainParam->GetParameter(),constrainParam->GetCovariance());\r
-      newTrack.SetTRDQuality(1);               \r
-    }\r
-    else \r
-      return 0x0;\r
-  }\r
-  else if(fHybridTrackCuts2->AcceptTrack(esdtrack))\r
-  {\r
-    if(esdtrack->GetConstrainedParam())\r
-    {\r
-      esdtrack->Copy(newTrack);\r
-      const AliExternalTrackParam* constrainParam = esdtrack->GetConstrainedParam();\r
-      newTrack.Set(constrainParam->GetX(),constrainParam->GetAlpha(),constrainParam->GetParameter(),constrainParam->GetCovariance());\r
-      newTrack.SetTRDQuality(2);               \r
-    }\r
-    else \r
-      return 0x0;\r
-  }\r
-  else\r
-  {\r
-    return 0x0;\r
-  }\r
-\r
-  return &newTrack;\r
-}\r
-\r
-//________________________________________________________________________\r
-Bool_t AliAnalysisTaskSOH::IsGoodMcParticle(AliVParticle* vParticle, Int_t ipart)\r
-{\r
-  // Return true if good MC particle.\r
-\r
-  if(!vParticle) return kFALSE;\r
-  if(!fMC->IsPhysicalPrimary(ipart)) return kFALSE;\r
-  if (TMath::Abs(vParticle->Eta())>2) return kFALSE;\r
-  if(vParticle->Pt()<0.15) return kFALSE;\r
-  return kTRUE;\r
-}\r
-\r
-\r
-//________________________________________________________________________\r
-Bool_t AliAnalysisTaskSOH::IsGoodCluster(AliESDCaloCluster *cluster)\r
-{\r
-  // Return true if good cluster.\r
-\r
-  if(!cluster) return kFALSE;\r
-  if (!cluster->IsEMCAL()) return kFALSE;\r
-  return kTRUE;\r
-}\r
-\r
-\r
-//________________________________________________________________________\r
-void AliAnalysisTaskSOH::Terminate(Option_t *) \r
-{\r
-  // Terminate analysis.\r
-}\r
+// $Id$
+//
+// Simulation EMCal task.
+//
+// Author: Saehanseul Oh
+
+#include "AliAnalysisTaskSOH.h"
+
+#include <TH1F.h>
+#include <TH2F.h>
+
+#include "AliAnalysisManager.h"
+#include "AliAnalysisTask.h"
+#include "AliEMCALRecoUtils.h"
+#include "AliEMCALTrack.h"
+#include "AliESDCaloCluster.h"
+#include "AliESDEvent.h"
+#include "AliESDInputHandler.h"
+#include "AliESDtrack.h"
+#include "AliESDtrackCuts.h"
+#include "AliExternalTrackParam.h"
+#include "AliLog.h"
+#include "AliMCEvent.h"
+
+ClassImp(AliAnalysisTaskSOH)
+
+//________________________________________________________________________
+AliAnalysisTaskSOH::AliAnalysisTaskSOH() :
+  AliAnalysisTaskSE(), 
+  fESD(0), 
+  fMC(0), 
+  fEsdTrackCuts(0x0),
+  fHybridTrackCuts1(0x0),
+  fHybridTrackCuts2(0x0),
+  fTrackIndices(0x0),
+  fClusterIndices(0x0),
+  fClusterArray(0x0),
+  fOutputList(0x0),        
+  fHEventStat(0),      
+  fHTrkEffParGenPt(0), 
+  fHTrkEffDetGenPt(0), 
+  fHTrkEffDetRecPt(0), 
+  fHScaleFactor(0),
+  fHScaleFactor100HC(0),
+  fHEOverPVsPt(0x0),
+  fHEMCalResponsePion(0x0), 
+  fHEMCalResponseElec(0x0),
+  fHEMCalResponseProton(0x0), 
+  fHEMCalRecdPhidEta(0x0),
+  fHEMCalRecdPhidEtaP(0x0),
+  fHEMCalRecdPhidEtaM(0x0),
+  fHEMCalRecdPhidEta_Truth(0x0),
+  fHEMCalRecdPhidEtaP_Truth(0x0),
+  fHEMCalRecdPhidEtaM_Truth(0x0),
+  fHEMCalRecdPhidEtaposEta(0x0),
+  fHEMCalRecdPhidEtanegEta(0x0),
+  fHPhotonEdiff100HC(0x0)
+{
+  // Constructor
+
+  // Output slot #1 writes into a TH1 container
+  DefineOutput(1, TList::Class());
+}
+
+
+//________________________________________________________________________
+AliAnalysisTaskSOH::AliAnalysisTaskSOH(const char *name) :
+  AliAnalysisTaskSE(name), 
+  fESD(0), 
+  fMC(0), 
+  fEsdTrackCuts(0x0),
+  fHybridTrackCuts1(0x0),
+  fHybridTrackCuts2(0x0),
+  fTrackIndices(0x0),
+  fClusterIndices(0x0),
+  fClusterArray(0x0),
+  fOutputList(0x0),        
+  fHEventStat(0),      
+  fHTrkEffParGenPt(0), 
+  fHTrkEffDetGenPt(0), 
+  fHTrkEffDetRecPt(0), 
+  fHScaleFactor(0),
+  fHScaleFactor100HC(0),
+  fHEOverPVsPt(0x0),
+  fHEMCalRecdPhidEta(0x0),
+  fHEMCalRecdPhidEtaP(0x0),
+  fHEMCalRecdPhidEtaM(0x0),
+  fHEMCalRecdPhidEta_Truth(0x0),
+  fHEMCalRecdPhidEtaP_Truth(0x0),
+  fHEMCalRecdPhidEtaM_Truth(0x0),
+  fHEMCalRecdPhidEtaposEta(0x0),
+  fHEMCalRecdPhidEtanegEta(0x0),
+  fHPhotonEdiff100HC(0x0)
+{
+  // Constructor
+
+  // Output slot #1 writes into a TH1 container
+  DefineOutput(1, TList::Class());
+}
+
+
+//________________________________________________________________________
+AliAnalysisTaskSOH::~AliAnalysisTaskSOH()
+{
+  // Destructor.
+
+  delete fEsdTrackCuts;
+  delete fHybridTrackCuts1;
+  delete fHybridTrackCuts2;
+  delete fTrackIndices;
+  delete fClusterIndices;
+  delete fClusterArray;
+}
+
+
+//________________________________________________________________________
+void AliAnalysisTaskSOH::UserCreateOutputObjects()
+{
+  // Create histograms, called once.
+
+  OpenFile(1);
+  
+  fOutputList = new TList();
+  fOutputList->SetOwner(1);
+
+  fHEventStat = new TH1F("fHEventStat","Event statistics for analysis",8,0,8);
+  fHEventStat->GetXaxis()->SetBinLabel(1,"Event");
+  fHEventStat->GetXaxis()->SetBinLabel(2,"cluster");
+  fHEventStat->GetXaxis()->SetBinLabel(3,"good cluster");
+  fHEventStat->GetXaxis()->SetBinLabel(4,"cls/0-truth");
+  fHEventStat->GetXaxis()->SetBinLabel(5,"cls/1-truth");
+  fHEventStat->GetXaxis()->SetBinLabel(6,"cls/2-truth");
+  fHEventStat->GetXaxis()->SetBinLabel(7,"cls/2-goodtruth");
+  fHEventStat->GetXaxis()->SetBinLabel(8,"cls/>3-truth");
+  fOutputList->Add(fHEventStat);
+
+  fHTrkEffParGenPt = new TH1F("fHTrkEffParGenPt", "Particle level truth p_{T} distribution of generated primary charged pions;p_{T}^{gen} (GeV/c)",15,0.15,3.1);
+  fOutputList->Add(fHTrkEffParGenPt);
+
+  fHTrkEffDetGenPt = new TH1F("fHTrkEffDetGenPt", "Detector level truth p_{T} distribution of primary charged pions;p_{T}^{gen} (GeV/c)",15,0.15,3.1);
+  fOutputList->Add(fHTrkEffDetGenPt);
+
+  fHTrkEffDetRecPt = new TH1F("fHTrkEffDetRecPt", "Reconstructed track p_{T} distribution of primary charged pions;p_{T}^{rec} (GeV/c)",15,0.15,3.1);
+  fOutputList->Add(fHTrkEffDetRecPt);
+
+  fHScaleFactor = new TH1F("fHScaleFactor", "Scale factor distribution without hadronic correction;Scale factor",100,0,10);
+  fOutputList->Add(fHScaleFactor);
+
+  fHScaleFactor100HC = new TH1F("fHScaleFactor100HC", "Scale factor distribution with 100% hadronic correction;Scale factor",100,0,10);
+  fOutputList->Add(fHScaleFactor100HC);
+
+  fHEOverPVsPt = new TH2F("fHEOverPVsPt", "E/P vs track p_{T}; p_{T} (GeV/c); E/P", 200 , 0, 4, 200, 0, 3.2);
+  fOutputList->Add(fHEOverPVsPt);
+
+  fHEMCalResponsePion = new TH2F("fHEMCalResponsePion", "Pion E/P vs track p_{T}; p_{T} (GeV/c); E/P", 100 , 0, 4, 100, 0, 3.2);
+  fOutputList->Add(fHEMCalResponsePion);
+
+  fHEMCalResponseElec = new TH2F("fHEMCalResponseElec", "Electron E/P vs track p_{T};  p_{T} (GeV/c); E/P", 100 , 0, 4, 100, 0, 3.2);
+  fOutputList->Add(fHEMCalResponseElec);
+
+  fHEMCalResponseProton = new TH2F("fHEMCalResponseProton", "Proton E/P vs track p_{T};  p_{T} (GeV/c); E/P", 100 , 0, 4, 100, 0, 3.2);
+  fOutputList->Add(fHEMCalResponseElec);
+
+  fHEMCalRecdPhidEta = new TH2F("fHEMCalRecdPhidEta","EMCAL Cluster-Track #Delta#phi-#Delta#eta; #Delta#eta; #Delta#phi",1000,-0.1,0.1,1000,-0.5,0.5);
+  fOutputList->Add(fHEMCalRecdPhidEta);
+
+  fHEMCalRecdPhidEtaP = new TH2F("fHEMCalRecdPhidEtaP","EMCAL Charge+ Cluster-Track #Delta#phi-#Delta#eta; #Delta#eta; #Delta#phi",1000,-0.1,0.1,1000,-0.5,0.5);
+  fOutputList->Add(fHEMCalRecdPhidEtaP);
+
+  fHEMCalRecdPhidEtaM = new TH2F("fHEMCalRecdPhidEtaM","EMCAL Charge- Cluster-Track #Delta#phi-#Delta#eta; #Delta#eta; #Delta#phi",1000,-0.1,0.1,1000,-0.5,0.5);
+  fOutputList->Add(fHEMCalRecdPhidEtaM);
+
+  fHEMCalRecdPhidEta_Truth = new TH2F("fHEMCalRecdPhidEta_Truth","EMCAL Cluster-Track(Truth matched) #Delta#phi-#Delta#eta; #Delta#eta; #Delta#phi",1000,-0.1,0.1,1000,-0.5,0.5);
+  fOutputList->Add(fHEMCalRecdPhidEta_Truth);
+
+  fHEMCalRecdPhidEtaP_Truth = new TH2F("fHEMCalRecdPhidEtaP_Truth","EMCAL Charge+ Cluster-Track(Truth matched) #Delta#phi-#Delta#eta; #Delta#eta; #Delta#phi",1000,-0.1,0.1,1000,-0.5,0.5);
+  fOutputList->Add(fHEMCalRecdPhidEtaP_Truth);
+
+  fHEMCalRecdPhidEtaM_Truth = new TH2F("fHEMCalRecdPhidEtaM_Truth","EMCAL Charge- Cluster-Track(Truth matched) #Delta#phi-#Delta#eta; #Delta#eta; #Delta#phi",1000,-0.1,0.1,1000,-0.5,0.5);
+  fOutputList->Add(fHEMCalRecdPhidEtaM_Truth);
+
+  fHEMCalRecdPhidEtaposEta = new TH2F("fHEMCalRecdPhidEtaposEta","(+eta track) EMCAL Cluster-Track #Delta#phi-#Delta#eta; #Delta#eta; #Delta#phi",1000,-0.1,0.1,1000,-0.5,0.5);
+  fOutputList->Add(fHEMCalRecdPhidEtaposEta);
+
+  fHEMCalRecdPhidEtanegEta = new TH2F("fHEMCalRecdPhidEtanegEta","(-eta track) EMCAL Cluster-Track #Delta#phi-#Delta#eta; #Delta#eta; #Delta#phi",1000,-0.1,0.1,1000,-0.5,0.5);
+  fOutputList->Add(fHEMCalRecdPhidEtanegEta);
+
+  fHPhotonEdiff100HC = new TH2F("fHPhotonEdiff100HC","Photon (E_{Truth}- E_{calc,100% HC})/E_{Truth} vs. E_{Truth}; E_{Truth} (GeV); (E_{Truth}- E_{calc,100% HC})/E_{Truth}",500,0,5,500,0,1.1);
+  fOutputList->Add(fHPhotonEdiff100HC);
+
+  fTrackIndices = new TArrayI();
+  fClusterIndices = new TArrayI();
+
+  fClusterArray = new TObjArray();
+  fClusterArray->SetOwner(1);
+
+  PostData(1, fOutputList);
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskSOH::UserExec(Option_t *) 
+{
+  // Main loop, called for each event.
+
+  // Post output data.
+  fESD = dynamic_cast<AliESDEvent*>(InputEvent());
+  if (!fESD) {
+    printf("ERROR: fESD not available\n");
+    return;
+  }
+
+  fMC = MCEvent();
+  if (!fMC) {
+    printf("ERROR: fMC not available\n");
+    return;
+  }
+
+  fHEventStat->Fill(0.5);
+
+  if(fTrackIndices) 
+    fTrackIndices->Reset();
+  if(fClusterIndices) 
+    fClusterIndices->Reset();
+  if(fClusterArray)
+    fClusterArray->Delete();
+
+  ProcessTrack();
+  ProcessCluster();
+  ProcessMc();
+  ProcessScaleFactor();
+  
+  PostData(1, fOutputList);
+}   
+   
+//________________________________________________________________________
+void  AliAnalysisTaskSOH::ProcessTrack()
+{
+  // Process track.
+
+  fTrackIndices->Set(fESD->GetNumberOfTracks());
+  AliDebug(3,Form("%s:%d Selecting tracks",(char*)__FILE__,__LINE__));
+
+  Int_t isMth = 0;
+  Int_t nTracks = 0;
+
+  Float_t ClsPos[3] = {-999,-999,-999};
+  Double_t emcTrkpos[3] = {-999,-999,-999};
+
+  for(Int_t itr=0; itr<fESD->GetNumberOfTracks(); itr++)
+  {
+    AliESDtrack *esdtrack = fESD->GetTrack(itr);
+    if(!esdtrack)continue;
+    AliESDtrack *newTrack = GetAcceptTrack(esdtrack);
+    if(!newTrack) continue;
+  
+    Double_t clsE = -1;
+    Int_t clsIndex = newTrack->GetEMCALcluster();
+    if(newTrack->GetEMCALcluster()>-1)
+    {
+      AliESDCaloCluster *cluster = fESD->GetCaloCluster(clsIndex);
+      if(IsGoodCluster(cluster))
+      {
+        isMth=1;
+             
+        cluster->GetPosition(ClsPos);
+        TVector3 VClsPos(ClsPos[0], ClsPos[1], ClsPos[2]);
+             
+        AliEMCALTrack EMCTrk(*newTrack);
+        if(!EMCTrk.PropagateToGlobal(ClsPos[0], ClsPos[1], ClsPos[2], 0.0, 0.0)) {
+          continue;
+        }
+        EMCTrk.GetXYZ(emcTrkpos);
+        TVector3 VemcTrkPos(emcTrkpos[0],emcTrkpos[1],emcTrkpos[2]);
+             
+        Double_t dPhi = VClsPos.Phi() - VemcTrkPos.Phi();
+        if (dPhi < -1*TMath::Pi()) dPhi += (2*TMath::Pi());
+        else if (dPhi > TMath::Pi()) dPhi -= (2*TMath::Pi());
+             
+        Double_t dEta = VClsPos.Eta() - VemcTrkPos.Eta();
+             
+        fHEMCalRecdPhidEta->Fill(dEta, dPhi);  
+
+        if((newTrack->GetLabel())>-1 && (newTrack->GetLabel()) < fMC->GetNumberOfTracks())
+        {
+          AliVParticle *vParticle = fMC->GetTrack(newTrack->GetLabel());
+          if(IsGoodMcParticle(vParticle, newTrack->GetLabel()))
+          {
+            fHEMCalRecdPhidEta_Truth->Fill(dEta, dPhi);
+            if(vParticle->Charge() > 0) fHEMCalRecdPhidEtaP_Truth->Fill(dEta, dPhi);
+            if(vParticle->Charge() < 0) fHEMCalRecdPhidEtaM_Truth->Fill(dEta, dPhi);
+          }
+        }
+
+        if(esdtrack->Charge() > 0) {fHEMCalRecdPhidEtaP->Fill(dEta, dPhi);}
+        if(esdtrack->Charge() < 0) {fHEMCalRecdPhidEtaM->Fill(dEta, dPhi);}
+
+        if(VemcTrkPos.Eta() > 0) fHEMCalRecdPhidEtaposEta->Fill(dEta, dPhi);
+        if(VemcTrkPos.Eta() < 0) fHEMCalRecdPhidEtanegEta->Fill(dEta, dPhi);
+             
+        clsE = cluster->E();
+        if(newTrack->P()>0) fHEOverPVsPt->Fill(newTrack->Pt(),clsE/newTrack->P());
+      }
+         
+      Int_t ipart = newTrack->GetLabel();
+      if(ipart>-1 && ipart<fMC->GetNumberOfTracks())
+      {
+        AliVParticle* vParticle = fMC->GetTrack(ipart);
+        if(isMth && vParticle)
+        {
+          if(TMath::Abs(vParticle->PdgCode())==211)
+          {
+            fHEMCalResponsePion->Fill(newTrack->Pt(),clsE/newTrack->P());
+          }
+          if(TMath::Abs(vParticle->PdgCode())==11)
+          {
+            fHEMCalResponseElec->Fill(newTrack->Pt(),clsE/newTrack->P());
+          }
+          if(TMath::Abs(vParticle->PdgCode())==2212)
+          {
+            fHEMCalResponseProton->Fill(newTrack->Pt(),clsE/newTrack->P());
+          }
+        }
+      }
+    }
+    fTrackIndices->AddAt(itr,nTracks);
+    nTracks++;
+  }
+
+  fTrackIndices->Set(nTracks);
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskSOH::ProcessCluster()
+{
+  // Process cluster.
+
+  Int_t nCluster = 0;
+  TLorentzVector gamma;
+  Double_t vertex[3] = {0, 0, 0};
+  fESD->GetVertex()->GetXYZ(vertex);
+  const Int_t nCaloClusters = fESD->GetNumberOfCaloClusters(); 
+  fClusterIndices->Set(nCaloClusters);
+
+  for(Int_t itr=0; itr<nCaloClusters; itr++) 
+  {
+    fHEventStat->Fill(1.5); 
+    AliESDCaloCluster *cluster = fESD->GetCaloCluster(itr);
+    if(!IsGoodCluster(cluster)) continue;
+    cluster->GetMomentum(gamma, vertex);
+    if (gamma.Pt() < 0.15) continue;
+    fHEventStat->Fill(2.5);
+
+    TArrayI *MCLabels = cluster->GetLabelsArray();
+
+    if(MCLabels->GetSize() == 0) fHEventStat->Fill(3.5);
+    if(MCLabels->GetSize() == 1) fHEventStat->Fill(4.5);
+    if(MCLabels->GetSize() == 2) 
+    {
+      fHEventStat->Fill(5.5);
+      AliVParticle* vParticle1 = fMC->GetTrack(MCLabels->GetAt(0));
+      AliVParticle* vParticle2 = fMC->GetTrack(MCLabels->GetAt(1));
+      if(IsGoodMcParticle(vParticle1, MCLabels->GetAt(0)) && IsGoodMcParticle(vParticle2, MCLabels->GetAt(1))) 
+      {
+       fHEventStat->Fill(6.5);
+       if((vParticle1->PdgCode()==22) && (vParticle2->PdgCode()==22)) {;}
+       else if((vParticle1->PdgCode()!=22) && (vParticle2->PdgCode()!=22)) {;}
+       else 
+       {
+         fClusterIndices->AddAt(itr,nCluster);
+         nCluster++;
+       }
+      }
+    }
+    if(MCLabels->GetSize() > 2) fHEventStat->Fill(7.5);
+
+    AliESDCaloCluster *newCluster = new AliESDCaloCluster(*cluster);
+    Double_t subE = 0;
+    TArrayI arrayTrackMatched(fTrackIndices->GetSize());
+    Int_t nGoodMatch = 0;
+
+    for(Int_t j=0; j<fTrackIndices->GetSize(); j++)
+    {
+      AliESDtrack *trk = fESD->GetTrack(fTrackIndices->At(j));
+      if(itr==trk->GetEMCALcluster())
+      {
+       arrayTrackMatched[nGoodMatch] = j;
+       nGoodMatch ++;
+       subE += trk->P();
+      }
+    }
+  
+    arrayTrackMatched.Set(nGoodMatch);
+    newCluster->AddTracksMatched(arrayTrackMatched);
+      
+    Double_t clsE = newCluster->E();
+    Double_t newE = clsE-subE; 
+    if(newE<0) newE = 0;
+    newCluster->SetDispersion(newE);
+    fClusterArray->Add(newCluster);
+  }
+
+  fClusterIndices->Set(nCluster);
+}
+//________________________________________________________________________
+void AliAnalysisTaskSOH::ProcessMc()
+{
+  // Process MC.
+
+  for(Int_t ipart=0; ipart<fMC->GetNumberOfTracks(); ipart++)
+  {
+    AliVParticle* vParticle = fMC->GetTrack(ipart);
+    if(!IsGoodMcParticle(vParticle, ipart)) continue;
+    Int_t pdgCode = vParticle->PdgCode();
+      
+    //tracking effciency
+    if(TMath::Abs(vParticle->Eta())<0.9 && TMath::Abs(pdgCode==211))
+    {
+      fHTrkEffParGenPt->Fill(vParticle->Pt());
+      for(Int_t j=0; j<fTrackIndices->GetSize(); j++)
+      {
+        AliESDtrack *esdtrack = fESD->GetTrack(fTrackIndices->At(j));
+        if(esdtrack && esdtrack->GetLabel()==ipart)
+        {
+          fHTrkEffDetGenPt->Fill(vParticle->Pt());
+          fHTrkEffDetRecPt->Fill(esdtrack->Pt());
+         for(Int_t k=0; k<fClusterIndices->GetSize(); k++)
+         {
+           AliESDCaloCluster *cluster = fESD->GetCaloCluster(fClusterIndices->At(k));
+           Double_t clsE = cluster->E();
+           TArrayI *MCLabels = cluster->GetLabelsArray();
+           AliVParticle* vParticle1 = fMC->GetTrack(MCLabels->GetAt(0));
+           AliVParticle* vParticle2 = fMC->GetTrack(MCLabels->GetAt(1));
+           
+           if(vParticle1->PdgCode()==22 && vParticle2 == vParticle)
+           {
+             if((clsE - esdtrack->E())<0) fHPhotonEdiff100HC->Fill(vParticle1->E(), 1);
+             else  fHPhotonEdiff100HC->Fill(vParticle1->E(), (vParticle1->E() + esdtrack->E() - clsE)/vParticle1->E());
+             continue;
+           }
+           if(vParticle2->PdgCode()==22 && vParticle1 == vParticle)
+           {
+             if((clsE-esdtrack->E())<0) fHPhotonEdiff100HC->Fill(vParticle2->E(), 1);
+             else fHPhotonEdiff100HC->Fill(vParticle2->E(), (vParticle2->E() + esdtrack->E() - clsE)/vParticle2->E());
+           }
+         }
+          break;
+        }
+      }
+    }
+  } 
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskSOH::ProcessScaleFactor()
+{
+  // Scale factor. 
+
+  const Double_t phiMax = 180 * TMath::DegToRad();
+  const Double_t phiMin = 80 * TMath::DegToRad();
+  const Double_t TPCArea= 2*TMath::Pi()*1.8;
+  const Double_t EMCArea = (phiMax-phiMin)*1.4;
+
+  Double_t PtEMC = 0;
+  Double_t PtTPC = 0;
+
+  for(Int_t j=0; j<fTrackIndices->GetSize(); j++)
+  {
+    AliESDtrack *trk = fESD->GetTrack(fTrackIndices->At(j));
+    Double_t eta = trk->Eta();
+    Double_t phi = trk->Phi();
+    if(TMath::Abs(eta)<0.9) PtTPC += trk->Pt();
+    if(TMath::Abs(eta)<0.7  && phi > phiMin && phi < phiMax ) PtEMC += trk->Pt();
+  }
+
+  Double_t EtWithHadCorr = 0;
+  Double_t EtWithoutHadCorr = 0;
+  Double_t vertex[3] = {0, 0, 0};
+  fESD->GetVertex()->GetXYZ(vertex);
+  TLorentzVector gamma;
+
+  for(Int_t i=0; i<fClusterArray->GetEntriesFast(); i++)
+  {
+    AliESDCaloCluster *cluster = (AliESDCaloCluster*)fClusterArray->At(i);
+    cluster->GetMomentum(gamma, vertex);
+    Double_t sinTheta = TMath::Sqrt(1-TMath::Power(gamma.CosTheta(),2));
+    EtWithoutHadCorr +=  cluster->E() * sinTheta;
+    EtWithHadCorr += cluster->GetDispersion() * sinTheta;
+  }
+
+  if(PtTPC>0)
+  {
+    fHScaleFactor->Fill((PtEMC+EtWithoutHadCorr)/EMCArea * TPCArea/PtTPC);
+    fHScaleFactor100HC->Fill((PtEMC+EtWithHadCorr)/EMCArea * TPCArea/PtTPC);
+  }
+}
+
+//________________________________________________________________________
+AliESDtrack *AliAnalysisTaskSOH::GetAcceptTrack(AliESDtrack *esdtrack)
+{
+  // Get accepted track.
+
+  static AliESDtrack newTrack;
+  if(fEsdTrackCuts->AcceptTrack(esdtrack))
+  {
+    esdtrack->Copy(newTrack);
+    newTrack.SetTRDQuality(0);
+  }
+  else if(fHybridTrackCuts1->AcceptTrack(esdtrack))
+  {
+    if(esdtrack->GetConstrainedParam())
+    {
+      esdtrack->Copy(newTrack);
+      const AliExternalTrackParam* constrainParam = esdtrack->GetConstrainedParam();
+      newTrack.Set(constrainParam->GetX(),constrainParam->GetAlpha(),constrainParam->GetParameter(),constrainParam->GetCovariance());
+      newTrack.SetTRDQuality(1);               
+    }
+    else 
+      return 0x0;
+  }
+  else if(fHybridTrackCuts2->AcceptTrack(esdtrack))
+  {
+    if(esdtrack->GetConstrainedParam())
+    {
+      esdtrack->Copy(newTrack);
+      const AliExternalTrackParam* constrainParam = esdtrack->GetConstrainedParam();
+      newTrack.Set(constrainParam->GetX(),constrainParam->GetAlpha(),constrainParam->GetParameter(),constrainParam->GetCovariance());
+      newTrack.SetTRDQuality(2);               
+    }
+    else 
+      return 0x0;
+  }
+  else
+  {
+    return 0x0;
+  }
+
+  return &newTrack;
+}
+
+//________________________________________________________________________
+Bool_t AliAnalysisTaskSOH::IsGoodMcParticle(AliVParticle* vParticle, Int_t ipart)
+{
+  // Return true if good MC particle.
+
+  if(!vParticle) return kFALSE;
+  if(!fMC->IsPhysicalPrimary(ipart)) return kFALSE;
+  if (TMath::Abs(vParticle->Eta())>2) return kFALSE;
+  if(vParticle->Pt()<0.15) return kFALSE;
+  return kTRUE;
+}
+
+//________________________________________________________________________
+Bool_t AliAnalysisTaskSOH::IsGoodCluster(AliESDCaloCluster *cluster)
+{
+  // Return true if good cluster.
+
+  if(!cluster) return kFALSE;
+  if (!cluster->IsEMCAL()) return kFALSE;
+  return kTRUE;
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskSOH::Terminate(Option_t *) 
+{
+  // Terminate analysis.
+}
index 0e3958c82b39ca8d0e96e2309277c5560359d721..580d4967e884f2c6542242c135bf8a52a4e96f46 100644 (file)
@@ -35,7 +35,9 @@ class AliAnalysisTaskSOH : public AliAnalysisTaskSE {
   Bool_t              IsGoodCluster(AliESDCaloCluster *cluster)             ;
   Bool_t              IsGoodMcParticle(AliVParticle* vParticle, Int_t ipart);
   void                ProcessTrack()                       ;
+  void                ProcessCluster()                     ;
   void                ProcessMc()                          ;
+  void                ProcessScaleFactor()                 ;
 
   AliESDEvent        *fESD;                      //!esd event
   AliMCEvent         *fMC;                       //!mv event
@@ -43,18 +45,20 @@ class AliAnalysisTaskSOH : public AliAnalysisTaskSE {
   AliESDtrackCuts    *fHybridTrackCuts1;         // hybrid track cuts
   AliESDtrackCuts    *fHybridTrackCuts2;         // hybrid track cuts
   TArrayI            *fTrackIndices;             //!selected track index
+  TArrayI            *fClusterIndices;           //!cluster with two matched MC track index
+  TObjArray          *fClusterArray;             //!selected cluster array
+  
   TList              *fOutputList;               //!output list
   TH1F               *fHEventStat;               //!statistics histo
   TH1F               *fHTrkEffParGenPt;          //!mc truth pt spectrum
   TH1F               *fHTrkEffDetGenPt;          //!mc detector level pt spectrum
   TH1F               *fHTrkEffDetRecPt;          //!reconstructed detector level pt spectrum
+  TH1F               *fHScaleFactor;             //!scale factor spectrum
+  TH1F               *fHScaleFactor100HC;        //!scale factor with 100% HC spectrum
   TH2F               *fHEOverPVsPt;              //!(cluster energy over reconstructed track p) vs. track pt
   TH2F               *fHEMCalResponsePion;       //!same as above for pions 
   TH2F               *fHEMCalResponseElec;       //!same as above for electrons
   TH2F               *fHEMCalResponseProton;     //!same as above for protons
-  TH2F               *fHEMCalRecPhiEtaClus;      //!EMCal cluster phi vs. eta
-  TH2F               *fHEMCalRecPhiEtaTrk;       //!EMCal cluster label matched track phi vs. eta
-  TH2F               *fHClsPhiEta;               //!EMCal cluster phi vs. eta
   TH2F               *fHEMCalRecdPhidEta;        //!(EMCal cluster phi - track phi) vs. (EMCal cluster eta - track eta)
   TH2F               *fHEMCalRecdPhidEtaP;       //!same as above for positive charge tracks
   TH2F               *fHEMCalRecdPhidEtaM;       //!same as above for negative charge tracks
@@ -63,6 +67,8 @@ class AliAnalysisTaskSOH : public AliAnalysisTaskSE {
   TH2F               *fHEMCalRecdPhidEtaM_Truth; //!same as above with negative truth charge matching
   TH2F               *fHEMCalRecdPhidEtaposEta;  //!same as above for positive eta
   TH2F               *fHEMCalRecdPhidEtanegEta;  //!same as above for negative eta
+  TH2F               *fHPhotonEdiff100HC;        //!(truth E - calculated E in 100% HC) vs. truth E with photon
 
   AliAnalysisTaskSOH(const AliAnalysisTaskSOH&); // not implemented
   AliAnalysisTaskSOH& operator=(const AliAnalysisTaskSOH&); // not implemented