1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 ///////////////////////////////////////////////////////////////////////////////
20 // Class containing constant common parameters //
22 // Request an instance with AliTRDCommonParam::Instance() //
23 // Then request the needed values //
25 ///////////////////////////////////////////////////////////////////////////////
29 #include "AliTRDCommonParam.h"
30 #include "AliTRDpadPlane.h"
33 ClassImp(AliTRDCommonParam)
35 AliTRDCommonParam* AliTRDCommonParam::fgInstance = 0;
36 Bool_t AliTRDCommonParam::fgTerminated = kFALSE;
38 //_ singleton implementation __________________________________________________
39 AliTRDCommonParam* AliTRDCommonParam::Instance()
42 // Singleton implementation
43 // Returns an instance of this class, it is created if neccessary
46 if (fgTerminated != kFALSE)
50 fgInstance = new AliTRDCommonParam();
55 void AliTRDCommonParam::Terminate()
58 // Singleton implementation
59 // Deletes the instance of this class and sets the terminated flag, instances cannot be requested anymore
60 // This function can be called several times.
72 //_____________________________________________________________________________
73 AliTRDCommonParam::AliTRDCommonParam()
89 //_____________________________________________________________________________
90 void AliTRDCommonParam::Init()
99 // The pad response function
102 // The magnetic field strength in Tesla
103 Double_t x[3] = { 0.0, 0.0, 0.0 };
105 gAlice->Field(x,b); // b[] is in kilo Gauss
106 fField = b[2] * 0.1; // Tesla
108 // ----------------------------------------------------------------------------
110 // ----------------------------------------------------------------------------
112 fPadPlaneArray = new TObjArray(kNplan * kNcham);
114 for (Int_t iplan = 0; iplan < kNplan; iplan++) {
115 for (Int_t icham = 0; icham < kNcham; icham++) {
116 Int_t ipp = iplan + icham * kNplan;
117 fPadPlaneArray->AddAt(new AliTRDpadPlane(iplan,icham),ipp);
122 //_____________________________________________________________________________
123 AliTRDCommonParam::~AliTRDCommonParam()
129 if (fPadPlaneArray) {
130 fPadPlaneArray->Delete();
131 delete fPadPlaneArray;
136 //_____________________________________________________________________________
137 AliTRDCommonParam::AliTRDCommonParam(const AliTRDCommonParam &p):TObject(p)
143 ((AliTRDCommonParam &) p).Copy(*this);
147 //_____________________________________________________________________________
148 AliTRDCommonParam &AliTRDCommonParam::operator=(const AliTRDCommonParam &p)
151 // Assignment operator
154 if (this != &p) ((AliTRDCommonParam &) p).Copy(*this);
158 //_____________________________________________________________________________
159 void AliTRDCommonParam::Copy(TObject &p) const
165 AliTRDCommonParam* target = dynamic_cast<AliTRDCommonParam*> (&p);
169 target->fExBOn = fExBOn;
170 target->fPRFOn = fPRFOn;
171 /*target->fPRFbin = fPRFbin;
172 target->fPRFlo = fPRFlo;
173 target->fPRFhi = fPRFhi;
174 target->fPRFwid = fPRFwid;
175 target->fPRFpad = fPRFpad;
176 if (target->fPRFsmp) delete [] target->fPRFsmp;
177 target->fPRFsmp = new Float_t[fPRFbin];
178 for (Int_t iBin = 0; iBin < fPRFbin; iBin++) {
179 target->fPRFsmp[iBin] = fPRFsmp[iBin];
183 //_____________________________________________________________________________
184 AliTRDpadPlane *AliTRDCommonParam::GetPadPlane(Int_t p, Int_t c) const
187 // Returns the pad plane for a given plane <p> and chamber <c> number
190 Int_t ipp = p + c * kNplan;
191 return ((AliTRDpadPlane *) fPadPlaneArray->At(ipp));
195 //_____________________________________________________________________________
196 Int_t AliTRDCommonParam::GetRowMax(Int_t p, Int_t c, Int_t /*s*/) const
199 // Returns the number of rows on the pad plane
202 return GetPadPlane(p,c)->GetNrows();
206 //_____________________________________________________________________________
207 Int_t AliTRDCommonParam::GetColMax(Int_t p) const
210 // Returns the number of rows on the pad plane
213 return GetPadPlane(p,0)->GetNcols();
217 //_____________________________________________________________________________
218 Double_t AliTRDCommonParam::GetRow0(Int_t p, Int_t c, Int_t /*s*/) const
221 // Returns the position of the border of the first pad in a row
224 return GetPadPlane(p,c)->GetRow0();
228 //_____________________________________________________________________________
229 Double_t AliTRDCommonParam::GetCol0(Int_t p) const
232 // Returns the position of the border of the first pad in a column
235 return GetPadPlane(p,0)->GetCol0();