]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/FORWARD/analysis2/AliFMDSharingFilter.h
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / FORWARD / analysis2 / AliFMDSharingFilter.h
index 080d465ea57816791f61b8d3c47172c4d9631823..8b42d651e767e1ae5850d1c41fee30d737169218 100644 (file)
@@ -33,6 +33,8 @@ class AliFMDFloatMap;
  * that impinges on the detector in such a way that it deposite energy 
  * into two or more strips. 
  *
+ * @image html alice-int-2012-040-share_fraction.png "Energy loss sharing"
+ *
  * @par Input: 
  *    - AliESDFMD object  - from reconstruction
  *
@@ -46,7 +48,7 @@ class AliFMDFloatMap;
  *    - For each ring (FMD1i, FMD2i, FMD2o, FMD3i, FMD3o) the distribution of 
  *      signals before and after the filter.  
  *    - For each ring (see above), an array of distributions of number of 
- *      hit strips for each vertex bin (if enabled - see Init method)
+ *      hit strips for each vertex bin (if enabled - see SetupForData method)
  * 
  *
  * @ingroup pwglf_forward_algo 
@@ -55,7 +57,10 @@ class AliFMDFloatMap;
 class AliFMDSharingFilter : public TNamed
 {
 public: 
-  /** Status of a strip */
+  /** 
+   * Status of a strip 
+   * @deprecated Not used
+   */
   enum Status { 
     /** Nothing yet */
     kNone             = 1, 
@@ -80,34 +85,23 @@ public:
    * @param title Title of object  - not significant 
    */
   AliFMDSharingFilter(const char* title);
+
   /** 
-   * Copy constructor 
-   * 
-   * @param o Object to copy from 
-   */
-  AliFMDSharingFilter(const AliFMDSharingFilter& o);
-  /** 
-   * Assignment operator 
-   * 
-   * @param o Object to assign from 
-   * 
-   * @return Reference to this 
+   * @{ 
+   * @name Parameters etc.
    */
-  AliFMDSharingFilter& operator=(const AliFMDSharingFilter& o);
-
   /** 
-   * Initialize 
+   * If called with a true argument, then merging is wholy disabled 
    * 
-   * @param axis Default eta axis from parent task 
+   * @param disable If true, disable merging altogether 
    */
-  void Init(const TAxis& axis);
+  virtual void SetMergingDisabled(Bool_t disable) {fMergingDisabled = disable; }
   /** 
    * Set the debug level.  The higher the value the more output 
    * 
    * @param dbg Debug level 
    */
   virtual void SetDebug(Int_t dbg=1) { fDebug = dbg; }
-
   /** 
    * Enable use of angle corrected signals in the algorithm 
    * 
@@ -137,16 +131,26 @@ public:
    * @param use allow three strips
    * 
    */
-  void SetAllow3Strips(Bool_t use) { fThreeStripSharing = use; }
-  
-  /** 
-   * In case of a displaced vertices recalculate eta and angle correction
+  void SetAllow3Strips(Bool_t use) { fThreeStripSharing = use; }  
+  /**
+   * Set whether to ignore the ESD info when angle correcting, this
+   * is to counter a known issue where the info in the ESD is incorrect
    * 
-   * @param use recalculate or not
+   * @param use ignore the ESD info
+   */
+  void SetIgnoreESDWhenAngleCorrecting(Bool_t use) { fIgnoreESDForAngleCorrection = use; }
+  /* @} */
+
+  /** 
+   * @{ 
+   * @name Processing 
+   */
+  /** 
+   * Initialize 
    * 
+   * @param axis Default eta axis from parent task 
    */
-  void SetRecalculateEta(Bool_t use) { fRecalculateEta = use; }
-  
+  void SetupForData(const TAxis& axis);
   /** 
    * Filter the input AliESDFMD object
    * 
@@ -165,10 +169,10 @@ public:
    * Scale the histograms to the total number of events 
    * 
    * @param dir     Where the output is 
+   * @param output  Output list
    * @param nEvents Number of events 
    */
-  virtual void ScaleHistograms(const TList* dir, Int_t nEvents);
-  
+  virtual void Terminate(const TList* dir, TList* output, Int_t nEvents);  
   /** 
    * Define the output histograms.  These are put in a sub list of the
    * passed list.   The histograms are merged before the parent task calls 
@@ -176,7 +180,8 @@ public:
    * 
    * @param dir Directory to add to 
    */
-  virtual void DefineOutput(TList* dir);
+  virtual void CreateOutputObjects(TList* dir);
+  /* @} */
   /** 
    * Print information
    * 
@@ -184,6 +189,10 @@ public:
    */
   virtual void Print(Option_t* option="") const;
 
+  /** 
+   * @{ 
+   * @name Cuts
+   */
   /** 
    * Get the low cuts 
    * 
@@ -220,11 +229,18 @@ public:
    * @param c Cuts object
    */  
   void SetHCuts(const AliFMDMultCuts& c) { fHCuts = c; }
-
-  void AddDead(UShort_t d, Char_t r, UShort_t s, UShort_t t);
-  void AddDeadRegion(UShort_t d, Char_t r, UShort_t s1, UShort_t s2, 
-                    UShort_t t1, UShort_t t2);
+  /* @} */
 protected:
+  /** 
+   * Copy constructor - not implemented
+   */
+  AliFMDSharingFilter(const AliFMDSharingFilter& o){;}
+  /** 
+   * Assignment operator  - not implemented
+   * 
+   * @return Reference to this 
+   */
+  AliFMDSharingFilter& operator=(const AliFMDSharingFilter& o){return *this;}
   /** 
    * Internal data structure to keep track of the histograms
    */
@@ -262,45 +278,43 @@ protected:
     /** 
      * Clear this object
      */
-    void Clear(const Option_t* ="") { fNHits = 0; } 
+    // void Clear(const Option_t* ="") { fNHits = 0; } 
     /** 
      * Increase number of hits 
      * 
      */
-    void Incr() { fNHits++; } 
+    // void Incr() { fNHits++; } 
     /** 
      * Finish off 
      * 
      */
-    void Finish(); 
+    // void Finish(); 
     /** 
      * Make output 
      * 
      * @param dir where to store 
      */
-    void Output(TList* dir);
+    void CreateOutputObjects(TList* dir);
     /** 
      * Scale the histograms to the total number of events 
      * 
      * @param nEvents Number of events 
      * @param dir     Where the output is 
      */
-    void ScaleHistograms(const TList* dir, Int_t nEvents);
-    TH1D*     fBefore;       // Distribution of signals before filter
-    TH1D*     fAfter;        // Distribution of signals after filter
-    TH1D*     fSingle;       // Distribution of 1 signal after filter
-    TH1D*     fDouble;       // Distribution of 2 signals after filter
-    TH1D*     fTriple;       // Distribution of 3 signals after filter
-    TH2D*     fSinglePerStrip;       // Distribution of 1 signal per strip
-    TH1D*     fDistanceBefore; //Distance between signals before sharing
-    TH1D*     fDistanceAfter; //Distance between signals after sharing    
-    TH2D*     fBeforeAfter;  // Correlation of before and after 
+    void Terminate(const TList* dir, Int_t nEvents);
+    TH1D*     fBefore;          // Distribution of signals before filter
+    TH1D*     fAfter;           // Distribution of signals after filter
+    TH1D*     fSingle;          // Distribution of 1 signal after filter
+    TH1D*     fDouble;          // Distribution of 2 signals after filter
+    TH1D*     fTriple;          // Distribution of 3 signals after filter
+    TH2D*     fSinglePerStrip;  // Distribution of 1 signal per strip
+    TH2D*     fBeforeAfter;     // Correlation of before and after 
     TH2D*     fNeighborsBefore; // Correlation of neighbors 
-    TH2D*     fNeighborsAfter; // Correlation of neighbors 
-    TH2D*     fSum;          // Summed signal 
-    TH1D*     fHits;         // Distribution of hit strips. 
-    Int_t     fNHits;        // Number of hit strips per event
-    ClassDef(RingHistos,1);
+    TH2D*     fNeighborsAfter;  // Correlation of neighbors 
+    TH2D*     fSumESD;          // Summed ESD signal 
+    TH2D*     fSum;             // Summed cluster signal 
+    TH1D*     fNConsecutive;    // # consecutive strips with signal > low cut
+    ClassDef(RingHistos,4);
   };
   /** 
    * Get the ring histogram container 
@@ -327,64 +341,6 @@ protected:
                         Char_t   r,
                         UShort_t s,
                         UShort_t t) const;
-  /** 
-   * The actual algorithm 
-   * 
-   * @param mult      The unfiltered signal in the strip
-   * @param eta       Psuedo rapidity 
-   * @param prevE     Previous strip signal (or 0)
-   * @param nextE     Next strip signal (or 0) 
-   * @param lowFlux   Whether this is a low flux event 
-   * @param d         Detector
-   * @param r         Ring 
-   * @param s         Sector 
-   * @param t         Strip
-   * @param usedPrev  Whether the previous strip was used in sharing or not
-   * @param usedThis  Wether this strip was used in sharing or not. 
-   * 
-   * @return The filtered signal in the strip
-   */
-  Double_t MultiplicityOfStrip(Double_t mult,
-                              Double_t eta,
-                              Double_t prevE,
-                              Double_t nextE,
-                              Bool_t   lowFlux,
-                              UShort_t d,
-                              Char_t   r,
-                              UShort_t s,
-                              UShort_t t,
-                              Bool_t&  usedPrev, 
-                              Bool_t&  usedThis) const;
-  /** 
-   * The actual algorithm 
-   * 
-   * @param thisE      This strips energy 
-   * @param prevE      Previous strip enery 
-   * @param nextE      Next strip energy 
-   * @param eta        Psuedo-rapidity
-   * @param lowFlux    Whether to use low flux settings
-   * @param d          Detector
-   * @param r          Ring 
-   * @param s          Sector 
-   * @param t          Strip
-   * @param prevStatus Previous status
-   * @param thisStatus This status 
-   * @param nextStatus Next status
-   * 
-   * @return The filtered signal in the strip
-   */
-  Double_t MultiplicityOfStrip(Double_t thisE,
-                              Double_t prevE,
-                              Double_t nextE,
-                              Double_t eta,
-                              Bool_t   lowFlux,
-                              UShort_t d,
-                              Char_t   r,
-                              UShort_t s,
-                              UShort_t t,
-                              Status&  prevStatus, 
-                              Status&  thisStatus, 
-                              Status&  nextStatus) const;
   /** 
    * Angle correct the signal 
    * 
@@ -430,24 +386,19 @@ protected:
    * @return 
    */
   virtual Double_t GetLowCut(UShort_t d, Char_t r, Double_t eta) const;
-
-  virtual Bool_t IsDead(UShort_t d, Char_t r, UShort_t s, UShort_t t) const;
-  TList    fRingHistos;    // List of histogram containers
-  // Double_t fLowCut;        // Low cut on sharing
-  Bool_t   fCorrectAngles; // Whether to work on angle corrected signals
-  TH2*     fSummed;        // Operations histogram 
-  TH2*     fHighCuts;      // High cuts used
-  TH2*     fLowCuts;       // High cuts used
-  AliFMDFloatMap* fOper;   // Operation done per strip 
-  Int_t    fDebug;         // Debug level 
-  Bool_t   fZeroSharedHitsBelowThreshold; //Whether to zero shared strip below cut
-  AliFMDMultCuts fLCuts;    //Cuts object for low cuts
-  AliFMDMultCuts fHCuts;    //Cuts object for high cuts
-  Bool_t   fUseSimpleMerging; //enable simple sharing by HHD
+  TList    fRingHistos;      // List of histogram containers
+  Bool_t   fCorrectAngles;   // Whether to work on angle corrected signals
+  TH2*     fHighCuts;        // High cuts used
+  TH2*     fLowCuts;         // High cuts used
+  Int_t    fDebug;           // Debug level 
+  Bool_t   fZeroSharedHitsBelowThreshold; // Zero shared strip below cut?
+  AliFMDMultCuts fLCuts;     // Cuts object for low cuts
+  AliFMDMultCuts fHCuts;     // Cuts object for high cuts
+  Bool_t   fUseSimpleMerging;// enable simple sharing by HHD
   Bool_t   fThreeStripSharing; //In case of simple sharing allow 3 strips
-  Bool_t   fRecalculateEta; //Whether to recalculate eta and angle correction (disp vtx)
-  TArrayI  fExtraDead;      // List of extra dead channels
-  ClassDef(AliFMDSharingFilter,5); //
+  Bool_t   fMergingDisabled; // If true, do not merge
+  Bool_t   fIgnoreESDForAngleCorrection; // Ignore ESD information when angle correcting
+  ClassDef(AliFMDSharingFilter,11); //
 };
 
 #endif