]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/mapping/AliMpIteratorPainter.cxx
In Print(): added an option to print area borders
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpIteratorPainter.cxx
1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 *                                                                        *
4 * Author: The ALICE Off-line Project.                                    *
5 * Contributors are mentioned in the code where appropriate.              *
6 *                                                                        *
7 * Permission to use, copy, modify and distribute this software and its   *
8 * documentation strictly for non-commercial purposes is hereby granted   *
9 * without fee, provided that the above copyright notice appears in all   *
10 * copies and that both the copyright notice and this permission notice   *
11 * appear in the supporting documentation. The authors make no claims     *
12 * about the suitability of this software for any purpose. It is          *
13 * provided "as is" without express or implied warranty.                  *
14 **************************************************************************/
15
16 // $Id$
17
18 #include "AliMpIteratorPainter.h"
19
20 #include "AliMpVPadIterator.h"
21 #include "AliMpPad.h"
22 #include "AliMpGraphContext.h"
23
24 #include "AliLog.h"
25
26 #include "TObjArray.h"
27 #include "TVirtualX.h"
28 #include "TVirtualPad.h"
29 #include "TVector2.h"
30 #include "TMath.h"
31
32 //-----------------------------------------------------------------------------
33 /// \class AliMpIteratorPainter
34 ///
35 /// A painter for a group of pads, which is defined by an iterator
36 ///
37 ///
38 /// \author L. Aphecetche
39 //-----------------------------------------------------------------------------
40
41 /// \cond CLASSIMP
42 ClassImp(AliMpIteratorPainter)
43 /// \endcond
44
45 //_____________________________________________________________________________
46 AliMpIteratorPainter::AliMpIteratorPainter(AliMpVPadIterator *it)
47 : AliMpVPainter(), fPads(new TObjArray), fPosition(), fDimensions()
48 {
49   /// Ctor. Iterator must not be null.
50   
51   //if (!it) throw;
52   if (!it) {
53     AliFatal("Iterator must not be null.");;
54   }  
55  
56   Double_t xmin(1E9), xmax(-1E9);
57   Double_t ymin(1E9), ymax(-1E9);
58   
59   fPads->SetOwner(kTRUE);
60   it->First();
61   while ( !it->IsDone() ) 
62   {
63     AliMpPad pad = it->CurrentItem();
64     fPads->AddLast(new AliMpPad(pad));
65     TVector2 lowerLeft(pad.Position()-pad.Dimensions());
66     TVector2 upperRight(pad.Position()+pad.Dimensions());
67     xmin = TMath::Min(lowerLeft.X(),xmin);
68     ymin = TMath::Min(lowerLeft.Y(),ymin);
69     xmax = TMath::Max(upperRight.X(),xmax);
70     ymax = TMath::Max(upperRight.Y(),ymax);
71     it->Next();
72   }
73   fPosition = TVector2((xmin+xmax)/2.0,(ymin+ymax)/2.0);
74   fDimensions = TVector2((xmax-xmin)/2.0,(ymax-ymin)/2.0);
75 }
76
77 //_____________________________________________________________________________
78 AliMpIteratorPainter::~AliMpIteratorPainter()
79 {
80   /// dtor
81   delete fPads;
82 }
83
84 //_____________________________________________________________________________
85 void
86 AliMpIteratorPainter::Draw(Option_t* option)
87 {
88   /// Append ourselves to the current graphic pad
89   AliMpGraphContext *gr = AliMpGraphContext::Instance();
90   gr->Push();
91   InitGraphContext();
92   gr->SetPadPosForReal(GetPosition(),GetDimensions());
93   AppendPad(option);
94   gr->Pop();
95 }
96
97 //_____________________________________________________________________________
98 void
99 AliMpIteratorPainter::Paint(Option_t*)
100 {
101   /// Actual drawing method
102   
103   AliMpGraphContext* gr = AliMpGraphContext::Instance();
104   gr->Push();
105   InitGraphContext();
106   gPad->Range(0.,0.,1.,1.);
107   
108   TIter next(fPads);
109   AliMpPad* pad;
110   
111   while ( ( pad = static_cast<AliMpPad*>(next()) ) )
112   {
113     TVector2 padPadPos;
114     TVector2 padPadDim;
115     
116     gr->RealToPad(pad->Position(),
117                   pad->Dimensions(),
118                   padPadPos,
119                   padPadDim);
120
121     TVector2 bl = padPadPos - padPadDim;
122     TVector2 ur = padPadPos + padPadDim;
123     
124     Int_t manuId = pad->GetLocation().GetFirst();
125
126     Style_t sty = gVirtualX->GetFillStyle();
127
128     gVirtualX->SetFillStyle(1);
129     if (manuId % 5 == 0) 
130         gVirtualX->SetFillColor(0);
131     if (manuId % 5 == 1) 
132         gVirtualX->SetFillColor(38);
133     if (manuId % 5 == 2) 
134         gVirtualX->SetFillColor(33);
135     if (manuId % 5 == 3) 
136         gVirtualX->SetFillColor(16);
137     if (manuId % 5 == 4) 
138         gVirtualX->SetFillColor(44);
139
140     gPad->PaintBox(bl.X(),bl.Y(),ur.X(),ur.Y());
141     gVirtualX->SetFillStyle(0);
142     gPad->PaintBox(bl.X(),bl.Y(),ur.X(),ur.Y());
143     gVirtualX->SetFillStyle(sty);    
144
145     Float_t textSize =   gVirtualX->GetTextSize();
146     gVirtualX->SetTextSize(10);
147     gVirtualX->SetTextAlign(22);
148     gPad->PaintText((bl.X()+ur.X())/2.0,(bl.Y()+ur.Y())/2.0,
149                     Form("%d",pad->GetLocation().GetSecond()));
150     
151     gVirtualX->SetTextSize(textSize);
152     
153   }
154 }
155
156