]>
Commit | Line | Data |
---|---|---|
5f91c9e8 | 1 | // $Id$ |
2 | // Category: graphics | |
3 | // | |
4 | // Class AliMpGraphContext | |
5 | // ----------------------- | |
6 | // Class describing a the correspondance between a given area | |
7 | // in pad, and a zone of real (cm) position | |
dbe945cc | 8 | // Included in AliRoot: 2003/05/02 |
5f91c9e8 | 9 | // Author: David GUEZ, IPN Orsay |
10 | ||
fb1bf5c0 | 11 | #include <TError.h> |
12 | ||
5f91c9e8 | 13 | #include "AliMpGraphContext.h" |
14 | ||
15 | ClassImp(AliMpGraphContext) | |
16 | ||
17 | AliMpGraphContext *AliMpGraphContext::fgInstance = 0; | |
18 | GraphContextVector AliMpGraphContext::fgStack; | |
f79c58a5 | 19 | #ifdef WITH_ROOT |
20 | Int_t AliMpGraphContext::fgStackSize = 0; | |
21 | #endif | |
5f91c9e8 | 22 | |
fb1bf5c0 | 23 | //_____________________________________________________________________________ |
5f91c9e8 | 24 | AliMpGraphContext::AliMpGraphContext(): |
25 | TObject(), | |
26 | fPadPosition(TVector2(0.5,0.5)), | |
27 | fPadDimensions(TVector2(0.49,0.49)), | |
28 | fRealPosition(TVector2(0.,0.)), | |
29 | fRealDimensions(TVector2(1,1)) | |
30 | { | |
fb1bf5c0 | 31 | // private constructor |
32 | ||
5f91c9e8 | 33 | fColor = 20; |
34 | // default constructor (private) | |
35 | } | |
fb1bf5c0 | 36 | |
37 | //_____________________________________________________________________________ | |
38 | AliMpGraphContext::AliMpGraphContext(const AliMpGraphContext& right) | |
bcf37928 | 39 | : TObject(right), |
40 | fColor(right.fColor), | |
41 | fPadPosition(right.fPadPosition), | |
42 | fPadDimensions(right.fPadDimensions), | |
43 | fRealPosition(right.fRealPosition), | |
44 | fRealDimensions(right.fRealDimensions) | |
fb1bf5c0 | 45 | { |
bcf37928 | 46 | // Copy constructor |
fb1bf5c0 | 47 | } |
48 | ||
49 | //_____________________________________________________________________________ | |
50 | AliMpGraphContext& | |
51 | AliMpGraphContext::operator=(const AliMpGraphContext& right) | |
52 | { | |
53 | // protected assignement operator | |
54 | ||
55 | // check assignement to self | |
56 | if (this == &right) return *this; | |
57 | ||
bcf37928 | 58 | fColor = right.fColor; |
59 | fPadPosition = right.fPadPosition; | |
60 | fPadDimensions = right.fPadDimensions; | |
61 | fRealPosition = right.fRealPosition; | |
62 | fRealDimensions = right.fRealDimensions; | |
fb1bf5c0 | 63 | |
64 | return *this; | |
65 | } | |
66 | ||
67 | //_____________________________________________________________________________ | |
5f91c9e8 | 68 | AliMpGraphContext *AliMpGraphContext::Instance() |
69 | { | |
70 | // return or create a unique instance of this class | |
71 | if (fgInstance) return fgInstance; | |
72 | fgInstance = new AliMpGraphContext; | |
73 | return fgInstance; | |
74 | } | |
75 | ||
fb1bf5c0 | 76 | //_____________________________________________________________________________ |
5f91c9e8 | 77 | TVector2 AliMpGraphContext::RealToPad(const TVector2 &position) const |
78 | { | |
79 | // transform a real position into its equivalent position in the pad | |
80 | Double_t x=position.X(); | |
81 | Double_t y=position.Y(); | |
82 | x-= (fRealPosition.X()-fRealDimensions.X()); | |
83 | x/=fRealDimensions.X(); | |
84 | x*=fPadDimensions.X(); | |
85 | x+= (fPadPosition.X()-fPadDimensions.X() ); | |
86 | ||
87 | y-= (fRealPosition.Y()-fRealDimensions.Y()); | |
88 | y/=fRealDimensions.Y(); | |
89 | y*=fPadDimensions.Y(); | |
90 | y+= (fPadPosition.Y()-fPadDimensions.Y() ); | |
91 | ||
92 | return TVector2(x,y); | |
93 | } | |
94 | ||
fb1bf5c0 | 95 | //_____________________________________________________________________________ |
5f91c9e8 | 96 | void AliMpGraphContext::RealToPad(const TVector2 &position, |
97 | const TVector2 &dimensions, | |
98 | TVector2 &padPosition, | |
99 | TVector2 &padDimensions) const | |
100 | { | |
101 | // transform the real area (position,dimensions) to | |
102 | // its equivalent pad area | |
103 | padPosition = RealToPad(position); | |
104 | padDimensions = | |
105 | TVector2(dimensions.X()*fPadDimensions.X()/fRealDimensions.X(), | |
106 | dimensions.Y()*fPadDimensions.Y()/fRealDimensions.Y()); | |
107 | ||
108 | } | |
fb1bf5c0 | 109 | |
110 | //_____________________________________________________________________________ | |
5f91c9e8 | 111 | void AliMpGraphContext::SetPadPosForReal(const TVector2 &position, |
112 | const TVector2 &dimensions) | |
113 | { | |
114 | // Set the pad area from the actual one | |
115 | // corresponding to the given real area. | |
116 | RealToPad(position,dimensions,fPadPosition,fPadDimensions); | |
117 | } | |
fb1bf5c0 | 118 | |
119 | //_____________________________________________________________________________ | |
5f91c9e8 | 120 | void AliMpGraphContext::Push() const |
121 | { | |
122 | // Store the current configuration | |
123 | AliMpGraphContext *save = new AliMpGraphContext(*this); | |
f79c58a5 | 124 | |
125 | #ifdef WITH_STL | |
5f91c9e8 | 126 | fgStack.push_back(save); |
f79c58a5 | 127 | #endif |
128 | ||
129 | #ifdef WITH_ROOT | |
130 | fgStack.AddAt(save, fgStackSize++); | |
131 | #endif | |
5f91c9e8 | 132 | } |
fb1bf5c0 | 133 | |
134 | //_____________________________________________________________________________ | |
5f91c9e8 | 135 | void AliMpGraphContext::Pop() |
136 | { | |
fb1bf5c0 | 137 | // Pops object from the stack. |
f79c58a5 | 138 | #ifdef WITH_STL |
5f91c9e8 | 139 | // restore the last saved configuration |
140 | if (!fgStack.empty()){ | |
141 | AliMpGraphContext *obj = fgStack.back(); | |
142 | *this = *obj; | |
143 | fgStack.pop_back(); | |
144 | delete obj; | |
145 | } | |
f79c58a5 | 146 | #endif |
147 | ||
148 | #ifdef WITH_ROOT | |
149 | // restore the last saved configuration | |
150 | if ( fgStackSize ){ | |
151 | AliMpGraphContext *obj | |
152 | = (AliMpGraphContext*)fgStack.At(--fgStackSize); | |
153 | *this = *obj; | |
154 | fgStack.RemoveAt(fgStackSize); | |
155 | delete obj; | |
156 | } | |
157 | #endif | |
5f91c9e8 | 158 | } |