1 #ifndef ALIMUONCLUSTERFINDERMLEM_H
2 #define ALIMUONCLUSTERFINDERMLEM_H
18 #ifndef ROOT_TObjArray
19 # include "TObjArray.h"
22 # include "TVector2.h"
41 virtual Bool_t
Prepare(Int_t detElemId,
48 virtual void SetChargeHints(Double_t lowestPadCharge, Double_t lowestClusterCharge);
50 virtual void Print(Option_t* opt=
"")
const;
52 virtual void Paint(Option_t* opt=
"");
88 TH2D *hist1, TH2D *hist2);
96 void Mlem(
AliMUONCluster& cluster,
const Double_t *coef, Double_t *probi, Int_t nIter);
102 void FlagLocalMax(TH2D *hist, Int_t i, Int_t j, Int_t *isLocalMax);
111 void Plot(
const char* outputfile);
114 Double_t* coef, Double_t* probi);
AliMUONVClusterFinder * fPreClusterFinder
! the pre-clustering worker
Int_t FindNearest(const AliMUONPad *pixPtr0)
Int_t fNClusters
! total number of clusters
void BuildPixArrayOneCathode(AliMUONCluster &cluster)
Interface of a cluster finder.
virtual Bool_t NeedSegmentation() const
Double_t fLowestPixelCharge
! see AliMUONRecoParam
AliMUONPad * Pixel(Int_t i) const
static Int_t GetCoupledFlag()
Return coupled pad flag.
Int_t FindLocalMaxima(TObjArray *pixArray, Int_t *localMax, Double_t *maxVal)
A group of adjacent pads.
static Int_t GetUseForFitFlag()
Return should be used for fit flag.
void FindCOG(Double_t *xyc)
Splitter class for the MLEM algorithm.
A rectangle area positioned in plane..
void PadsInXandY(AliMUONCluster &cluster, Int_t &nInX, Int_t &nInY) const
virtual Bool_t Prepare(Int_t detElemId, TObjArray *pads[2], const AliMpArea &area, const AliMpVSegmentation *segmentations[2])
Bool_t MainLoop(AliMUONCluster &cluster, Int_t iSimple)
Bool_t fPlot
! whether we should plot thing (for debug only, quite slow!)
virtual Bool_t Prepare(Int_t detElemId, TObjArray *pads[2], const AliMpArea &area)
TH2D * fHistMlem
! histogram for MLEM procedure
void AddBinSimple(TH2D *mlem, Int_t ic, Int_t jc)
void BuildPixArray(AliMUONCluster &cluster)
build array of pixels
AliMUONCluster * fPreCluster
! current pre-cluster
AliMUONCluster * CheckPrecluster(const AliMUONCluster &cluster)
Check precluster to simplify it (if possible), and return the simplified cluster. ...
static const Int_t fgkMustKeep
do not kill (for pixels)
void ComputeCoefficients(AliMUONCluster &cluster, Double_t *coef, Double_t *probi)
Int_t fClusterNumber
! current cluster number
Bool_t Overlap(const AliMUONPad &pad, const AliMUONPad &pixel)
Checks whether a pad and a pixel have an overlapping area.
static Int_t GetOverFlag()
Return processing is over flag.
void FlagLocalMax(TH2D *hist, Int_t i, Int_t j, Int_t *isLocalMax)
static Int_t GetMustKeepFlag()
Return do not kill flag.
static Int_t GetZeroFlag()
Return pad "basic" state flag.
static const TVector2 fgkDecreaseSize
idem
static const Int_t fgkZero
pad "basic" state
TObjArray fClusterList
! clusters corresponding to the current pre-cluster
void Simple(AliMUONCluster &cluster)
Process simple cluster.
static const TVector2 fgkIncreaseSize
idem
virtual ~AliMUONClusterFinderMLEM()
virtual void Print(Option_t *opt="") const
void MaskPeaks(Int_t mask)
static const Int_t fgkModified
modified pad charge
void AddVirtualPad(AliMUONCluster &cluster)
AliMUONClusterFinderMLEM & operator=(const AliMUONClusterFinderMLEM &rhs)
Not implemented.
AliMUONClusterFinderMLEM(Bool_t plot, AliMUONVClusterFinder *clusterFinder)
Int_t fDebug
! debug level
AliMUONCluster * CheckPreclusterTwoCathodes(AliMUONCluster *cluster)
void plot(const std::vector< TH1 * > &v, Double_t min, Double_t max, Double_t factor)
Int_t fDetElemId
! current DE being processed
static Int_t GetModifiedFlag()
Return modified pad charge flag.
Int_t fEventNumber
! current event being processed
TObjArray * fPixArray
! collection of pixels
static const Int_t fgkOver
processing is over
static const Int_t fgkUseForFit
should be used for fit
void Plot(const char *outputfile)
void Mlem(AliMUONCluster &cluster, const Double_t *coef, Double_t *probi, Int_t nIter)
The abstract base class for the segmentation.
static const Int_t fgkCoupled
coupled pad
void RemovePixel(Int_t i)
virtual AliMUONCluster * NextCluster()
Int_t fNAddVirtualPads
! number of clusters for which we added virtual pads
Bool_t WorkOnPreCluster()
Double_t fLowestClusterCharge
! see AliMUONRecoParam
void FindCluster(AliMUONCluster &cluster, const Int_t *localMax, Int_t iMax)
AliMUONClusterSplitterMLEM * fSplitter
! helper class to go from pixel arrays to clusters
virtual void Paint(Option_t *opt="")
virtual void SetChargeHints(Double_t lowestPadCharge, Double_t lowestClusterCharge)
TH2D * fHistAnode
! histogram for local maxima search
Double_t fLowestPadCharge
! see AliMUONRecoParam
static const Double_t fgkDistancePrecision
used to check overlaps and so on
Cluster finder in MUON arm of ALICE.
Combination of digit and mppad informations.
void PadOverHist(Int_t idir, Int_t ix0, Int_t iy0, AliMUONPad *pad, TH2D *hist1, TH2D *hist2)
const AliMpVSegmentation * fkSegmentation[2]
! new segmentation