updated EMCal HFelectron QA
authorssakai <Shingo.Sakai@lnf.infn.it>
Tue, 21 Oct 2014 12:12:42 +0000 (14:12 +0200)
committerssakai <Shingo.Sakai@lnf.infn.it>
Tue, 21 Oct 2014 12:13:36 +0000 (14:13 +0200)
PWGHF/hfe/AliAnalysisTaskHFEemcQA.cxx
PWGHF/hfe/AliAnalysisTaskHFEemcQA.h
PWGHF/hfe/macros/AddTaskHFEemcQA.C

index c2721fb..d3b1027 100644 (file)
@@ -28,8 +28,6 @@
 
 #include "AliAnalysisTaskHFEemcQA.h"
 
-using std::cout;
-using std::endl;
 //QA task for EMCAL electron analysis 
 
 ClassImp(AliAnalysisTaskHFEemcQA)
@@ -41,6 +39,9 @@ ClassImp(AliAnalysisTaskHFEemcQA)
   fAOD(0),
   fpidResponse(0),
   fFlagSparse(kFALSE),
+  fUseTender(kTRUE),
+  fTracks_tender(0),
+  fCaloClusters_tender(0),
   fOutputList(0),
   fNevents(0),
   fVtxZ(0),
@@ -67,6 +68,10 @@ ClassImp(AliAnalysisTaskHFEemcQA)
   fHistdEdxEop(0),
   fHistNsigEop(0),
   fHistEop(0),
+  fM20(0),
+  fM02(0),
+  fM20EovP(0),
+  fM02EovP(0),
   fEleCanTPCNpts(0),
   fEleCanTPCNCls(0),
   fEleCanITSNCls(0),
@@ -96,6 +101,9 @@ AliAnalysisTaskHFEemcQA::AliAnalysisTaskHFEemcQA()
   fAOD(0),
   fpidResponse(0),
   fFlagSparse(kFALSE),
+  fUseTender(kTRUE),
+  fTracks_tender(0),
+  fCaloClusters_tender(0),
   fOutputList(0),
   fNevents(0),
   fVtxZ(0),
@@ -122,6 +130,10 @@ AliAnalysisTaskHFEemcQA::AliAnalysisTaskHFEemcQA()
   fHistdEdxEop(0),
   fHistNsigEop(0),
   fHistEop(0),
+  fM20(0),
+  fM02(0),
+  fM20EovP(0),
+  fM02EovP(0),
   fEleCanTPCNpts(0),
   fEleCanTPCNCls(0),
   fEleCanITSNCls(0),
@@ -150,6 +162,8 @@ AliAnalysisTaskHFEemcQA::~AliAnalysisTaskHFEemcQA()
 {
   //Destructor 
   delete fOutputList;
+  delete fTracks_tender;
+  delete fCaloClusters_tender;
   delete fSparseElectron;
   delete []fvalueElectron;
 }
@@ -240,7 +254,7 @@ void AliAnalysisTaskHFEemcQA::UserCreateOutputObjects()
 
   fEMCdEdx = new TH2F("fEMCdEdx","dE/dx distribution of tracks matched to EMCAL;p (GeV/c);dE/dx",200,0,20,500,0,160);
   fOutputList->Add(fEMCdEdx);
-    
+
   fEMCTPCnsig = new TH2F("fEMCTPCnsig","TPC Nsigma distribution of tracks matched to EMCAL;p (GeV/c);#sigma_{TPC-dE/dx}",1000,0,50,200,-10,10);
   fOutputList->Add(fEMCTPCnsig);
 
@@ -252,10 +266,22 @@ void AliAnalysisTaskHFEemcQA::UserCreateOutputObjects()
 
   fHistdEdxEop = new TH2F("fHistdEdxEop", "E/p vs dE/dx;E/p;dE/dx", 60, 0.0, 3.0, 500,0,160);
   fOutputList->Add(fHistdEdxEop);
-    
+
   fHistNsigEop = new TH2F ("fHistNsigEop", "E/p vs TPC nsig",60, 0.0, 3.0, 200, -10,10);
   fOutputList->Add(fHistNsigEop);
 
