]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDCommonParam.cxx
Removing AliMpSegFactory -> using AliMpSegmentation instead
[u/mrichter/AliRoot.git] / TRD / AliTRDCommonParam.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 ///////////////////////////////////////////////////////////////////////////////
19 //                                                                           //
20 // Class containing constant common parameters                               //
21 //                                                                           //
22 // Request an instance with AliTRDCommonParam::Instance()                    //
23 // Then request the needed values                                            //
24 //                                                                           //
25 ///////////////////////////////////////////////////////////////////////////////
26
27 #include <TObjArray.h>
28
29 #include "AliTracker.h"
30
31 #include "AliTRDCommonParam.h"
32 #include "AliTRDpadPlane.h"
33
34 ClassImp(AliTRDCommonParam)
35
36 AliTRDCommonParam *AliTRDCommonParam::fgInstance = 0;
37 Bool_t AliTRDCommonParam::fgTerminated = kFALSE;
38
39 //_ singleton implementation __________________________________________________
40 AliTRDCommonParam* AliTRDCommonParam::Instance()
41 {
42   //
43   // Singleton implementation
44   // Returns an instance of this class, it is created if neccessary
45   // 
46   
47   if (fgTerminated != kFALSE) {
48     return 0;
49   }
50
51   if (fgInstance == 0) {
52     fgInstance = new AliTRDCommonParam();
53   }  
54
55   return fgInstance;
56
57 }
58
59 //_____________________________________________________________________________
60 void AliTRDCommonParam::Terminate()
61 {
62   //
63   // Singleton implementation
64   // Deletes the instance of this class and sets the terminated flag, instances cannot be requested anymore
65   // This function can be called several times.
66   //
67   
68   fgTerminated = kTRUE;
69   
70   if (fgInstance != 0) {
71     delete fgInstance;
72     fgInstance = 0;
73   }
74
75 }
76
77 //_____________________________________________________________________________
78 AliTRDCommonParam::AliTRDCommonParam()
79   :TObject()
80   ,fField(0)
81   ,fExBOn(kFALSE)
82   ,fPadPlaneArray(0)
83 {
84   //
85   // Default constructor
86   //
87   
88   Init();
89
90 }
91
92 //_____________________________________________________________________________
93 void AliTRDCommonParam::Init()
94 {
95   //
96   // Initialization
97   //
98   
99   // E x B effects
100   fExBOn          = kTRUE;
101
102   // The magnetic field strength in Tesla
103   fField          = AliTracker::GetBz() * 0.1; 
104   
105   // ----------------------------------------------------------------------------
106   // The pad planes
107   // ----------------------------------------------------------------------------
108   
109   fPadPlaneArray = new TObjArray(kNplan * kNcham);
110   
111   for (Int_t iplan = 0; iplan < kNplan; iplan++) {
112     for (Int_t icham = 0; icham < kNcham; icham++) {
113       Int_t ipp = iplan + icham * kNplan;
114       fPadPlaneArray->AddAt(new AliTRDpadPlane(iplan,icham),ipp);
115     }
116   }
117
118 }
119
120 //_____________________________________________________________________________
121 AliTRDCommonParam::~AliTRDCommonParam() 
122 {
123   //
124   // Destructor
125   //
126   
127   if (fPadPlaneArray) {
128     fPadPlaneArray->Delete();
129     delete fPadPlaneArray;
130     fPadPlaneArray = 0;
131   }
132
133 }
134
135 //_____________________________________________________________________________
136 AliTRDCommonParam::AliTRDCommonParam(const AliTRDCommonParam &p)
137   :TObject(p)
138   ,fField(p.fField)
139   ,fExBOn(p.fExBOn)
140   ,fPadPlaneArray(0)
141 {
142   //
143   // Copy constructor
144   //
145
146 }
147
148 //_____________________________________________________________________________
149 AliTRDCommonParam &AliTRDCommonParam::operator=(const AliTRDCommonParam &p)
150 {
151   //
152   // Assignment operator
153   //
154
155   if (this != &p) {
156     ((AliTRDCommonParam &) p).Copy(*this);
157   }
158
159   return *this;
160
161 }
162
163 //_____________________________________________________________________________
164 void AliTRDCommonParam::Copy(TObject &p) const
165 {
166   //
167   // Copy function
168   //
169   
170   AliTRDCommonParam *target = dynamic_cast<AliTRDCommonParam*> (&p);
171   if (!target) {
172     return;
173   }  
174
175   target->fExBOn = fExBOn;
176   target->fField = fField;
177
178 }
179
180 //_____________________________________________________________________________
181 AliTRDpadPlane *AliTRDCommonParam::GetPadPlane(Int_t p, Int_t c) const
182 {
183   //
184   // Returns the pad plane for a given plane <p> and chamber <c> number
185   //
186
187   Int_t ipp = p + c * kNplan;
188   return ((AliTRDpadPlane *) fPadPlaneArray->At(ipp));
189
190 }
191
192 //_____________________________________________________________________________
193 Int_t AliTRDCommonParam::GetRowMax(Int_t p, Int_t c, Int_t /*s*/) const
194 {
195   //
196   // Returns the number of rows on the pad plane
197   //
198
199   return GetPadPlane(p,c)->GetNrows();
200
201 }
202
203 //_____________________________________________________________________________
204 Int_t AliTRDCommonParam::GetColMax(Int_t p) const
205 {
206   //
207   // Returns the number of rows on the pad plane
208   //
209
210   return GetPadPlane(p,0)->GetNcols();
211
212 }
213
214 //_____________________________________________________________________________
215 Double_t AliTRDCommonParam::GetRow0(Int_t p, Int_t c, Int_t /*s*/) const
216 {
217   //
218   // Returns the position of the border of the first pad in a row
219   //
220
221   return GetPadPlane(p,c)->GetRow0();
222
223 }
224
225 //_____________________________________________________________________________
226 Double_t AliTRDCommonParam::GetCol0(Int_t p) const
227 {
228   //
229   // Returns the position of the border of the first pad in a column
230   //
231
232   return GetPadPlane(p,0)->GetCol0();
233
234 }