#ifndef ALIMUONVPAINTER_H
#define ALIMUONVPAINTER_H
#ifndef ALIMUONATTPAINTER_H
# include "AliMUONAttPainter.h"
#endif
#ifndef ROOT_TQObject
# include <TQObject.h>
#endif
#ifndef ROOT_TString
# include "TString.h"
#endif
#ifndef ROOT_TObject
# include "TObject.h"
#endif
#ifndef AL_MP_AREA_H
# include "AliMpArea.h"
#endif
#include <float.h>
class AliMUONContour;
class AliMUONPainterGroup;
class AliMUONVTrackerData;
class AliMpArea;
class TCollection;
class TH1;
class TList;
class TMap;
class TObjArray;
class TVirtualPad;
class AliMUONVPainter : public TObject, public TQObject
{
public:
AliMUONVPainter(TRootIOCtor*);
AliMUONVPainter(const char* type="");
AliMUONVPainter(const AliMUONVPainter& rhs);
AliMUONVPainter& operator=(const AliMUONVPainter& rhs);
virtual ~AliMUONVPainter();
void Add(AliMUONVPainter* painter);
AliMpArea Area() const;
virtual void SetAttributes(const AliMUONAttPainter& attributes);
virtual AliMUONAttPainter Validate(const AliMUONAttPainter& attributes) const { return attributes; }
const AliMUONAttPainter& Attributes() const { return fAttributes; }
virtual void ComputeDataRange(const AliMUONVTrackerData& data, Int_t dataIndex,
Double_t& dataMin, Double_t& dataMax) const;
virtual void Copy(TObject& object) const;
AliMUONVPainter* Detach() const;
virtual Bool_t CanBeDetached() const { return kTRUE; }
virtual Bool_t IsValid() const { return fIsValid; }
void Invalidate() { fIsValid = kFALSE; }
Int_t Depth() const;
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
virtual void Draw(Option_t* opt="");
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py);
AliMUONContour* Contour() const { return fContour; }
virtual const char* GetName() const { return Name().Data(); }
virtual TString Name() const { return fName; }
virtual TString PathName() const { return fPathName; }
virtual TString ContourName() const;
virtual char* GetObjectInfo(Int_t px, Int_t py) const;
void GetTypes(TObjArray& types) const;
AliMUONPainterGroup* MotherGroup() const { return fGroup; }
virtual TString NameAtPosition(Double_t , Double_t ) const { return GetName(); }
AliMUONPainterGroup* Group(const char* type) const;
AliMUONPainterGroup* Group(Int_t depth) const;
virtual Bool_t HandleMouseMotion() const { return kFALSE; }
Bool_t IsResponder() const;
Bool_t IsInside(Double_t x, Double_t y) const;
AliMUONVPainter* Mother() const { return fMother; }
virtual void Paint(Option_t* opt="");
virtual void Print(Option_t* opt="") const;
AliMUONPainterGroup* PlotterGroup() const { return fPlotterGroup; }
AliMUONPainterGroup* ResponderGroup() const { return fResponderGroup; }
void SetContour(AliMUONContour* contour);
void SetData(const char* pattern, AliMUONVTrackerData* data, Int_t dataIndex);
void SetLine(Int_t depth, Int_t lineColor, Int_t lineWidth);
void SetMotherGroup(AliMUONPainterGroup* group) { fGroup = group; }
void SetMother(AliMUONVPainter* painter);
void SetOutlined(const char* pattern, Bool_t flag);
virtual void SetResponder(const char* pattern);
virtual void SetResponder(Int_t depth);
void SetVisible(const char* pattern, Bool_t flag);
const char* Type() const { return fType.Data(); }
void Clicked(AliMUONVPainter* painter, Double_t* pos);
void ShiftClicked(AliMUONVPainter* painter, Double_t* pos);
void DoubleClicked(AliMUONVPainter* painter, Double_t* pos);
static void PixelToPad(Int_t px, Int_t py, Double_t& x, Double_t& y);
virtual void PaintOutline(Int_t color=-1, Int_t width=-1, Double_t x=FLT_MAX, Double_t y=FLT_MAX);
virtual void PaintArea(Int_t fillColor);
virtual void PaintArea(const AliMUONVTrackerData& data, Int_t dataIndex,
Double_t min, Double_t max);
TVirtualPad* Pad() const { return fPad; }
Int_t GetLineColor() const { return fLineColor; }
Int_t GetLineWidth() const { return fLineWidth; }
void SetLineColor(Int_t lineColor) { fLineColor = lineColor; }
void SetLineWidth(Int_t lineWidth) { fLineWidth = lineWidth; }
void SetName(const char* name) { fName = name; }
void SetPathName(const char* pathName) { fPathName = pathName; }
static AliMUONVPainter* CreatePainter(const char* className,
const AliMUONAttPainter& att,
Int_t id1, Int_t id2);
Int_t ID0() const { return fID[0]; }
Int_t ID1() const { return fID[1]; }
void SetID(Int_t id0, Int_t id1) { fID[0] = id0; fID[1] = id1; }
virtual TString Describe(const AliMUONVTrackerData& data, Int_t dataIndex,
Double_t x=FLT_MAX, Double_t y=FLT_MAX);
void UpdateGroupsFrom(const AliMUONVPainter& painter);
AliMUONVPainter* Master() const;
virtual void DrawHistogram(Double_t* values=0x0) const;
void DrawHistogram0() const { DrawHistogram(0x0); }
void DrawHistogramClone0() const { DrawHistogramClone(0x0); }
virtual void DrawHistogramClone(Double_t* values=0x0) const;
virtual void DrawInternalHistogram(Int_t dim) const;
virtual void DrawInternalHistogramClone(Int_t dim) const;
virtual void FillManuList(TObjArray& manuList) const;
void DrawInternalHistogramClone0() { DrawInternalHistogramClone(0); }
void DrawInternalHistogramClone1() { DrawInternalHistogramClone(1); }
void DrawInternalHistogramClone2() { DrawInternalHistogramClone(2); }
void DrawInternalHistogramClone3() { DrawInternalHistogramClone(3); }
void DrawInternalHistogramClone4() { DrawInternalHistogramClone(4); }
void DrawInternalHistogramClone5() { DrawInternalHistogramClone(5); }
void DrawInternalHistogramClone6() { DrawInternalHistogramClone(6); }
void DrawInternalHistogramClone7() { DrawInternalHistogramClone(7); }
void DrawInternalHistogramClone8() { DrawInternalHistogramClone(8); }
void DrawInternalHistogramClone9() { DrawInternalHistogramClone(9); }
virtual Bool_t IsIncluded() const = 0;
Bool_t IsExcluded() const { return ! IsIncluded(); }
virtual void Include();
virtual void Exclude();
protected:
virtual TCollection* Children() const;
void CreateGroups();
AliMUONVTrackerData* InteractiveReadOutConfig() const;
mutable TH1* fHistogram;
TMap* fPainterGroups;
AliMUONPainterGroup* fResponderGroup;
private:
void FlatList(TList& list);
AliMUONPainterGroup* CreateGroup(const char* type, Int_t depth);
void GetBoundingBox(Double_t& x1, Double_t& y1,
Double_t& x2, Double_t& y2) const;
AliMUONVPainter* GetPainter(Int_t px, Int_t py, Double_t& x, Double_t& y) const;
void WriteIROC(Double_t value);
void GetIROCManuList(TObjArray& manuList);
TString fName;
TString fPathName;
TString fType;
AliMUONVPainter* fMother;
AliMUONPainterGroup* fGroup;
AliMUONContour* fContour;
TObjArray* fChildren;
AliMUONPainterGroup* fPlotterGroup;
Double_t fBorderFactor;
TVirtualPad* fPad;
AliMUONAttPainter fAttributes;
Int_t fLineColor;
Int_t fLineWidth;
Int_t fID[2];
Bool_t fIsValid;
ClassDef(AliMUONVPainter,3)
};
#endif