+  fM20 = new TH2F ("fM20","M20 vs pt distribution",200,0,20,400,0,2);
+  fOutputList->Add(fM20);
+
+  fM02 = new TH2F ("fM02","M02 vs pt distribution",200,0,20,400,0,2);
+  fOutputList->Add(fM02);
+
+  fM20EovP = new TH2F ("fM20EovP","M20 vs E/p distribution",400,0,3,400,0,2);
+  fOutputList->Add(fM20EovP);
+
+  fM02EovP = new TH2F ("fM02EovP","M02 vs E/p distribution",400,0,3,400,0,2);
+  fOutputList->Add(fM02EovP);
+
   fEleCanTPCNpts = new TH2F("fEleCanTPCNpts","TPC Npoints used for dE/dx for electron candidates;p_{T} (GeV/c);N points",200,0,20,200,0,200);
   fOutputList->Add(fEleCanTPCNpts);
 
@@ -309,6 +335,17 @@ void AliAnalysisTaskHFEemcQA::UserExec(Option_t *)
     //   printf("fESD available\n");
     //return;
   }
+    
+  //////////////
+  //if Tender //
+  //////////////
+  if(fUseTender){
+        //new branches with calibrated tracks and clusters
+        if(IsAODanalysis()) fTracks_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("AODFilterTracks"));
+        if(!IsAODanalysis()) fTracks_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("ESDFilterTracks"));
+        
+        fCaloClusters_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("EmcCaloClusters"));
+  }
 
   ////////////////////
   //cuts initialised//
@@ -333,7 +370,8 @@ void AliAnalysisTaskHFEemcQA::UserExec(Option_t *)
   //Event vertex//
   ///////////////
   Int_t ntracks;
-  ntracks = fVevent->GetNumberOfTracks();
+  if(!fUseTender)ntracks = fVevent->GetNumberOfTracks();
+  if(fUseTender) ntracks = fTracks_tender->GetEntries();
   printf("There are %d tracks in this event\n",ntracks);
 
   fNevents->Fill(0); //all events
@@ -398,12 +436,16 @@ void AliAnalysisTaskHFEemcQA::UserExec(Option_t *)
   /////////////////////////////
   //EMCAL cluster information//
   ////////////////////////////
