KaliVeda  1.12/06
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 
82 
84 {
85  //Setup acquistion parameters for this Silicon.
86  //Do not call before ChIo name has been set.
87 
88  AddACQParamType("GG");
89  AddACQParamType("PG");
90  AddACQParamType("T");
91 
92 }
93 
94 
95 
96 
102 
104 {
105  //Calculate Pulse Height Defect in MeV for a given energy loss dE(MeV) and Z.
106  //The formula of Moulton is used (see class KVPulseHeightDefect).
107  //
108  //Returns 0 if PHD is not defined.
109 
110  AbstractMethod("GetPHD");
111  return 0;
112 }
113 
114 
115 
116 
128 
130 {
131  //Sets parameters of Moulton formula used to calculate PHD for particles
132  //stopping in this detector. The parameters are as in the following:
133  //
134  // log_10(PHD) = b(Z) + a(Z)*log_10(E)
135  //
136  // with a(Z) = a_1*(Z**2/1000) + a_2
137  // b(Z) = b_1*(100/Z) + b_2
138  // E = energy lost by particle
139  //
140  //See class KVPulseHeightDefect
141 
142  AbstractMethod("SetMoultonPHDParameters");
143 }
144 
145 
146 
147 
152 
154 {
155  // Calculates & returns value of given acquisition parameter corresponding to
156  // given calculated energy loss in the detector
157  // Returns -1 if detector is not calibrated
158 
159  AbstractMethod("GetCalcACQParam");
160  return -1;
161 }
162 
163 
164 
165 
177 
179 {
180  // Overrides KVDetector::GetELossFunction
181  // If the pulse height deficit (PHD) has been set for this detector,
182  // we return an energy loss function which takes into account the PHD,
183  // i.e. for an incident energy E we calculate
184  //
185  // dEphd(E,Z,A) = dE(E,Z,A) - PHD(dE,Z)
186  //
187  // If no PHD is set, we return the usual KVDetector::GetELossFunction
188  // which calculates dE(E,Z,A)
189 
190  //if (fPHD && fPHD->GetStatus()) return fPHD->GetELossFunction(Z, A);
191 
192  return KVDetector::GetELossFunction(Z, A);
193 }
194 
195 
196 
198 
200 {
201 
202  AbstractMethod("DeduceACQParameters");
203 // Double_t volts = GetVoltsFromEnergy(GetEnergy());
204 // Int_t cipg = (Int_t)GetCanalPGFromVolts(volts);
205 // Int_t cigg = (Int_t)GetCanalGGFromVolts(volts);
206 // //cout << "chio: pg = " << cipg << " gg = " << cigg << endl;
207 // GetACQParam("PG")->SetData((UShort_t)TMath::Min(4095, cipg));
208 // GetACQParam("GG")->SetData((UShort_t)TMath::Min(4095, cigg));
209 // GetACQParam("T")->SetData(110);
210 }
211 
212 
213 
218 
220 {
221  // Overrides KVDetector::GetDeltaE
222  // If no PHD is set, we use the optimized KVMaterial::GetDeltaE
223 
224  //if (fPHD && fPHD->GetStatus()) return fPHD->GetELossFunction(Z, A)->Eval(Einc);
225 
226  return KVDetector::GetDeltaE(Z, A, Einc);
227 }
228 
229 
230 
231 
233 //Etalon telescope detector Si75
234 //(actually an 80 micron thick silicon detector)
235 //Type of detector: "SI75"
236 //Array naming convention: "SI75_RR" with RR=ring number
237 
238 
239 
244 {
245  //Default ctor
246  //For cloning
247 }
248 
249 
250 
254 
256 {
257  //Default ctor
258  //80 micron silicon detector with type "SI75"
259  SetType("SI75");
260  SetLabel("SI75");
261 }
262 
263 
264 
267 
268 KVSi75::~KVSi75()
269 {
270  //default dtor
271 }
272 
273 
274 
278 
280 {
281  //Redefinition of KVDetector method.
282  //Name given as SI75_xx with xx=Ring number
283 
284  fFName = Form("SI75_%02d", GetRingNumber());
285  return fFName.Data();
286 }
287 
288 
289 
291 //Etalon telescope detector Si(Li)
292 //Nominal thickness: 2mm active layer + 40um dead layer (both silicon)
293 //Type of detector: "SILI"
294 //Array naming convention: "SILI_RR" with RR=ring number
295 
296 
297 
302 {
303  //Default ctor
304  //For cloning
305 }
306 
307 
308 
313 
315 {
316  //Default ctor
317  // first layer (active) : 2mm silicon (nominal)
318  // second layer (dead) : 40um silicon (nominal)
319  AddAbsorber(new KVMaterial("Si", 40.0 * KVUnits::um));
320  SetType("SILI");
321  SetLabel("SILI");
322 }
323 
324 
325 
328 
329 KVSiLi::~KVSiLi()
330 {
331  //default dtor
332 }
333 
334 
335 
339 
341 {
342  //Redefinition of KVDetector method.
343  //Name given as SILI_xx with xx=Ring number
344 
345  fFName = Form("SILI_%02d", GetRingNumber());
346  return fFName.Data();
347 }
348 
349 
int Int_t
unsigned int UInt_t
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
char Char_t
short Short_t
double Double_t
float Float_t
char * Form(const char *fmt,...)
GANIL VXI/VME acquisition parameter.
Definition: KVACQParam.h:15
void SetLabel(const Char_t *lab)
Definition: KVBase.h:188
void AddAbsorber(KVMaterial *)
Definition: KVDetector.cpp:753
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:196
Base class container for multi-particle events.
Definition: KVEvent.h:176
Base class for detectors of INDRA array.
void SetType(const Char_t *t)
void AddACQParamType(const Char_t *type)
UInt_t GetRingNumber() const
KVMaterial()
default ctor
Definition: KVMaterial.cpp:70
Strings used to represent a set of ranges of values.
Definition: KVNumberList.h:83
80um silicon detector for INDRA etalon telescopes
Definition: KVSilicon.h:60
const Char_t * GetArrayName()
Definition: KVSilicon.cpp:279
2mm + 40um dead zone Si(Li) detector for INDRA etalon telescopes
Definition: KVSilicon.h:77
const Char_t * GetArrayName()
Definition: KVSilicon.cpp:340
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:219
void SetACQParams()
Definition: KVSilicon.cpp:83
Double_t GetPHD(Double_t dE, UInt_t Z)
Definition: KVSilicon.cpp:103
virtual Short_t GetCalcACQParam(KVACQParam *, Double_t) const
Definition: KVSilicon.cpp:153
void SetMoultonPHDParameters(Double_t a1, Double_t a2, Double_t b1, Double_t b2)
Definition: KVSilicon.cpp:129
void DeduceACQParameters(KVEvent *, KVNumberList &)
Definition: KVSilicon.cpp:199
virtual TF1 * GetELossFunction(Int_t Z, Int_t A)
Definition: KVSilicon.cpp:178
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