]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGGA/PHOSTasks/PHOS_PbPb/AliAnalysisTaskPi0Flow.h
added FillHistogram for 3d Hists with weight
[u/mrichter/AliRoot.git] / PWGGA / PHOSTasks / PHOS_PbPb / AliAnalysisTaskPi0Flow.h
index fe891b82e4898b91c9c64a459944372d01c4751d..55818cb3e879809811cce0d2a45b1b86f88aec9c 100644 (file)
@@ -1,6 +1,9 @@
 #ifndef AliAnalysisTaskPi0Flow_cxx
 #define AliAnalysisTaskPi0Flow_cxx
 
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
 // Analysis task to fill histograms with PHOS ESD or AOD clusters and cells
 // Authors : Dmitri Peressounko
 // Date    : 28.05.2011
@@ -20,6 +23,7 @@ class AliESDEvent ;
 class AliPHOSCalibData;
 class AliESDtrack ;
 class AliESDCaloCluster ;
+class AliEPFlattener;
 
 #include "TArrayD.h"
 
@@ -27,7 +31,7 @@ class AliESDCaloCluster ;
 
 class AliAnalysisTaskPi0Flow : public AliAnalysisTaskSE {
 public:
-    enum Period { kUndefinedPeriod, kLHC10h, kLHC11h };
+    enum Period { kUndefinedPeriod, kLHC10h, kLHC11h, kLHC13 };
 
 public:
     AliAnalysisTaskPi0Flow(const char *name = "AliAnalysisTaskPi0Flow", Period period = kUndefinedPeriod);
@@ -35,24 +39,29 @@ public:
 
     virtual void   UserCreateOutputObjects();
     virtual void   UserExec(Option_t *option);
-    virtual void   Terminate(Option_t *);
+    /* virtual void   Terminate(Option_t *); */
 
     void SetPeriod(Period period) { fPeriod = period;}
     
-    void SetCentralityBinning(const TArrayD& edges);
+    void SetCentralityBinning(const TArrayD& edges, const TArrayI& nMixed);
     void SetEventMixingRPBinning(UInt_t nBins) { fNEMRPBins = nBins; }
-    void SetMixingArraysLength(UInt_t length) { fMixingArraysLength = length; }
+    void SetMaxAbsVertexZ(Float_t z) { fMaxAbsVertexZ = z; }
+    void SetManualV0EPCalc(Bool_t manCalc = true) {fManualV0EPCalc = manCalc;}
+    void SetEnablePHOSModule(int module, Bool_t enable = true);
     
     void SetPHOSBadMap(Int_t mod,TH2I * badMapHist);
+    //Where to read AODB object with EP calibration if not default
+    void SetEPcalibFileName(const TString filename) {fEPcalibFileName = filename; }   
 
 
-private:
+protected:
     AliAnalysisTaskPi0Flow(const AliAnalysisTaskPi0Flow&); // not implemented
     AliAnalysisTaskPi0Flow& operator=(const AliAnalysisTaskPi0Flow&); // not implemented
 
+    virtual void MakeMCHistograms();
+
     // Step 0:
     AliVEvent* GetEvent();
-    AliStack* GetMCStack();
 
     // Step 1:
     void SetGeometry();
@@ -60,6 +69,7 @@ private:
     void SetV0Calibration(); //V0 calibration
     void SetESDTrackCuts(); // AliESDtrack cuts ( for esd data )
     void SetPHOSCalibData(); // phos re-calibration ( for esd data)
+    void SetFlatteningData(); // phos flattening
 
     // Step 2:
     void SetVertex();
@@ -86,7 +96,10 @@ private:
     // Step 10; Mixing
     void ConsiderPi0sMix();
 
-    // Step 11: Update lists
+    // Step 11: MC
+    virtual void DoMC();
+
+    // Step 12: Update lists
     void UpdateLists();
 
     Bool_t AreNeibors(Int_t id1,Int_t id2) ;
@@ -94,7 +107,9 @@ private:
     Double_t ApplyFlatteningV0A(Double_t phi, Double_t c) ; //Apply centrality-dependent flattening
     Double_t ApplyFlatteningV0C(Double_t phi, Double_t c) ; //Apply centrality-dependent flattening
     Int_t ConvertToInternalRunNumber(Int_t run) ;
-    Double_t CoreEnergy(AliVCluster * clu);
+    Double_t CoreEnergy(AliVCluster * clu, AliVCaloCells * cells);
+    void EvalCoreLambdas(AliVCluster * clu, AliVCaloCells * cells, Double_t &m02, Double_t &m20) ; 
+    Bool_t TestCoreLambda(Double_t pt,Double_t l1,Double_t l2) ;
 
 
 
@@ -102,12 +117,14 @@ private:
     void FillHistogram(const char * key,Double_t x) const ; //Fill 1D histogram witn name key
     void FillHistogram(const char * key,Double_t x, Double_t y) const ; //Fill 2D histogram witn name key
     void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z) const ; //Fill 3D histogram witn name key