-  Int_t Nclust = 0;
-  Nclust = fVevent->GetNumberOfCaloClusters();
+  Int_t Nclust = -999;
+  if(!fUseTender) Nclust = fVevent->GetNumberOfCaloClusters();
+  if(fUseTender) Nclust = fCaloClusters_tender->GetEntries();
   for(Int_t icl=0; icl<Nclust; icl++)
   {
     AliVCluster *clust = 0x0;
-    clust = fVevent->GetCaloCluster(icl);
+    if(!fUseTender) clust = fVevent->GetCaloCluster(icl);
+    if(fUseTender) clust = dynamic_cast<AliVCluster*>(fCaloClusters_tender->At(icl));
+    if(!clust)  printf("ERROR: Could not receive cluster matched calibrated from track %d\n", icl);
+      
     if(clust && clust->IsEMCAL())
     {
       Double_t clustE = clust->E();
@@ -445,7 +487,10 @@ void AliAnalysisTaskHFEemcQA::UserExec(Option_t *)
   ///////////////
   for (Int_t iTracks = 0; iTracks < ntracks; iTracks++) {
 
-    AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
+    AliVParticle* Vtrack = 0x0;
+    if(!fUseTender) Vtrack  = fVevent->GetTrack(iTracks);
+    if(fUseTender) Vtrack = dynamic_cast<AliVTrack*>(fTracks_tender->At(iTracks));
+      
     if (!Vtrack) {
       printf("ERROR: Could not receive track %d\n", iTracks);
       continue;
@@ -478,7 +523,6 @@ void AliAnalysisTaskHFEemcQA::UserExec(Option_t *)
       if(etrack->GetKinkIndex(0) != 0) continue;
     }
 
-
     ////////////////////
     //Track properties//
     ///////////////////
@@ -519,13 +563,20 @@ void AliAnalysisTaskHFEemcQA::UserExec(Option_t *)
       //E/p distribution
       Double_t clustMatchE = clustMatch->E();
       Double_t eop = -1.0;
+      Double_t m02 = -99999;
       if(track->P()>0)eop = clustMatchE/track->P();
+      m02 =clustMatch->GetM02();
 
       if(track->Pt()>1.0){
         fHistdEdxEop->Fill(eop,dEdx);
         fHistNsigEop->Fill(eop,fTPCnSigma);
+        fM20EovP->Fill(eop,clustMatch->GetM20());
+        fM02EovP->Fill(eop,clustMatch->GetM02());
       }
+
       fHistEop->Fill(track->Pt(),eop);
+      fM20->Fill(track->Pt(),clustMatch->GetM20());
+      fM02->Fill(track->Pt(),clustMatch->GetM02());
 
       //EID THnsparse
       fvalueElectron[0] = trigger;
@@ -543,7 +594,7 @@ void AliAnalysisTaskHFEemcQA::UserExec(Option_t *)
       ////////////////////////////////////////////////
       //Track properties of EMCAL electron cadidates//
       ///////////////////////////////////////////////
-      if(fTPCnSigma > -1 && fTPCnSigma < 3 && eop>0.8 && eop<1.2){
+      if(fTPCnSigma > -1 && fTPCnSigma < 3 && eop>0.9 && eop<1.2 && m02 > 0.006 && m02 < 0.035){
         fEleCanTPCNpts->Fill(track->Pt(),track->GetTPCsignalN());
         fEleCanTPCNCls->Fill(track->Pt(),track->GetTPCNcls());
 
index f854d2c..3593acc 100644 (file)
@@ -16,76 +16,87 @@ class AliCFManager;
 #include "AliAnalysisTaskSE.h"
 
 class AliAnalysisTaskHFEemcQA : public AliAnalysisTaskSE {
- public:
-  AliAnalysisTaskHFEemcQA();
-  AliAnalysisTaskHFEemcQA(const char *name);
-  virtual ~AliAnalysisTaskHFEemcQA();
-  
-  virtual void   UserCreateOutputObjects();
-  virtual void   UserExec(Option_t *option);
-  virtual void   Terminate(Option_t *);
-
-  void SetAODAnalysis() { SetBit(kAODanalysis, kTRUE); };
-  void SetESDAnalysis() { SetBit(kAODanalysis, kFALSE); };
-  Bool_t IsAODanalysis() const { return TestBit(kAODanalysis); };
-
-  Bool_t GetElecIDsparse() {return fFlagSparse;};
-  void SetElecIDsparse(Bool_t flagelecIDsparse){fFlagSparse = flagelecIDsparse;};
-
- private:
-  enum{
-    kAODanalysis = BIT(20),
-  };
-
-  AliVEvent   *fVevent;  //!event object
-  AliESDEvent *fESD;    //!ESD object
-  AliAODEvent *fAOD;    //!AOD object
-  AliPIDResponse *fpidResponse; //!pid response
-
-  Bool_t      fFlagSparse;// switch to THnspare
-
-  TList       *fOutputList; //!Output list
-  TH1F        *fNevents;//! no of events
-  TH1F        *fVtxZ;//!Vertex z 
-  TH1F        *fVtxX;//!Vertex x 
-  TH1F        *fVtxY;//!Vertex y 
-  TH2F        *fTrigMulti;//!trigger multiplicity 
-  TH1F        *fHistClustE;//!cluster energy
-  TH2F        *fEMCClsEtaPhi;//! EMC cluster eta and phi 
-  TH1F        *fNegTrkIDPt;//!neg track ID
-  TH1F        *fTrkPt;//!track pt
-  TH1F        *fTrketa;//!track eta
-  TH1F        *fTrkphi;//!track phi 
-  TH2F        *fdEdx;//!dedx vs pt
-  TH2F        *fTPCNpts;//!TPC Npoints used for dedx
-  TH2F        *fTPCnsig;//!TPC Nsigma
-  TH1F        *fHistPtMatch;//!tracks matched to EMCAL 
-  TH2F        *fEMCTrkMatch;//!Distance of EMC cluster to closest track in phi and z
-  TH1F        *fEMCTrkPt;//!tracks with EMCAL cluster
-  TH1F        *fEMCTrketa;//!EMC trk eta
-  TH1F        *fEMCTrkphi;//!EMC trk phi
-  TH2F        *fEMCdEdx;//!EMC trk dedx
-  TH2F        *fEMCTPCnsig;//! EMC trk nsig
-  TH2F        *fEMCTPCNpts;//!EMC Npoints used for dedx
-  TH2F        *fHistdEdxEop;//!E/p vs dedx
-  TH2F        *fHistNsigEop;//!E/p vs dedx
-  TH2F        *fHistEop;//!pt vs E/p
-  TH2F        *fEleCanTPCNpts;//!ele cand TPC Npoints used for dedx
-  TH2F        *fEleCanTPCNCls;//!ele cand TPC N clusters
-  TH2F        *fEleCanITSNCls;//!ele cand ITS N clusters
-  TH1F        *fEleCanITShit;//!ele cand ITS hit map
-  TH2F        *fEleCanSPD1;//!ele cand hit SPD layer 1
-  TH2F        *fEleCanSPD2;//!ele cand hit SPD layer 2
-  TH2F        *fEleCanSPDBoth;//!ele cand SPD both layer
-  TH2F        *fEleCanSPDOr;//!ele cand SPD or
-
-  THnSparse  *fSparseElectron;//!Electron info 
-  Double_t *fvalueElectron;//!Electron info
-
-  AliAnalysisTaskHFEemcQA(const AliAnalysisTaskHFEemcQA&); // not implemented
-  AliAnalysisTaskHFEemcQA& operator=(const AliAnalysisTaskHFEemcQA&); // not implemented
-
-  ClassDef(AliAnalysisTaskHFEemcQA, 1); // example of analysis
+  public:
+    AliAnalysisTaskHFEemcQA();
+    AliAnalysisTaskHFEemcQA(const char *name);
+    virtual ~AliAnalysisTaskHFEemcQA();
+
+    virtual void   UserCreateOutputObjects();
+    virtual void   UserExec(Option_t *option);
+    virtual void   Terminate(Option_t *);
+
+    void SetAODAnalysis() { SetBit(kAODanalysis, kTRUE); };
+    void SetESDAnalysis() { SetBit(kAODanalysis, kFALSE); };
+    Bool_t IsAODanalysis() const { return TestBit(kAODanalysis); };
+
+    Bool_t GetElecIDsparse() {return fFlagSparse;};
+    void SetElecIDsparse(Bool_t flagelecIDsparse){fFlagSparse = flagelecIDsparse;};
+    
+    Bool_t GetTenderSwitch() {return fUseTender;};
+    void SetTenderSwitch(Bool_t usetender){fUseTender = usetender;};
+
+  private:
+    enum{
+      kAODanalysis = BIT(20),
+    };
+
+    AliVEvent   *fVevent;  //!event object
+    AliESDEvent *fESD;    //!ESD object
+    AliAODEvent *fAOD;    //!AOD object
+    AliPIDResponse *fpidResponse; //!pid response
+
+    Bool_t      fFlagSparse;// switch to THnspare
+    Bool_t       fUseTender;// switch to add tender
+    
+    TClonesArray  *fTracks_tender;
+    TClonesArray  *fCaloClusters_tender;
+
+    TList       *fOutputList; //!Output list
+    TH1F        *fNevents;//! no of events
+    TH1F        *fVtxZ;//!Vertex z 
+    TH1F        *fVtxX;//!Vertex x 
+    TH1F        *fVtxY;//!Vertex y 
+    TH2F        *fTrigMulti;//!trigger multiplicity 
+    TH1F        *fHistClustE;//!cluster energy
+    TH2F        *fEMCClsEtaPhi;//! EMC cluster eta and phi 
+    TH1F        *fNegTrkIDPt;//!neg track ID
+    TH1F        *fTrkPt;//!track pt
+    TH1F        *fTrketa;//!track eta
+    TH1F        *fTrkphi;//!track phi 
+    TH2F        *fdEdx;//!dedx vs pt
+    TH2F        *fTPCNpts;//!TPC Npoints used for dedx
+    TH2F        *fTPCnsig;//!TPC Nsigma
+    TH1F        *fHistPtMatch;//!tracks matched to EMCAL 
+    TH2F        *fEMCTrkMatch;//!Distance of EMC cluster to closest track in phi and z
+    TH1F        *fEMCTrkPt;//!tracks with EMCAL cluster
+    TH1F        *fEMCTrketa;//!EMC trk eta
+    TH1F        *fEMCTrkphi;//!EMC trk phi
+    TH2F        *fEMCdEdx;//!EMC trk dedx
+    TH2F        *fEMCTPCnsig;//! EMC trk nsig
+    TH2F        *fEMCTPCNpts;//!EMC Npoints used for dedx
+    TH2F        *fHistdEdxEop;//!E/p vs dedx
+    TH2F        *fHistNsigEop;//!E/p vs dedx
+    TH2F        *fHistEop;//!pt vs E/p
+    TH2F        *fM20;//!M20 vs pt
+    TH2F        *fM02;//!M20 vs pt
+    TH2F        *fM20EovP;//!M20 vs E/p
+    TH2F        *fM02EovP;//!M20 vs E/p
+    TH2F        *fEleCanTPCNpts;//!ele cand TPC Npoints used for dedx
+    TH2F        *fEleCanTPCNCls;//!ele cand TPC N clusters
+    TH2F        *fEleCanITSNCls;//!ele cand ITS N clusters
+    TH1F        *fEleCanITShit;//!ele cand ITS hit map
+    TH2F        *fEleCanSPD1;//!ele cand hit SPD layer 1
+    TH2F        *fEleCanSPD2;//!ele cand hit SPD layer 2
+    TH2F        *fEleCanSPDBoth;//!ele cand SPD both layer
+    TH2F        *fEleCanSPDOr;//!ele cand SPD or
+
+    THnSparse  *fSparseElectron;//!Electron info 
+    Double_t *fvalueElectron;//!Electron info
+
+    AliAnalysisTaskHFEemcQA(const AliAnalysisTaskHFEemcQA&); // not implemented
+    AliAnalysisTaskHFEemcQA& operator=(const AliAnalysisTaskHFEemcQA&); // not implemented
+
+    ClassDef(AliAnalysisTaskHFEemcQA, 1); // example of analysis
 };
 
 #endif
index cf01475..b751be6 100644 (file)
@@ -1,4 +1,4 @@
-AliAnalysisTask *AddTaskHFEemcQA(Bool_t FillElecSparse=kFALSE){
+AliAnalysisTask *AddTaskHFEemcQA(Bool_t UseTender=kTRUE, Bool_t FillElecSparse=kFALSE){
   //get the current analysis manager
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (!mgr) {
@@ -18,12 +18,14 @@ AliAnalysisTask *AddTaskHFEemcQA(Bool_t FillElecSparse=kFALSE){
   }else{
     MCthere=kTRUE;
   }
+  
 
   // +++ EMCal MB
   AliAnalysisTaskHFEemcQA *hfecalqa = new AliAnalysisTaskHFEemcQA("emcqa");
   mgr->AddTask(hfecalqa);
   hfecalqa->SelectCollisionCandidates(AliVEvent::kINT8);
   hfecalqa->SetElecIDsparse(FillElecSparse);
+  hfecalqa->SetTenderSwitch(UseTender);
 
   TString containerName = mgr->GetCommonFileName();
   containerName += ":PWGHF_hfeHFEemcQAINT8";
@@ -36,6 +38,7 @@ AliAnalysisTask *AddTaskHFEemcQA(Bool_t FillElecSparse=kFALSE){
   mgr->AddTask(hfecalqa7);
   hfecalqa7->SelectCollisionCandidates(AliVEvent::kINT7);
   hfecalqa7->SetElecIDsparse(FillElecSparse);
+  hfecalqa7->SetTenderSwitch(UseTender);
 
   TString containerName7 = mgr->GetCommonFileName();
   containerName7 += ":PWGHF_hfeHFEemcQAINT7";
@@ -49,6 +52,7 @@ AliAnalysisTask *AddTaskHFEemcQA(Bool_t FillElecSparse=kFALSE){
   mgr->AddTask(hfecalqaTrig0);
   hfecalqaTrig0->SelectCollisionCandidates(AliVEvent::kEMCEGA);
   hfecalqaTrig0->SetElecIDsparse(FillElecSparse);
+  hfecalqaTrig0->SetTenderSwitch(UseTender);
 
   TString containerName1 = mgr->GetCommonFileName();
   containerName1 += ":PWGHF_hfeHFEemcQATrigGA";
@@ -63,6 +67,7 @@ AliAnalysisTask *AddTaskHFEemcQA(Bool_t FillElecSparse=kFALSE){
   mgr->AddTask(hfecalqaTrig1);
   hfecalqaTrig1->SelectCollisionCandidates(AliVEvent::kEMCEJE);
   hfecalqaTrig1->SetElecIDsparse(FillElecSparse);
+  hfecalqaTrig1->SetTenderSwitch(UseTender);
 
   TString containerName2 = mgr->GetCommonFileName();
   containerName2 += ":PWGHF_hfeHFEemcQATrigJE";