* 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
*
* - 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
class AliFMDSharingFilter : public TNamed
{
public:
- /** Status of a strip */
+ /**
+ * Status of a strip
+ * @deprecated Not used
+ */
enum Status {
/** Nothing yet */
kNone = 1,
* @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
*
* @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
*
* 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
*
* @param dir Directory to add to
*/
- virtual void DefineOutput(TList* dir);
+ virtual void CreateOutputObjects(TList* dir);
+ /* @} */
/**
* Print information
*
*/
virtual void Print(Option_t* option="") const;
+ /**
+ * @{
+ * @name Cuts
+ */
/**
* Get the low cuts
*
* @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
*/
/**
* 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
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
*
* @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