--- /dev/null
+#ifndef ALIMUONPAD_H
+#define ALIMUONPAD_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+* See cxx source for full Copyright notice */
+
+// $Id$
+
+/// \ingroup rec
+/// \class AliMUONPad
+/// \brief Combination of digit and mppad informations.
+///
+// Author Laurent Aphecetche
+
+#ifndef ROOT_TObject
+# include "TObject.h"
+#endif
+#ifndef ROOT_TVector2
+# include "TVector2.h"
+#endif
+#ifndef ALI_MP_AREA_H
+# include "AliMpArea.h"
+#endif
+
+class AliMUONPad : public TObject
+{
+public:
+ AliMUONPad();
+ AliMUONPad(Double_t x, Double_t y,
+ Double_t dx, Double_t dy, Double_t charge);
+ AliMUONPad(const TVector2& position, const TVector2& dimensions,
+ Double_t charge);
+ AliMUONPad(Int_t detElemId, Int_t cathode,
+ Int_t ix, Int_t iy, Double_t x, Double_t y,
+ Double_t dx, Double_t dy, Double_t charge);
+ virtual ~AliMUONPad() {}
+
+ void BackupCharge() { fChargeBackup = fCharge; }
+
+ Int_t Cathode() const { return fCathode; }
+
+ Double_t Coord(Int_t ixy) const;
+
+ Double_t Charge() const { return fCharge; }
+ Double_t ChargeBackup() const { return fChargeBackup; }
+
+ virtual Int_t Compare(const TObject* obj) const;
+
+ Int_t DetElemId() const { return fDetElemId; }
+
+ Int_t DigitIndex() const { return fDigitIndex; }
+
+ TVector2 Dimensions() const { return fDimensions; }
+
+ Double_t DX() const { return fDimensions.X(); }
+ Double_t DY() const { return fDimensions.Y(); }
+
+ Bool_t IsReal() const { return fIsReal; }
+
+ Bool_t IsSaturated() const { return fIsSaturated; }
+
+ Bool_t IsSortable() const { return kTRUE; }
+
+ Bool_t IsUsed() const { return fClusterId >= 0; }
+
+ Int_t Ix() const { return fIx; }
+ Int_t Iy() const { return fIy; }
+
+ virtual void Paint(Option_t* opt="");
+
+ TVector2 Position() const { return fPosition; }
+
+ void Print(Option_t* opt = "") const;
+
+ // Detach this pad from a cluster
+ void Release() { fClusterId = -1; }
+
+ void RevertCharge() { fCharge = fChargeBackup; }
+
+ void SetCharge(Double_t charge) { fCharge = charge; }
+
+ void SetChargeBackup(Double_t charge) { fChargeBackup = charge; }
+
+ void SetCoord(Int_t ixy, Double_t Coord);
+
+ void SetDigitIndex(Int_t digitIndex) { fDigitIndex = digitIndex; }
+
+ void SetStatus(Int_t status) { fStatus = status; }
+
+ void SetClusterId(Int_t id) { fClusterId = id; }
+
+ void SetSaturated(Bool_t val) { fIsSaturated = val; }
+
+ void SetSize(Int_t ixy, Double_t Size);
+
+ void SetReal(Bool_t val) { fIsReal = val; }
+
+ void Shift(Int_t ixy, Double_t shift);
+
+ Double_t Size(Int_t ixy) const;
+
+ Int_t Status() const { return fStatus; }
+
+ Double_t X() const { return fPosition.X(); }
+ Double_t Y() const { return fPosition.Y(); }
+
+ static AliMpArea Overlap(const AliMUONPad& d1, const AliMUONPad& d2);
+
+ static Bool_t AreOverlapping(const AliMUONPad& d1, const AliMUONPad& d2,
+ const TVector2& precision,
+ AliMpArea& overlapArea);
+
+ static Bool_t AreOverlapping(const AliMUONPad& d1, const AliMUONPad& d2,
+ const TVector2& precision);
+
+ static Bool_t AreNeighbours(const AliMUONPad& d1, const AliMUONPad& d2);
+
+
+private:
+ void Init(Int_t detElemId, Int_t cathode,
+ Int_t ix, Int_t iy,
+ const TVector2& position,
+ const TVector2& dimensions,
+ Double_t charge);
+
+private:
+ Bool_t fIsSaturated; /// whether this pad is saturated or not
+ Bool_t fIsReal; /// whether this is a real pad or a virtual one
+ Int_t fClusterId; /// cluster id this pad belongs to (-1 if not attached to a cluster)
+ Int_t fCathode; /// cathode number
+ Int_t fDetElemId; /// detection element id
+ Int_t fDigitIndex; /// corresponding digit index (to get back the digit from which this pad was constructed, if needed)
+ Int_t fIx; /// x-index
+ Int_t fIy; /// y-index
+ Int_t fStatus; /// status word
+ TVector2 fDimensions; /// half dimensions in x and y (cm)
+ TVector2 fPosition; /// positions in x and y (cm)
+ Double_t fCharge; /// pad charge
+ Double_t fChargeBackup; /// backup charge (usefull if clustering somehow plays with the charge, this one is the "original" one)
+
+ ClassDef(AliMUONPad,1) // A full grown pad
+};
+
+#endif