KaliVeda  1.13/01
Heavy-Ion Analysis Toolkit
KVSilicon.cpp
Go to the documentation of this file.
1 /***************************************************************************
2 $Id: KVSilicon.cpp,v 1.55 2009/04/15 09:49:19 ebonnet Exp $
3  kvsilicon.cpp - description
4  -------------------
5  begin : Thu May 16 2002
6  copyright : (C) 2002 by J.D. Frankland
7  email : frankland@ganil.fr
8  ***************************************************************************/
9 
10 /***************************************************************************
11  * *
12  * This program is free software; you can redistribute it and/or modify *
13  * it under the terms of the GNU General Public License as published by *
14  * the Free Software Foundation; either version 2 of the License, or *
15  * (at your option) any later version. *
16  * *
17  ***************************************************************************/
18 #include "Riostream.h"
19 #include "KVSilicon.h"
20 #include "TClass.h"
21 
23 
24 
25 
26 
28 void KVSilicon::init()
29 {
30  fSegment = 1;
31 }
32 
33 
34 
35 
42 
44 {
45  //Default ctor
46  //This ctor (which in turn calls the KVDetector default ctor) must exist in
47  //order for Cloning of detectors to work (as used in KVTelescope::AddDetector).
48  //Do not replace this ctor by giving default arguments to KVSilicon(Float_t).
49  //
50  init();
51 }
52 
53 
54 
58 
60 {
61  // constructor for silicon detector, thickness in microns
62  // Type of detector: "SI"
63  SetType("SI");
64  SetLabel("SI");//for use with KVReconNucTrajectory
65  init();
66 }
67 
68 
69 
70 
72 
73 KVSilicon::~KVSilicon()
74 {
75 }
76 
77 
78 //void KVSilicon::SetACQParams()
79 //{
80 // //Setup acquistion parameters for this Silicon.
81 // //Do not call before ChIo name has been set.
82 
83 // AddACQParamType("GG");
84 // AddACQParamType("PG");
85 // AddACQParamType("T");
86 
87 //}
88 
89 
90 
96 
98 {
99  //Calculate Pulse Height Defect in MeV for a given energy loss dE(MeV) and Z.
100  //The formula of Moulton is used (see class KVPulseHeightDefect).
101  //
102  //Returns 0 if PHD is not defined.
103 
104  AbstractMethod("GetPHD");
105  return 0;
106 }
107 
108 
109 
110 
122 
124 {
125  //Sets parameters of Moulton formula used to calculate PHD for particles
126  //stopping in this detector. The parameters are as in the following:
127  //
128  // log_10(PHD) = b(Z) + a(Z)*log_10(E)
129  //
130  // with a(Z) = a_1*(Z**2/1000) + a_2
131  // b(Z) = b_1*(100/Z) + b_2
132  // E = energy lost by particle
133  //
134  //See class KVPulseHeightDefect
135 
136  AbstractMethod("SetMoultonPHDParameters");
137 }
138 
139 
140 
141 //Short_t KVSilicon::GetCalcACQParam(KVACQParam*, Double_t) const
142 //{
143 // // Calculates & returns value of given acquisition parameter corresponding to
144 // // given calculated energy loss in the detector
145 // // Returns -1 if detector is not calibrated
146 
147 // AbstractMethod("GetCalcACQParam");
148 // return -1;
149 //}
150 
151 
152 
164 
166 {
167  // Overrides KVDetector::GetELossFunction
168  // If the pulse height deficit (PHD) has been set for this detector,
169  // we return an energy loss function which takes into account the PHD,
170  // i.e. for an incident energy E we calculate
171  //
172  // dEphd(E,Z,A) = dE(E,Z,A) - PHD(dE,Z)
173  //
174  // If no PHD is set, we return the usual KVDetector::GetELossFunction
175  // which calculates dE(E,Z,A)
176 
177  //if (fPHD && fPHD->GetStatus()) return fPHD->GetELossFunction(Z, A);
178 
179  return KVDetector::GetELossFunction(Z, A);
180 }
181 
182 
183 
185 
187 {
188 
189  AbstractMethod("DeduceACQParameters");
190 // Double_t volts = GetVoltsFromEnergy(GetEnergy());
191 // Int_t cipg = (Int_t)GetCanalPGFromVolts(volts);
192 // Int_t cigg = (Int_t)GetCanalGGFromVolts(volts);
193 // //cout << "chio: pg = " << cipg << " gg = " << cigg << endl;
194 // GetACQParam("PG")->SetData((UShort_t)TMath::Min(4095, cipg));
195 // GetACQParam("GG")->SetData((UShort_t)TMath::Min(4095, cigg));
196 // GetACQParam("T")->SetData(110);
197 }
198 
199 
200 
205 
207 {
208  // Overrides KVDetector::GetDeltaE
209  // If no PHD is set, we use the optimized KVMaterial::GetDeltaE
210 
211  //if (fPHD && fPHD->GetStatus()) return fPHD->GetELossFunction(Z, A)->Eval(Einc);
212 
213  return KVDetector::GetDeltaE(Z, A, Einc);
214 }
215 
216 
217 
218 
220 //Etalon telescope detector Si75
221 //(actually an 80 micron thick silicon detector)
222 //Type of detector: "SI75"
223 //Array naming convention: "SI75_RR" with RR=ring number
224 
225 
226 
231 {
232  //Default ctor
233  //For cloning
234 }
235 
236 
237 
241 
243 {
244  //Default ctor
245  //80 micron silicon detector with type "SI75"
246  SetType("SI75");
247  SetLabel("SI75");
248 }
249 
250 
251 
254 
255 KVSi75::~KVSi75()
256 {
257  //default dtor
258 }
259 
260 
261 
265 
267 {
268  //Redefinition of KVDetector method.
269  //Name given as SI75_xx with xx=Ring number
270 
271  fFName = Form("SI75_%02d", GetRingNumber());
272  return fFName.Data();
273 }
274 
275 
276 
278 //Etalon telescope detector Si(Li)
279 //Nominal thickness: 2mm active layer + 40um dead layer (both silicon)
280 //Type of detector: "SILI"
281 //Array naming convention: "SILI_RR" with RR=ring number
282 
283 
284 
289 {
290  //Default ctor
291  //For cloning
292 }
293 
294 
295 
300 
302 {
303  //Default ctor
304  // first layer (active) : 2mm silicon (nominal)
305  // second layer (dead) : 40um silicon (nominal)
306  AddAbsorber(new KVMaterial("Si", 40.0 * KVUnits::um));
307  SetType("SILI");
308  SetLabel("SILI");
309 }
310 
311 
312 
315 
316 KVSiLi::~KVSiLi()
317 {
318  //default dtor
319 }
320 
321 
322 
326 
328 {
329  //Redefinition of KVDetector method.
330  //Name given as SILI_xx with xx=Ring number
331 
332  fFName = Form("SILI_%02d", GetRingNumber());
333  return fFName.Data();
334 }
335 
336 
int Int_t
unsigned int UInt_t
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
char Char_t
double Double_t
float Float_t
char * Form(const char *fmt,...)
void SetLabel(const Char_t *lab)
Definition: KVBase.h:194
void AddAbsorber(KVMaterial *)
Definition: KVDetector.cpp:629
virtual TF1 * GetELossFunction(Int_t Z, Int_t A)
virtual Double_t GetDeltaE(Int_t Z, Int_t A, Double_t Einc)
TString fFName
dynamically generated full name of detector
Definition: KVDetector.h:232
Abstract base class container for multi-particle events.
Definition: KVEvent.h:66
Base class for detectors of INDRA array.
void SetType(const Char_t *t)
UInt_t GetRingNumber() const
KVMaterial()
default ctor
Definition: KVMaterial.cpp:77
Strings used to represent a set of ranges of values.
Definition: KVNumberList.h:83
80um silicon detector for INDRA etalon telescopes
Definition: KVSilicon.h:59
const Char_t * GetArrayName()
Definition: KVSilicon.cpp:266
2mm + 40um dead zone Si(Li) detector for INDRA etalon telescopes
Definition: KVSilicon.h:76
const Char_t * GetArrayName()
Definition: KVSilicon.cpp:327
Silicon detectors of the INDRA array.
Definition: KVSilicon.h:18
void init()
Definition: KVSilicon.cpp:28
Double_t GetDeltaE(Int_t Z, Int_t A, Double_t Einc)
Definition: KVSilicon.cpp:206
Double_t GetPHD(Double_t dE, UInt_t Z)
void SetACQParams();
Definition: KVSilicon.cpp:97
void SetMoultonPHDParameters(Double_t a1, Double_t a2, Double_t b1, Double_t b2)
Definition: KVSilicon.cpp:123
void DeduceACQParameters(KVEvent *, KVNumberList &)
Definition: KVSilicon.cpp:186
virtual TF1 * GetELossFunction(Int_t Z, Int_t A)
Definition: KVSilicon.cpp:165
void AbstractMethod(const char *method) const
const char * Data() const
Standard units of length, mass, volume, and pressure, and their conversion factors.
const long double um
Definition: KVUnits.h:68