CbmRoot
Loading...
Searching...
No Matches
CbmStsParSensorCond.cxx
Go to the documentation of this file.
1/* Copyright (C) 2014-2020 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Volker Friese [committer] */
4
10
11#include <iostream> // for operator<<, basic_ostream, stringstream
12#include <sstream> // for stringstream
13#include <string> // for char_traits
14
15#include <cmath> // for pow
16
17using std::string;
18using std::stringstream;
19
21
22 // ----- Default constructor -------------------------------------------
24{
25}
26// -------------------------------------------------------------------------
27
28
29// ----- Standard constructor ------------------------------------------
30CbmStsParSensorCond::CbmStsParSensorCond(Double_t vFd, Double_t vBias, Double_t temperature, Double_t cCoupling,
31 Double_t cInterstrip)
32 : fVfd(vFd)
33 , fVbias(vBias)
34 , fTemperature(temperature)
35 , fCcoupling(cCoupling)
36 , fCinterstrip(cInterstrip)
37{
38 Init();
39}
40// -------------------------------------------------------------------------
41
42
43// ----- Copy constructor ----------------------------------------------
45 : fVfd(other.fVfd)
46 , fVbias(other.fVbias)
47 , fTemperature(other.fTemperature)
48 , fCcoupling(other.fCcoupling)
49 , fCinterstrip(other.fCinterstrip)
50{
51 Init();
52}
53// -------------------------------------------------------------------------
54
55
56// ----- Destructor ----------------------------------------------------
58// -------------------------------------------------------------------------
59
60
61// ----- Calculate Hall mobility parameters -----------------------------
63{
64
65 // Cross-talk coefficient
66 fCrossTalkCoeff = 0.;
68
69 // These are the parameters needed for the calculation of the Hall
70 // mobility, i.e. the mobility of charge carriers in the silicon
71 // in the presence of a magnetic field. They depend on the temperature.
72 // Values and formulae are taken from
73 // V. Bartsch et al., Nucl. Instrum. Methods A 497 (2003) 389
74
75 assert(fTemperature > 0.);
76
77 // --- Electrons
78 fMuLowE = 1417. * pow(fTemperature / 300., -2.2); // cm^2 / (V s)
79 fBetaE = 1.109 * pow(fTemperature / 300., 0.66);
80 fVsatE = 1.07e7 * pow(fTemperature / 300., 0.87); // cm / s
81 fRhallE = 1.15;
82
83 // --- Holes
84 fMuLowH = 470.5 * pow(fTemperature / 300., -2.5); // cm^2 / (V s)
85 fBetaH = 1.213 * pow(fTemperature / 300., 0.17);
86 fVsatH = 0.837e7 * pow(fTemperature / 300., 0.52); // cm / s
87 fRhallH = 0.7;
88
89 fIsInit = kTRUE;
90}
91// -------------------------------------------------------------------------
92
93
94// ----- Hall mobility -------------------------------------------------
95Double_t CbmStsParSensorCond::GetHallMobility(Double_t eField, Int_t chargeType) const
96{
97
98 assert(fIsInit);
99 assert(chargeType == 0 || chargeType == 1);
100
101 Double_t muLow = 0.; // mobility at low electric field
102 Double_t beta = 0.; // exponent
103 Double_t vSat = 0.; // saturation velocity
104 Double_t rHall = 0.; // Hall scattering factor
105
106 if (chargeType == 0) { // electrons
107 muLow = fMuLowE;
108 beta = fBetaE;
109 vSat = fVsatE;
110 rHall = fRhallE;
111 } //? electron
112 else { // holes
113 muLow = fMuLowH;
114 beta = fBetaH;
115 vSat = fVsatH;
116 rHall = fRhallH;
117 } //? holes
118
119 Double_t factor = pow(muLow * eField / vSat, beta);
120 Double_t muHall = rHall * muLow / pow(1 + factor, 1. / beta);
121 return muHall;
122}
123// -------------------------------------------------------------------------
124
125
126// ----- Copy assignment operator --------------------------------------
128{
129 fVfd = other.fVfd;
131 fCcoupling = other.fCcoupling;
133 Init();
134 return *this;
135}
136// -------------------------------------------------------------------------
137
138
139// ----- Set condition parameters --------------------------------------
140void CbmStsParSensorCond::SetParams(Double_t vFd, Double_t vBias, Double_t temperature, Double_t cCoupling,
141 Double_t cInterstrip)
142{
143 fVfd = vFd;
144 fVbias = vBias;
145 fTemperature = temperature;
146 fCcoupling = cCoupling;
147 fCinterstrip = cInterstrip;
148 Init();
149}
150// -------------------------------------------------------------------------
151
152
153// ----- String output -------------------------------------------------
155{
156 stringstream ss;
157 if (fIsInit) {
158 ss << "VFD " << fVfd << " V | V(bias) " << fVbias << " V | T " << fTemperature << " K | C(coupl.) " << fCcoupling
159 << " pF | C(int.) " << fCinterstrip << " pF | cross-talk coeff. " << fCrossTalkCoeff;
160 }
161 else {
162 ss << "VFD " << fVfd << " V | V(bias) " << fVbias << " V | T " << fTemperature << " K | C(coupl.) " << fCcoupling
163 << " pF | C(int.) " << fCinterstrip << " pF | not initialised!";
164 }
165 return ss.str();
166}
167// -------------------------------------------------------------------------
ClassImp(CbmStsParSensorCond) CbmStsParSensorCond
Parameters for operating conditions of a STS sensor.
CbmStsParSensorCond()
Default constructor.
Double_t fVbias
Bias voltage [V].
Double_t GetHallMobility(Double_t eField, Int_t chargeType) const
Hall mobility.
std::string ToString() const
String output.
void SetParams(Double_t vFd, Double_t vBias, Double_t temperature, Double_t cCoupling, Double_t cInterstrip)
Set the condition parameters.
Double_t fCcoupling
Coupling capacitance [pF].
Double_t fTemperature
Temperature [K].
Double_t fCinterstrip
Inter-strip capacitance [pF].
Double_t fMuLowE
Cross-talk coefficient.
CbmStsParSensorCond & operator=(const CbmStsParSensorCond &)
Copy assignment operator.
Double_t fVfd
Full depletion voltage [V].
void Init()
Calculate the derived parameters.