LCOV - code coverage report
Current view: top level - MUON/MUONgraphics - AliMUONVPainter.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 41 2.4 %
Date: 2016-06-14 17:26:59 Functions: 1 48 2.1 %

          Line data    Source code
       1             : #ifndef ALIMUONVPAINTER_H
       2             : #define ALIMUONVPAINTER_H
       3             : 
       4             : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       5             : * See cxx source for full Copyright notice                               */
       6             : 
       7             : // $Id$
       8             : 
       9             : /// \ingroup graphics
      10             : /// \class AliMUONVPainter
      11             : /// \brief Base class for a graphical object representing some part of the
      12             : /// MUON tracking system
      13             : /// 
      14             : // Author Laurent Aphecetche, Subatech
      15             : 
      16             : #ifndef ALIMUONATTPAINTER_H
      17             : #  include "AliMUONAttPainter.h"
      18             : #endif
      19             : #ifndef ROOT_TQObject
      20             : #  include <TQObject.h>
      21             : #endif
      22             : #ifndef ROOT_TString
      23             : #  include "TString.h"
      24             : #endif
      25             : #ifndef ROOT_TObject
      26             : #  include "TObject.h"
      27             : #endif
      28             : #ifndef AL_MP_AREA_H
      29             : #  include "AliMpArea.h"
      30             : #endif
      31             : #include <float.h>
      32             : 
      33             : class AliMUONContour;
      34             : class AliMUONPainterGroup;
      35             : class AliMUONVTrackerData;
      36             : class AliMpArea;
      37             : class TCollection;
      38             : class TH1;
      39             : class TList;
      40             : class TMap;
      41             : class TObjArray;
      42             : class TVirtualPad;
      43             : 
      44             : class AliMUONVPainter : public TObject, public TQObject
      45             : {
      46             : public:  
      47             : 
      48             :   AliMUONVPainter(TRootIOCtor*);
      49             :   AliMUONVPainter(const char* type="");
      50             :   AliMUONVPainter(const AliMUONVPainter& rhs);
      51             :   AliMUONVPainter& operator=(const AliMUONVPainter& rhs);
      52             :   virtual ~AliMUONVPainter();
      53             : 
      54             :   /// Add a painter to our list of children. We adopt this painter (i.e. we become owner).
      55             :   void Add(AliMUONVPainter* painter);
      56             :   
      57             :   /// Return the area containing this painter
      58             :   AliMpArea Area() const;
      59             :   
      60             :   virtual void SetAttributes(const AliMUONAttPainter& attributes);
      61             :   
      62             :   /// Convert attributes so they are valid ones for us.
      63           0 :   virtual AliMUONAttPainter Validate(const AliMUONAttPainter& attributes) const { return attributes; }
      64             :   
      65             :   /// Get our attributes
      66           0 :   const AliMUONAttPainter& Attributes() const { return fAttributes; }
      67             :   
      68             :   virtual void ComputeDataRange(const AliMUONVTrackerData& data, Int_t dataIndex, 
      69             :                                 Double_t& dataMin, Double_t& dataMax) const;
      70             :   
      71             :   virtual void Copy(TObject& object) const;
      72             :   
      73             :   AliMUONVPainter* Detach() const;
      74             :   
      75             :   /// Whether this painter can be detached from the current view.
      76           0 :   virtual Bool_t CanBeDetached() const { return kTRUE; }
      77             :   
      78             :   /// Whether we are valid or not
      79           0 :   virtual Bool_t IsValid() const { return fIsValid; }
      80             :   
      81             :   /// Mark us as not valid
      82           0 :   void Invalidate() { fIsValid = kFALSE; }
      83             :   
      84             :   Int_t Depth() const;
      85             :   
      86             :   virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
      87             :   
      88             :   virtual void Draw(Option_t* opt="");
      89             :   
      90             :   virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py);
      91             :   
      92             :   /// Return the contour representing the outline of this object
      93           0 :   AliMUONContour* Contour() const { return fContour; }
      94             : 
      95             :   /// Get our name
      96           0 :   virtual const char* GetName() const { return Name().Data(); }
      97             :   
      98             :   /// Get our name
      99           0 :   virtual TString Name() const { return fName; }
     100             :   
     101             :   /// Get our path name (aka fullname)
     102           0 :   virtual TString PathName() const { return fPathName; }
     103             :   
     104             :   virtual TString ContourName() const;
     105             : 
     106             :   virtual char* GetObjectInfo(Int_t px, Int_t py) const;
     107             :   
     108             :   void GetTypes(TObjArray& types) const;
     109             : 
     110             :   /// Return our mother group
     111           0 :   AliMUONPainterGroup* MotherGroup() const { return fGroup; }
     112             :   
     113             :   /// Return specific name at a given position, if needed.
     114           0 :   virtual TString NameAtPosition(Double_t /*x*/, Double_t /*y*/) const { return GetName(); }
     115             :   
     116             :   AliMUONPainterGroup* Group(const char* type) const;
     117             :   
     118             :   AliMUONPainterGroup* Group(Int_t depth) const;
     119             :   
     120             :   /// Whether we handle mouse motion or not
     121           0 :   virtual Bool_t HandleMouseMotion() const { return kFALSE; }
     122             :   
     123             :   Bool_t IsResponder() const;
     124             :   
     125             :   Bool_t IsInside(Double_t x, Double_t y) const;
     126             : 
     127             :   /// Return our mother (0 if we're the top node)
     128           0 :   AliMUONVPainter* Mother() const { return fMother; }
     129             : 
     130             :   virtual void Paint(Option_t* opt="");
     131             : 
     132             :   virtual void Print(Option_t* opt="") const;
     133             : 
     134             :   /// Return the plotter group
     135           0 :   AliMUONPainterGroup* PlotterGroup() const { return fPlotterGroup; }
     136             :   
     137             :   /// Return the responder group
     138           0 :   AliMUONPainterGroup* ResponderGroup() const { return fResponderGroup; }
     139             : 
     140             :   /// Set out contour
     141             :   void SetContour(AliMUONContour* contour);
     142             :   
     143             :   void SetData(const char* pattern, AliMUONVTrackerData* data, Int_t dataIndex);
     144             : 
     145             :   void SetLine(Int_t depth, Int_t lineColor, Int_t lineWidth);
     146             :   
     147             :   /// Set our mother group
     148           0 :   void SetMotherGroup(AliMUONPainterGroup* group) { fGroup = group; }
     149             :   
     150             :   void SetMother(AliMUONVPainter* painter);
     151             :   
     152             :   void SetOutlined(const char* pattern, Bool_t flag);
     153             :   
     154             :   virtual void SetResponder(const char* pattern);
     155             :   
     156             :   virtual void SetResponder(Int_t depth);
     157             :   
     158             :   void SetVisible(const char* pattern, Bool_t flag);
     159             :   
     160             :   /// Return our type (e.g. PCB, Chamber, DE, MANU, etc...)
     161           0 :   const char* Type() const { return fType.Data(); }
     162             : 
     163             :   // SIGNALS
     164             :   
     165             :   void Clicked(AliMUONVPainter* painter, Double_t* pos); // *SIGNAL*
     166             : 
     167             :   void ShiftClicked(AliMUONVPainter* painter, Double_t* pos); // *SIGNAL*
     168             : 
     169             :   void DoubleClicked(AliMUONVPainter* painter, Double_t* pos); // *SIGNAL*
     170             :     
     171             :   static void PixelToPad(Int_t px, Int_t py, Double_t& x, Double_t& y);
     172             : 
     173             :   virtual void PaintOutline(Int_t color=-1, Int_t width=-1, Double_t x=FLT_MAX, Double_t y=FLT_MAX);
     174             : 
     175             :   virtual void PaintArea(Int_t fillColor);
     176             :   
     177             :   virtual void PaintArea(const AliMUONVTrackerData& data, Int_t dataIndex,
     178             :                          Double_t min, Double_t max);
     179             :     
     180             :   /// Get the pad in which we are plotted
     181           0 :   TVirtualPad* Pad() const { return fPad; }
     182             :   
     183             :   /// Get our line color
     184           0 :   Int_t GetLineColor() const { return fLineColor; }
     185             :   
     186             :   /// Get our line width
     187           0 :   Int_t GetLineWidth() const { return fLineWidth; }
     188             :   
     189             :   /// Set our line color
     190           0 :   void SetLineColor(Int_t lineColor) { fLineColor = lineColor; }
     191             :   
     192             :   /// Set our line width
     193           0 :   void SetLineWidth(Int_t lineWidth) { fLineWidth = lineWidth; }
     194             :   
     195             :   /// Set our name
     196           0 :   void SetName(const char* name) { fName = name; }
     197             :   
     198             :   /// Set our path name (aka fullname)
     199           0 :   void SetPathName(const char* pathName) { fPathName = pathName; }
     200             :   
     201             :   static AliMUONVPainter* CreatePainter(const char* className, 
     202             :                                         const AliMUONAttPainter& att,
     203             :                                         Int_t id1, Int_t id2);
     204             :     
     205             :   /// Get our first ID
     206           0 :   Int_t ID0() const { return fID[0]; }
     207             :   /// Get our second ID
     208           0 :   Int_t ID1() const { return fID[1]; }
     209             :   
     210             :   /// Set our IDs
     211           0 :   void SetID(Int_t id0, Int_t id1) { fID[0] = id0; fID[1] = id1; }
     212             :   
     213             :   virtual TString Describe(const AliMUONVTrackerData& data, Int_t dataIndex,
     214             :                            Double_t x=FLT_MAX, Double_t y=FLT_MAX);
     215             : 
     216             :   void UpdateGroupsFrom(const AliMUONVPainter& painter);
     217             : 
     218             :   AliMUONVPainter* Master() const;
     219             :   
     220             :   virtual void DrawHistogram(Double_t* values=0x0) const;
     221             : 
     222             :   /// To avoid getting a popup asking for the parameter in the GUI...
     223           0 :   void DrawHistogram0() const { DrawHistogram(0x0); }
     224             :   /// To avoid getting a popup asking for the parameter in the GUI...
     225           0 :   void DrawHistogramClone0() const { DrawHistogramClone(0x0); }
     226             : 
     227             :   virtual void DrawHistogramClone(Double_t* values=0x0) const;
     228             :   
     229             :   virtual void DrawInternalHistogram(Int_t dim) const;
     230             : 
     231             :   virtual void DrawInternalHistogramClone(Int_t dim) const;
     232             : 
     233             :   /// Append (i.e. don't have the right to clear the array !) our list of manus to manuList
     234             :   virtual void FillManuList(TObjArray& manuList) const;
     235             :   
     236             :   /// following kind of stupid lines (SL), because I don't know how to
     237             :   /// pass parameters to TClassMenuItem for context menu (don't even
     238             :   /// know if that's possible at all)
     239             :   /// SL
     240           0 :   void DrawInternalHistogramClone0() { DrawInternalHistogramClone(0); }
     241             :   /// SL
     242           0 :   void DrawInternalHistogramClone1() { DrawInternalHistogramClone(1); }
     243             :   /// SL
     244           0 :   void DrawInternalHistogramClone2() { DrawInternalHistogramClone(2); }
     245             :   /// SL
     246           0 :   void DrawInternalHistogramClone3() { DrawInternalHistogramClone(3); }
     247             :   /// SL
     248           0 :   void DrawInternalHistogramClone4() { DrawInternalHistogramClone(4); }
     249             :   /// SL
     250           0 :   void DrawInternalHistogramClone5() { DrawInternalHistogramClone(5); }
     251             :   /// SL
     252           0 :   void DrawInternalHistogramClone6() { DrawInternalHistogramClone(6); }
     253             :   /// SL
     254           0 :   void DrawInternalHistogramClone7() { DrawInternalHistogramClone(7); }
     255             :   /// SL
     256           0 :   void DrawInternalHistogramClone8() { DrawInternalHistogramClone(8); }
     257             :   /// SL
     258           0 :   void DrawInternalHistogramClone9() { DrawInternalHistogramClone(9); }
     259             :   
     260             :   /// Whether or not the part of the detector represented by this painter should be included in readout.
     261             :   virtual Bool_t IsIncluded() const = 0;
     262             :   
     263             :   /// Whether or not the part of the detector represented by this painter should be excluded from readout.
     264           0 :   Bool_t IsExcluded() const { return ! IsIncluded(); }
     265             : 
     266             :   virtual void Include();
     267             :   
     268             :   virtual void Exclude();
     269             : 
     270             : protected:
     271             :     
     272             :   virtual TCollection* Children() const;
     273             : 
     274             :   void CreateGroups();
     275             : 
     276             :   AliMUONVTrackerData* InteractiveReadOutConfig() const;
     277             :   
     278             :   mutable TH1* fHistogram; //!<! histogram
     279             :   
     280             :   TMap* fPainterGroups; ///< map of groups
     281             :   AliMUONPainterGroup* fResponderGroup; ///< the responder group
     282             : 
     283             : private:
     284             :   
     285             :   void FlatList(TList& list);
     286             : 
     287             :   AliMUONPainterGroup* CreateGroup(const char* type, Int_t depth);
     288             :   
     289             :   void GetBoundingBox(Double_t& x1, Double_t& y1, 
     290             :                       Double_t& x2, Double_t& y2) const;
     291             :   
     292             :   AliMUONVPainter* GetPainter(Int_t px, Int_t py, Double_t& x, Double_t& y) const;
     293             :   
     294             :   void WriteIROC(Double_t value);
     295             :   
     296             :   void GetIROCManuList(TObjArray& manuList);
     297             : 
     298             :   TString fName; ///< our (short) name
     299             :   TString fPathName; ///< our long name
     300             :   TString fType; ///< our type (DE, Chamber, MANU, etc...)
     301             :   AliMUONVPainter* fMother;  ///< our mother
     302             :   AliMUONPainterGroup* fGroup; ///< our group
     303             :   AliMUONContour* fContour;  ///< our contour
     304             :   TObjArray* fChildren; ///< our children
     305             :   AliMUONPainterGroup* fPlotterGroup; ///< the plotter group
     306             :   Double_t fBorderFactor; ///< border factor for visu 
     307             :   TVirtualPad* fPad; ///< the pad we're drawn in
     308             :   AliMUONAttPainter fAttributes; ///< our attributes (e.g. view type)
     309             :   Int_t fLineColor; ///< our outline color
     310             :   Int_t fLineWidth; ///< our outline width
     311             :   Int_t fID[2]; ///< our ids
     312             :   Bool_t fIsValid; ///< whether we were properly initialized
     313             :   
     314          12 :   ClassDef(AliMUONVPainter,3) // Base class of a graphical object for MUON spectrometer
     315             : };
     316             : 
     317             : #endif

Generated by: LCOV version 1.11