+    void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z, Double_t w) const ; //Fill 3D histogram witn name key
 
     TVector3 GetVertexVector(const AliVVertex* vertex);
     Int_t GetCentralityBin(Float_t centralityV0M);
     Int_t GetRPBin();
 
-    void LogProgress(int step, int internalRunNumber);
+    void LogProgress(int step);
+    void LogSelection(int step, int internalRunNumber);
 
     Bool_t IsGoodChannel(const char * det, Int_t mod,Int_t ix, Int_t iz); //Use addisional bad map for PHOS
 
@@ -123,7 +140,10 @@ private:
 
 
 
-private:
+protected:
+    // transiant constants
+    static const Int_t kNMod = 5;
+
     // constants:
     static const Double_t kLogWeight= 4.5 ; // log weight for recalibration.
     static const Double_t kAlphaCut=0.7 ;
@@ -132,19 +152,24 @@ private:
 
     // cluster cut variables:
     static const Double_t kMinClusterEnergy = 0.3;
+    static const Double_t kMinBCDistance = 2.5;  //distance to nearest bad channel
     static const Int_t kMinNCells = 3;
     static const Double_t kMinM02 = 0.2;
 
     // Binning, [vtx, centrality, reaction-plane]
     static const Int_t kNVtxZBins = 1;
     static const Double_t kCentCutoff = 90.; // Ignore Centrality over 90%
-    TArrayD fCentEdges; // Centrality Bin Lower edges,
+    TArrayD fCentEdges;  // Centrality Bin Lower edges
+    TArrayI fCentNMixed; // Number of mixed events for each centrality bin
     UInt_t fNEMRPBins;
     
-    UInt_t fMixingArraysLength;
-    
 
+    // Behavior / cuts
     Period fPeriod;
+    Float_t fMaxAbsVertexZ; // in cm
+    Bool_t fManualV0EPCalc;
+    Bool_t fModuleEnabled[kNMod]; //[kNMod]
+
 
     TList * fOutputContainer;        //final histogram container
 
@@ -159,7 +184,6 @@ private:
     AliVEvent* fEvent; //! Current event
     AliESDEvent* fEventESD; //! Current event, if ESD.
     AliAODEvent* fEventAOD; //! Current event, if AOD.
-    AliStack * fMCStack ;
 
     // Step 1: Run Number, Misalignment Matrix, and Calibration
     Int_t fRunNumber; // run number
@@ -171,7 +195,12 @@ private:
     Float_t fWidthQ[kNCenBins][2][2];   // ...
     AliESDtrackCuts *fESDtrackCuts; // Track cut
     AliPHOSCalibData *fPHOSCalibData; // PHOS calibration object
-
+    TString fEPcalibFileName; 
+    AliEPFlattener * fTPCFlat ; //Object for flattening of TPC
+    AliEPFlattener * fV0AFlat ; //Object for flattening of V0A
+    AliEPFlattener * fV0CFlat ; //Object for flattening of V0C
+    
+    
     // Step 2: Vertex
     Double_t fVertex[3];
     TVector3 fVertexVector;
@@ -191,11 +220,11 @@ private:
     // Step 8: Event Photons (PHOS Clusters) selection
     TObjArray * fCaloPhotonsPHOS ;      //PHOS photons in current event
 
-    // Step 11: Update lists for mixing.
+    // Step 12: Update lists for mixing.
     TObjArray* fCaloPhotonsPHOSLists; //! array of TList, Containers for events with PHOS photons
 
 
-    ClassDef(AliAnalysisTaskPi0Flow, 1); // PHOS analysis task
+    ClassDef(AliAnalysisTaskPi0Flow, 2); // PHOS analysis task
 };
 
 #endif