ATLAS Offline Software
Loading...
Searching...
No Matches
SCT_DetailedSurfaceChargesGenerator Class Reference

Class to take calculate Charge Transport in the SCT with a detailed charge transport model. More...

#include <SCT_DetailedSurfaceChargesGenerator.h>

Inheritance diagram for SCT_DetailedSurfaceChargesGenerator:
Collaboration diagram for SCT_DetailedSurfaceChargesGenerator:

Public Member Functions

 SCT_DetailedSurfaceChargesGenerator (const std::string &type, const std::string &name, const IInterface *parent)
 constructor
virtual ~SCT_DetailedSurfaceChargesGenerator ()=default
 Destructor.
virtual StatusCode initialize () override
 AlgTool initialize.
virtual StatusCode finalize () override
 AlgTool finalize.

Private Types

enum  ChargeDriftMode { defaultSCTModel =0 , ehTransport =1 , fixedChargeMap =2 }
enum  EFieldModel { uniformEFieldModel =0 , flatDiodeModel =1 , FEMsolution =2 }

Private Member Functions

virtual void setFixedTime (float fixedTime) override
virtual void process (const InDetDD::SiDetectorElement *element, const TimedHitPtr< SiHit > &phit, ISiSurfaceChargesInserter &inserter, CLHEP::HepRandomEngine *rndmEngine, const EventContext &ctx) override
 create a list of surface charges from a hit
void processSiHit (const InDetDD::SiDetectorElement *element, const SiHit &phit, ISiSurfaceChargesInserter &inserter, const float eventTime, const unsigned short eventID, CLHEP::HepRandomEngine *rndmEngine, const EventContext &ctx)
float DriftTime (float zhit, const InDetDD::SiDetectorElement *element, const EventContext &ctx) const
 calculate drift time perpandicular to the surface for a charge at distance zhit from mid gap
float DiffusionSigma (float zhit, const InDetDD::SiDetectorElement *element, const EventContext &ctx) const
 calculate diffusion sigma from a gaussian dist scattered charge
float SurfaceDriftTime (float ysurf) const
 Calculate of the surface drift time.
float MaxDriftTime (const InDetDD::SiDetectorElement *element, const EventContext &ctx) const
 max drift charge equivalent to the detector thickness
float MaxDiffusionSigma (const InDetDD::SiDetectorElement *element, const EventContext &ctx) const
 max sigma diffusion
void initTransportModel ()
void init_mud_e (double T)
void init_mud_h (double T)
void initExEyArray ()
void initPotentialValue ()
void EField (double x, double y, double &Ex, double &Ey) const
double induced (int istrip, double x, double y) const
bool electron (double x_e, double y_e, double &vx_e, double &vy_e, double &D_e) const
bool hole (double x_h, double y_h, double &vx_h, double &vy_h, double &D_h)
double mud_e (double E) const
double mud_h (double E) const
void holeTransport (double &x0, double &y0, double *Q_m2, double *Q_m1, double *Q_00, double *Q_p1, double *Q_p2, CLHEP::HepRandomEngine *rndmEngine)
void electronTransport (double &x0, double &y0, double *Q_m2, double *Q_m1, double *Q_00, double *Q_p1, double *Q_p2, CLHEP::HepRandomEngine *rndmEngine) const
double inducedCharge (int &istrip, double &x, double &y, double &t) const

Static Private Member Functions

static double ExValue150 (int ix, int iy)
static double EyValue150 (int ix, int iy)
static double GetPotentialValue (int ix, int iy)

Private Attributes

IntegerProperty m_numberOfCharges {this, "NumberOfCharges", 1}
 number of charges
FloatProperty m_smallStepLength {this, "SmallStepLength", 5.}
 max internal step along the larger G4 step
FloatProperty m_tSurfaceDrift {this, "SurfaceDriftTime", 10., "max surface drift time"}
 related to the surface drift
FloatProperty m_tfix {this, "FixedTime", -999., "ixed time"}
FloatProperty m_tsubtract {this, "SubtractTime", -999., "subtract drift time from mid gap"}
BooleanProperty m_doHistoTrap {this, "doHistoTrap", false, "Allow filling of histos for charge trapping effect"}
BooleanProperty m_doTrapping {this, "doTrapping", false, "Simulation of charge trapping effect"}
DoubleProperty m_Fluence {this, "Fluence", 0., "Fluence for charge trapping effect"}
IntegerProperty m_chargeDriftModel {this, "ChargeDriftModel", ehTransport, "use enum ChargeDriftMode"}
IntegerProperty m_eFieldModel {this, "EFieldModel", FEMsolution, "use enum EFieldModel"}
DoubleProperty m_depletionVoltage {this, "DepletionVoltage", 70.}
DoubleProperty m_biasVoltage {this, "BiasVoltage", 150.}
DoubleProperty m_magneticField {this, "MagneticField", -2.0}
DoubleProperty m_sensorTemperature {this, "SensorTemperature", 0.+CLHEP::STP_Temperature}
DoubleProperty m_transportTimeStep {this, "TransportTimeStep", 0.25}
DoubleProperty m_transportTimeMax {this, "TransportTimeMax", 25.0}
BooleanProperty m_isOverlay {this, "isOverlay", false, "flag for overlay"}
ToolHandle< ISiPropertiesToolm_siPropertiesTool {this, "SiPropertiesTool", "SCT_SiPropertiesTool", "Tool to retrieve SCT silicon properties"}
ToolHandle< ISiliconConditionsToolm_siConditionsTool {this, "SiConditionsTool", "SCT_SiliconConditionsTool", "Tool to retrieve SCT silicon information"}
ToolHandle< ISiLorentzAngleToolm_lorentzAngleTool {this, "LorentzAngleTool", "SiLorentzAngleTool/SCTLorentzAngleTool", "Tool to retreive Lorentz angle"}
ServiceHandle< ITHistSvc > m_thistSvc {this, "THistSvc", "THistSvc"}
float m_tHalfwayDrift {0.}
 Surface drift time.
float m_distInterStrip {1.0}
 Inter strip distance normalized to 1.
float m_distHalfInterStrip {0.}
 Half way distance inter strip.
bool m_SurfaceDriftFlag {false}
 surface drift ON/OFF
double m_bulk_depth {0.0285}
double m_strip_pitch {0.0080}
double m_depletion_depth {0.0285}
double m_y_origin_min {0.0}
double m_kB {1.38E-23}
double m_e {1.602E-19}
double m_vs_e {11615084.7393}
double m_Ec_e {6034.20429}
double m_vs_h {8761659.83530}
double m_Ec_h {15366.52650}
double m_beta_e {}
double m_beta_h {}
double m_driftMobility {}
double m_PotentialValue [81][115] {{0.}}
double m_ExValue150 [17][115] {{0.}}
double m_EyValue150 [17][115] {{0.}}
int m_stripCharge_iymax {285-1}
double m_stripCharge_dx {1.}
double m_stripCharge_dy {1.}
TProfile * m_h_efieldz {nullptr}
TProfile2D * m_h_yzRamo {nullptr}
TProfile2D * m_h_yzEfield {nullptr}
TProfile2D * m_h_yEfield {nullptr}
TProfile2D * m_h_zEfield {nullptr}

Detailed Description

Class to take calculate Charge Transport in the SCT with a detailed charge transport model.

It's not clear (29 April 2016) that the code has ever been used successfully; prior to this edit certain key parameters were uninitialised and yet used.

Definition at line 59 of file SCT_DetailedSurfaceChargesGenerator.h.

Member Enumeration Documentation

◆ ChargeDriftMode

◆ EFieldModel

Constructor & Destructor Documentation

◆ SCT_DetailedSurfaceChargesGenerator()

SCT_DetailedSurfaceChargesGenerator::SCT_DetailedSurfaceChargesGenerator ( const std::string & type,
const std::string & name,
const IInterface * parent )

constructor

Definition at line 35 of file SCT_DetailedSurfaceChargesGenerator.cxx.

36 : base_class(type, name, parent)
37 {
38}

◆ ~SCT_DetailedSurfaceChargesGenerator()

virtual SCT_DetailedSurfaceChargesGenerator::~SCT_DetailedSurfaceChargesGenerator ( )
virtualdefault

Destructor.

Member Function Documentation

◆ DiffusionSigma()

float SCT_DetailedSurfaceChargesGenerator::DiffusionSigma ( float zhit,
const InDetDD::SiDetectorElement * element,
const EventContext & ctx ) const
private

calculate diffusion sigma from a gaussian dist scattered charge

Definition at line 185 of file SCT_DetailedSurfaceChargesGenerator.cxx.

185 {
186 const IdentifierHash hashId{element->identifyHash()};
187 const float t{this->DriftTime(zhit, element, ctx)}; // in ns
188 if (t>0.0) {
189 const float diffusionSigma{static_cast<float>(sqrt(2.*m_siPropertiesTool->getSiProperties(hashId, ctx).holeDiffusionConstant()*t))}; // in mm
190 return diffusionSigma;
191 }
192 return 0.0;
193}
virtual IdentifierHash identifyHash() const override final
identifier hash (inline)
float DriftTime(float zhit, const InDetDD::SiDetectorElement *element, const EventContext &ctx) const
calculate drift time perpandicular to the surface for a charge at distance zhit from mid gap

◆ DriftTime()

float SCT_DetailedSurfaceChargesGenerator::DriftTime ( float zhit,
const InDetDD::SiDetectorElement * element,
const EventContext & ctx ) const
private

calculate drift time perpandicular to the surface for a charge at distance zhit from mid gap

Definition at line 153 of file SCT_DetailedSurfaceChargesGenerator.cxx.

153 {
154 const double sensorThickness{element->thickness()};
155 if ((zhit<0.0) or (zhit>sensorThickness)) {
156 ATH_MSG_DEBUG("DriftTime: hit coordinate zhit=" << zhit/CLHEP::micrometer << " out of range");
157 return -2.0;
158 }
159 const IdentifierHash hashId{element->identifyHash()};
160
161 const double vdepl{m_siConditionsTool->depletionVoltage(hashId, ctx) * CLHEP::volt};
162 const double vbias{m_siConditionsTool->biasVoltage(hashId, ctx) * CLHEP::volt};
163 const double denominator{vdepl+vbias-(2.0*zhit*vdepl/sensorThickness)};
164 if (denominator<=0.0) {
165 if (vbias>=vdepl) { //Should not happen
166 if (not m_isOverlay) {
167 ATH_MSG_ERROR("DriftTime: negative argument X for log(X) " << zhit);
168 }
169 return -1.0;
170 } else {
171 // (vbias<vdepl) can happen with underdepleted sensors, lose charges in that volume
172 // ATH_MSG_DEBUG("DriftTime: ->infinity since vdepl>vbias, zhit: " << zhit );
173 return -10.0;
174 }
175 }
176
177 float driftTime{static_cast<float>(log((vdepl+vbias)/denominator))};
178 driftTime *= sensorThickness*sensorThickness/(2.0*m_siPropertiesTool->getSiProperties(hashId, ctx).holeDriftMobility()*vdepl);
179 return driftTime;
180}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
ToolHandle< ISiliconConditionsTool > m_siConditionsTool
@ driftTime
Definition HitInfo.h:43

◆ EField()

void SCT_DetailedSurfaceChargesGenerator::EField ( double x,
double y,
double & Ex,
double & Ey ) const
private

Definition at line 699 of file SCT_DetailedSurfaceChargesGenerator.cxx.

699 {
700 // m_eFieldModel == uniformEFieldModel; uniform E-field model
701 // m_eFieldModel == flatDiodeModel; flat diode model
702 // m_eFieldModel == FEMsolution; FEM solutions
703 // x == 0.0040 [cm] : at the center of strip
704 // x must be within 0 and 0.008 [cm]
705
706 static const double deltay{0.00025}, deltax{0.00025}; // [cm]
707
708 Ex = 0.;
709 Ey = 0.;
710 if (y < 0. or y > m_bulk_depth) return;
711
712 //---------- case for uniform electric field ------------------------
715 return;
716 }
717
718 //---------- case for flat diode model ------------------------------
722 } else {
725 }
726 return;
727 }
728
729 //---------- case for FEM analysis solution -------------------------
731 int iy{static_cast<int>(y/deltay)};
732 double fy{(y-iy*deltay) / deltay};
733 double xhalfpitch{m_strip_pitch/2.};
734 double x999{999.*m_strip_pitch};
735 double xx{fmod (x+x999, m_strip_pitch)};
736 double xxx{xx};
737 if (xx > xhalfpitch) xxx = m_strip_pitch - xx;
738 int ix{static_cast<int>(xxx/deltax)};
739 double fx{(xxx - ix*deltax) / deltax};
740#ifdef SCT_DIG_DEBUG
741 ATH_MSG_DEBUG("x,y,ix,iy,fx,fy,xx,xxx= " << x << " " << y << " " << ix << " " << iy << " " << fx << " " << fy << " " << xx << " " << xxx);
742#endif
743 int ix1{ix+1};
744 int iy1{iy+1};
745 double Ex00{0.}, Ex10{0.}, Ex01{0.}, Ex11{0.};
746 double Ey00{0.}, Ey10{0.}, Ey01{0.}, Ey11{0.};
747 //-------- pick up appropriate data file for m_biasVoltage-----------------------
748 int iVB{static_cast<int>(m_biasVoltage)};
749 switch (iVB) {
750 case 150:
751 Ex00 = m_ExValue150[ix][iy]; Ex10 = m_ExValue150[ix1][iy];
752 Ex01 = m_ExValue150[ix][iy1]; Ex11 = m_ExValue150[ix1][iy1];
753 Ey00 = m_EyValue150[ix][iy]; Ey10 = m_EyValue150[ix1][iy];
754 Ey01 = m_EyValue150[ix][iy1]; Ey11 = m_EyValue150[ix1][iy1];
755 break;
756 default:
757 ATH_MSG_WARNING("Only +150 V bias voltage case is available. However, " << iVB << " V bias voltage is used. Electoric field is not extracted!!!");
758 break;
759 }
760 //---------------- end of data bank search---
761 Ex = Ex00*(1.-fx)*(1.-fy) + Ex10*fx*(1.-fy) + Ex01*(1.-fx)*fy + Ex11*fx*fy;
762#ifdef SCT_DIG_DEBUG
763 ATH_MSG_DEBUG("xx, xhalfpitch = " << xx << " " << xhalfpitch);
764#endif
765 if (xx > xhalfpitch) Ex = -Ex;
766 Ey = Ey00*(1.-fx)*(1.-fy) + Ey10*fx*(1.-fy) + Ey01*(1.-fx)*fy + Ey11*fx*fy;
767 return;
768 }
769 }
#define ATH_MSG_WARNING(x)
#define y
#define x

◆ electron()

bool SCT_DetailedSurfaceChargesGenerator::electron ( double x_e,
double y_e,
double & vx_e,
double & vy_e,
double & D_e ) const
private

Definition at line 613 of file SCT_DetailedSurfaceChargesGenerator.cxx.

613 {
614 double Ex, Ey;
615 EField(x_e, y_e, Ex, Ey); // [V/cm]
616 if (Ey > 0.) {
617 const double REx{-Ex}; // because electron has negative charge
618 const double REy{-Ey}; // because electron has negative charge
619 const double E{sqrt(Ex*Ex+Ey*Ey)};
620 const double mu_e{mud_e(E)};
621 const double v_e{mu_e * E};
622 const double r_e{1.13+0.0008*(m_sensorTemperature-CLHEP::STP_Temperature)};
623 const double tanLA_e{r_e * mu_e * (-m_magneticField) * 1.E-4}; // because e has negative charge
624 const double secLA{sqrt(1.+tanLA_e*tanLA_e)};
625 const double cosLA{1./secLA};
626 const double sinLA{tanLA_e / secLA};
627 vy_e = v_e * (REy*cosLA - REx*sinLA)/E;
628 vx_e = v_e * (REx*cosLA + REy*sinLA)/E;
629 D_e = m_kB * m_sensorTemperature * mu_e / m_e;
630 return true;
631 } else {
632 return false;
633 }
634}
const std::string r_e
void EField(double x, double y, double &Ex, double &Ey) const

◆ electronTransport()

void SCT_DetailedSurfaceChargesGenerator::electronTransport ( double & x0,
double & y0,
double * Q_m2,
double * Q_m1,
double * Q_00,
double * Q_p1,
double * Q_p2,
CLHEP::HepRandomEngine * rndmEngine ) const
private

Definition at line 884 of file SCT_DetailedSurfaceChargesGenerator.cxx.

884 {
885 // transport electrons in the bulk
886 // T. Kondo, 2010.9.10
887 // External parameters to be specified
888 // m_transportTimeMax [nsec]
889 // m_transportTimeStep [nsec]
890 // m_y_origin_min [cm] 0 except under-depleted cases
891 // Induced currents are added to
892 // Q_m2[50],Q_m1[50],Q_00[50],Q_p1[50],Q_p2[50]
893
894 double x{x0}; // original electron position [cm]
895 double y{y0}; // original electron position [cm]
896 bool isInBulk{true};
897 double t_current{0.};
898 double qstrip[5];
899 double vx, vy, D;
900
901 // -- Charge Trapping -- //
902 static const double betaElectrons{3.1E-16};
903 const double trappingElectrons{1./(m_Fluence*betaElectrons)};
904 const double u{CLHEP::RandFlat::shoot(0., 1.)};
905 const double drift_time{-TMath::Log(u)*trappingElectrons};
906
907 for (int istrip{-2}; istrip<=2; istrip++) {
908 qstrip[istrip+2] = -induced(istrip, x, y);
909 }
910
911 // note 0.004[cm] is to shift from Richard's to Taka's coordinates
912 while (t_current < m_transportTimeMax) {
913 if (not isInBulk) break;
914 if (not electron(x, y, vx, vy, D)) break;
915 double delta_y{vy * m_transportTimeStep *1.E-9};
916 y += delta_y;
917 double dt{m_transportTimeStep}; // [nsec]
918 if (y < m_y_origin_min) {
919 isInBulk = false;
920 dt = (m_y_origin_min - (y-delta_y))/delta_y * m_transportTimeStep;
922 }
923 t_current += dt;
924
925 // -- Charge Trapping -- //
926 if (m_doTrapping) {
927 if (drift_time < t_current) break;
928 }
929
930 x += vx * dt *1.E-9;
931 double diffusion{sqrt(2.* D * dt*1.E-9)};
932 y += diffusion * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
933 x += diffusion * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
934 if (y < m_y_origin_min) {
936 isInBulk = false;
937 }
938 // get induced current by subtracting induced charges
939 for (int istrip{-2}; istrip<=2; istrip++) {
940 double qnew{-induced(istrip, x, y)};
941 int jj{istrip + 2};
942 double dq{qnew - qstrip[jj]};
943 qstrip[jj] = qnew;
944#ifdef SCT_DIG_DEBUG
945 if (istrip==0) ATH_MSG_DEBUG("e:t,x,y=" << t_current << " " << x*1e4 << " " << y*1e4 << " dq[0]=" << dq);
946#endif
947 int jt{static_cast<int>((t_current + 0.001) / 0.50)};
948 if (jt<50) {
949 switch (istrip) {
950 case -2: Q_m2[jt] += dq; break;
951 case -1: Q_m1[jt] += dq; break;
952 case 0: Q_00[jt] += dq; break;
953 case +1: Q_p1[jt] += dq; break;
954 case +2: Q_p2[jt] += dq; break;
955 // default: break; // logically dead code
956 }
957 }
958 }
959 } // end of hole tracing
960#ifdef SCT_DIG_DEBUG
961 ATH_MSG_DEBUG("elecTransport : x,y=(" << x0*1.e4 << "," << y0*1.e4 << ")->(" << x*1.e4 << "," << y*1.e4 << ") t=" << t_current);
962#endif
963
964 }
bool electron(double x_e, double y_e, double &vx_e, double &vy_e, double &D_e) const
double induced(int istrip, double x, double y) const
@ u
Enums for curvilinear frames.
Definition ParamDefs.h:77

◆ ExValue150()

double SCT_DetailedSurfaceChargesGenerator::ExValue150 ( int ix,
int iy )
staticprivate

Definition at line 442 of file GetExEy_150V.cxx.

442 {
443// ExArray for VD=70V(rho=0.1540[C/m**3]), VB=150V
444static const double ExArray[17][115] = {
445{
446 -2.04, -1.58, -2.92, -3.26, -3.61,
447 -2.99, -2.63, -3.06, -3.50, -3.28,
448 -2.90, -3.35, -3.80, -3.21, -2.75,
449 -3.26, -3.66, -3.11, -2.78, -3.23,
450 -3.69, -3.33, -2.90, -3.31, -3.74,
451 -3.24, -2.70, -3.13, -3.57, -3.28,
452 -2.85, -3.27, -3.70, -3.28, -2.85,
453 -3.28, -3.71, -3.27, -2.84, -3.27,
454 -3.70, -3.12, -2.68, -3.12, -3.55,
455 -3.40, -3.01, -3.46, -3.94, -3.40,
456 -2.95, -3.44, -3.82, -3.38, -2.86,
457 -3.30, -3.73, -3.26, -2.86, -3.29,
458 -3.71, -3.28, -2.85, -3.27, -3.69,
459 -3.29, -2.82, -3.25, -3.65, -3.25,
460 -2.77, -3.12, -3.47, -3.14, -2.61,
461 -2.87, -3.80, -3.00, -2.36, -2.40,
462 -3.83, -2.59, -1.73, -1.28, -3.83,
463 -1.66, -0.37, 1.09, -3.29, 0.74,
464 2.86, 6.39, 0.36, 7.92, 11.98,
465 1.55, 15.25, 23.42, 12.20, 26.28,
466 50.80, 46.72, 71.11, 68.69, 104.60,
467 106.10, 153.00, 157.90, 211.10, 195.70,
468 198.60, 255.30, 253.20, 283.20, 232.60,
469},
470{
471 -1.24, -1.20, -1.56, -1.73, -1.91,
472 -1.64, -1.43, -1.66, -1.97, -1.71,
473 -1.53, -1.78, -2.04, -1.77, -1.54,
474 -1.79, -2.02, -1.73, -1.53, -1.77,
475 -2.06, -1.77, -1.55, -1.75, -2.05,
476 -1.76, -1.50, -1.72, -1.99, -1.73,
477 -1.49, -1.69, -1.97, -1.69, -1.49,
478 -1.69, -1.97, -1.69, -1.49, -1.70,
479 -1.96, -1.70, -1.50, -1.70, -1.96,
480 -1.75, -1.57, -1.80, -2.06, -1.79,
481 -1.59, -1.78, -2.04, -1.74, -1.51,
482 -1.71, -1.99, -1.70, -1.52, -1.72,
483 -1.99, -1.70, -1.49, -1.68, -1.94,
484 -1.62, -1.39, -1.56, -1.79, -1.43,
485 -1.19, -1.29, -1.46, -1.00, -0.72,
486 -0.68, -0.72, -0.03, 0.32, 0.66,
487 0.95, 2.10, 2.62, 3.62, 4.61,
488 6.80, 7.69, 10.16, 12.72, 17.07,
489 18.75, 24.71, 30.91, 37.43, 44.80,
490 55.41, 68.79, 81.86, 101.30, 119.90,
491 151.00, 186.70, 218.10, 267.90, 313.40,
492 380.40, 440.60, 523.50, 591.90, 671.00,
493 729.30, 791.30, 846.50, 875.40, 921.70,
494},
495{
496 -0.44, -0.56, -0.52, -0.47, -0.81,
497 -0.45, -0.49, -0.42, -0.83, -0.46,
498 -0.51, -0.46, -0.84, -0.47, -0.54,
499 -0.49, -0.89, -0.47, -0.50, -0.42,
500 -0.84, -0.44, -0.51, -0.47, -0.89,
501 -0.45, -0.51, -0.43, -0.82, -0.42,
502 -0.47, -0.40, -0.79, -0.39, -0.45,
503 -0.39, -0.79, -0.40, -0.48, -0.45,
504 -0.87, -0.46, -0.52, -0.45, -0.86,
505 -0.47, -0.52, -0.45, -0.84, -0.48,
506 -0.55, -0.48, -0.86, -0.43, -0.50,
507 -0.43, -0.83, -0.43, -0.49, -0.41,
508 -0.80, -0.39, -0.42, -0.33, -0.70,
509 -0.26, -0.26, -0.12, -0.46, 0.05,
510 0.13, 0.35, 0.08, 0.75, 0.99,
511 1.44, 1.33, 2.31, 2.94, 3.84,
512 4.11, 5.78, 7.24, 9.15, 10.24,
513 13.46, 16.78, 20.81, 23.71, 30.43,
514 37.82, 46.66, 54.37, 67.63, 83.65,
515 96.98, 121.80, 149.90, 174.50, 217.80,
516 267.00, 317.20, 385.90, 457.20, 552.30,
517 649.70, 772.90, 897.80, 1036.00, 1179.00,
518 1291.00, 1432.00, 1524.00, 1593.00, 1675.00,
519},
520{
521 0.04, 0.02, -0.20, 0.03, 0.02,
522 -0.02, -0.24, 0.01, 0.07, 0.06,
523 -0.20, 0.02, 0.04, -0.01, -0.24,
524 0.03, 0.05, 0.03, -0.24, 0.03,
525 0.08, 0.06, -0.21, 0.06, 0.08,
526 0.03, -0.24, 0.03, 0.07, 0.05,
527 -0.23, 0.06, 0.08, 0.06, -0.21,
528 0.06, 0.07, 0.04, -0.25, 0.04,
529 0.05, 0.01, -0.26, 0.01, 0.05,
530 0.04, -0.25, -0.00, 0.03, -0.01,
531 -0.27, 0.02, 0.03, 0.00, -0.26,
532 0.01, 0.05, 0.03, -0.23, 0.06,
533 0.11, 0.11, -0.14, 0.17, 0.26,
534 0.30, 0.09, 0.45, 0.61, 0.75,
535 0.62, 1.09, 1.43, 1.77, 1.84,
536 2.54, 3.25, 4.06, 4.54, 5.79,
537 7.33, 9.16, 10.56, 13.01, 16.39,
538 20.40, 23.78, 29.02, 36.45, 44.99,
539 52.41, 64.46, 80.77, 97.26, 115.40,
540 143.70, 176.30, 206.90, 256.70, 309.80,
541 370.20, 456.10, 536.60, 656.90, 771.60,
542 934.80, 1091.00, 1299.00, 1494.00, 1704.00,
543 1931.00, 2113.00, 2286.00, 2395.00, 2458.00,
544},
545{
546 0.04, 0.08, 0.04, 0.00, -0.02,
547 -0.02, -0.02, 0.01, 0.06, 0.06,
548 0.05, 0.06, 0.04, 0.02, 0.01,
549 0.03, 0.06, 0.03, 0.01, 0.02,
550 0.03, 0.04, 0.03, 0.05, 0.07,
551 0.03, 0.00, 0.00, 0.02, 0.03,
552 0.02, 0.01, 0.01, 0.02, 0.01,
553 0.02, -0.00, 0.00, 0.00, 0.03,
554 0.02, -0.02, -0.02, -0.02, 0.03,
555 0.01, -0.01, -0.01, 0.00, 0.00,
556 -0.02, -0.02, -0.04, -0.05, -0.04,
557 -0.02, -0.00, 0.00, 0.02, 0.05,
558 0.08, 0.10, 0.13, 0.20, 0.26,
559 0.33, 0.42, 0.57, 0.71, 0.87,
560 1.11, 1.43, 1.73, 2.11, 2.66,
561 3.36, 4.04, 4.90, 6.14, 7.69,
562 9.19, 11.11, 13.89, 17.28, 20.59,
563 24.88, 31.01, 38.31, 45.60, 55.30,
564 68.82, 85.00, 99.72, 121.80, 151.30,
565 180.30, 218.30, 269.90, 321.90, 389.20,
566 482.30, 567.10, 695.20, 821.10, 1001.00,
567 1179.00, 1424.00, 1661.00, 1968.00, 2254.00,
568 2543.00, 2849.00, 3055.00, 3232.00, 3326.00,
569},
570{
571 0.02, 0.01, -0.03, -0.08, -0.09,
572 -0.08, -0.06, -0.07, -0.05, -0.07,
573 -0.03, -0.04, -0.05, -0.04, -0.04,
574 -0.09, -0.08, -0.09, -0.04, -0.05,
575 -0.06, -0.07, -0.09, -0.11, -0.09,
576 -0.08, -0.05, -0.05, -0.07, -0.10,
577 -0.09, -0.11, -0.10, -0.11, -0.09,
578 -0.12, -0.11, -0.10, -0.08, -0.12,
579 -0.10, -0.10, -0.08, -0.10, -0.13,
580 -0.15, -0.13, -0.13, -0.14, -0.13,
581 -0.11, -0.15, -0.15, -0.17, -0.16,
582 -0.16, -0.13, -0.11, -0.08, -0.08,
583 -0.04, -0.00, 0.06, 0.09, 0.17,
584 0.27, 0.40, 0.51, 0.69, 0.93,
585 1.19, 1.47, 1.90, 2.44, 3.00,
586 3.67, 4.63, 5.82, 7.07, 8.58,
587 10.72, 13.37, 16.11, 19.49, 24.23,
588 30.01, 36.07, 43.64, 54.10, 66.39,
589 79.76, 96.75, 119.80, 145.80, 173.20,
590 213.60, 263.00, 310.50, 382.20, 466.10,
591 556.80, 682.90, 812.00, 993.80, 1180.00,
592 1437.00, 1699.00, 2051.00, 2398.00, 2823.00,
593 3251.00, 3620.00, 4010.00, 4216.00, 4373.00,
594},
595{
596 0.01, 0.04, 0.02, -0.00, -0.02,
597 -0.02, -0.01, 0.01, 0.02, 0.01,
598 -0.00, -0.02, -0.01, -0.00, -0.00,
599 -0.00, -0.04, -0.00, -0.01, -0.03,
600 -0.04, -0.04, -0.04, -0.03, -0.07,
601 -0.03, -0.01, -0.01, -0.02, -0.05,
602 -0.06, -0.06, -0.04, -0.06, -0.08,
603 -0.09, -0.10, -0.08, -0.07, -0.08,
604 -0.07, -0.03, -0.04, -0.05, -0.10,
605 -0.10, -0.11, -0.10, -0.13, -0.11,
606 -0.09, -0.08, -0.08, -0.10, -0.11,
607 -0.11, -0.10, -0.07, -0.04, -0.02,
608 0.00, 0.05, 0.10, 0.17, 0.24,
609 0.34, 0.47, 0.64, 0.81, 1.04,
610 1.35, 1.74, 2.14, 2.67, 3.36,
611 4.24, 5.16, 6.31, 7.87, 9.81,
612 11.90, 14.47, 17.93, 22.22, 26.86,
613 32.54, 40.20, 49.48, 59.83, 72.44,
614 89.35, 109.80, 131.80, 159.60, 196.60,
615 237.20, 286.80, 352.40, 425.40, 513.80,
616 629.60, 754.50, 924.60, 1112.00, 1353.00,
617 1615.00, 1970.00, 2341.00, 2836.00, 3334.00,
618 3906.00, 4550.00, 5045.00, 5384.00, 5638.00,
619},
620{
621 -0.00, 0.00, -0.01, -0.04, -0.06,
622 -0.07, -0.07, -0.05, -0.05, -0.05,
623 -0.06, -0.07, -0.07, -0.07, -0.04,
624 -0.04, -0.04, -0.04, -0.05, -0.08,
625 -0.08, -0.10, -0.08, -0.08, -0.08,
626 -0.07, -0.09, -0.11, -0.10, -0.09,
627 -0.09, -0.09, -0.11, -0.12, -0.12,
628 -0.12, -0.13, -0.14, -0.12, -0.11,
629 -0.11, -0.11, -0.10, -0.12, -0.12,
630 -0.12, -0.13, -0.16, -0.15, -0.14,
631 -0.12, -0.14, -0.14, -0.16, -0.15,
632 -0.15, -0.14, -0.13, -0.10, -0.08,
633 -0.05, -0.01, 0.05, 0.11, 0.19,
634 0.31, 0.44, 0.59, 0.80, 1.06,
635 1.37, 1.72, 2.20, 2.80, 3.48,
636 4.30, 5.38, 6.74, 8.27, 10.11,
637 12.52, 15.53, 18.94, 23.03, 28.38,
638 35.00, 42.56, 51.61, 63.46, 77.61,
639 94.57, 114.50, 140.60, 171.40, 205.60,
640 251.80, 309.60, 373.40, 453.00, 554.40,
641 667.20, 817.00, 982.40, 1205.00, 1459.00,
642 1778.00, 2136.00, 2631.00, 3137.00, 3814.00,
643 4584.00, 5354.00, 6433.00, 6848.00, 7159.00,
644},
645{
646 0.00, -0.00, -0.01, -0.02, -0.03,
647 -0.04, -0.06, -0.09, -0.11, -0.09,
648 -0.06, -0.04, -0.05, -0.04, -0.04,
649 -0.04, -0.05, -0.05, -0.05, -0.03,
650 -0.03, -0.06, -0.08, -0.10, -0.08,
651 -0.07, -0.09, -0.10, -0.12, -0.09,
652 -0.08, -0.09, -0.12, -0.12, -0.11,
653 -0.12, -0.12, -0.13, -0.14, -0.13,
654 -0.15, -0.16, -0.15, -0.14, -0.13,
655 -0.15, -0.17, -0.17, -0.14, -0.12,
656 -0.14, -0.15, -0.19, -0.18, -0.18,
657 -0.17, -0.16, -0.14, -0.13, -0.11,
658 -0.08, -0.03, 0.02, 0.09, 0.17,
659 0.27, 0.40, 0.58, 0.78, 1.02,
660 1.33, 1.73, 2.19, 2.76, 3.47,
661 4.37, 5.43, 6.71, 8.31, 10.34,
662 12.71, 15.54, 19.11, 23.60, 28.89,
663 35.17, 43.11, 52.88, 64.72, 78.52,
664 96.12, 117.70, 143.50, 173.20, 212.10,
665 257.80, 312.80, 382.30, 465.10, 563.50,
666 688.70, 834.90, 1023.00, 1248.00, 1520.00,
667 1842.00, 2269.00, 2751.00, 3403.00, 4125.00,
668 5078.00, 6346.00, 7455.00, 9185.00, 10380.00,
669},
670{
671 0.00, 0.00, -0.00, -0.01, -0.03,
672 -0.06, -0.07, -0.08, -0.09, -0.09,
673 -0.07, -0.06, -0.02, -0.01, -0.02,
674 -0.04, -0.06, -0.07, -0.07, -0.04,
675 -0.03, -0.01, -0.02, -0.05, -0.07,
676 -0.10, -0.09, -0.09, -0.09, -0.11,
677 -0.11, -0.13, -0.13, -0.13, -0.15,
678 -0.16, -0.16, -0.16, -0.16, -0.16,
679 -0.17, -0.16, -0.15, -0.15, -0.17,
680 -0.18, -0.21, -0.19, -0.19, -0.21,
681 -0.19, -0.19, -0.20, -0.20, -0.22,
682 -0.22, -0.21, -0.19, -0.17, -0.16,
683 -0.13, -0.09, -0.04, 0.02, 0.10,
684 0.20, 0.33, 0.49, 0.68, 0.92,
685 1.23, 1.59, 2.04, 2.61, 3.32,
686 4.15, 5.17, 6.47, 8.06, 9.94,
687 12.22, 15.13, 18.69, 22.87, 27.96,
688 34.36, 42.31, 51.54, 62.85, 76.60,
689 94.58, 114.60, 139.80, 170.50, 207.00,
690 251.80, 308.70, 377.80, 455.80, 558.60,
691 679.10, 829.60, 1018.00, 1239.00, 1523.00,
692 1861.00, 2276.00, 2828.00, 3461.00, 4319.00,
693 5420.00, 6807.00, 8895.00, 11000.00, 14800.00,
694},
695{
696 -0.00, -0.00, 0.00, 0.00, -0.02,
697 -0.05, -0.06, -0.08, -0.07, -0.08,
698 -0.07, -0.05, -0.02, -0.02, -0.02,
699 -0.04, -0.03, -0.04, -0.05, -0.06,
700 -0.08, -0.06, -0.03, -0.01, -0.03,
701 -0.07, -0.08, -0.09, -0.07, -0.11,
702 -0.13, -0.15, -0.15, -0.15, -0.16,
703 -0.15, -0.16, -0.16, -0.18, -0.19,
704 -0.19, -0.16, -0.16, -0.18, -0.21,
705 -0.20, -0.20, -0.19, -0.22, -0.25,
706 -0.25, -0.25, -0.23, -0.25, -0.26,
707 -0.25, -0.24, -0.23, -0.23, -0.21,
708 -0.19, -0.15, -0.11, -0.06, 0.02,
709 0.12, 0.22, 0.36, 0.55, 0.77,
710 1.03, 1.38, 1.82, 2.34, 2.95,
711 3.74, 4.76, 5.95, 7.34, 9.13,
712 11.43, 14.11, 17.21, 21.19, 26.32,
713 32.25, 39.18, 47.88, 59.42, 72.38,
714 87.84, 107.30, 132.80, 160.10, 194.60,
715 237.30, 290.90, 353.20, 432.80, 527.00,
716 641.30, 788.30, 962.90, 1190.00, 1451.00,
717 1799.00, 2206.00, 2729.00, 3407.00, 4239.00,
718 5422.00, 7030.00, 9323.00, 12740.00, 15760.00,
719},
720{
721 0.00, 0.00, -0.00, 0.00, 0.00,
722 0.00, -0.02, -0.05, -0.05, -0.05,
723 -0.03, -0.00, -0.01, -0.03, -0.05,
724 -0.05, -0.06, -0.07, -0.06, -0.07,
725 -0.08, -0.07, -0.08, -0.06, -0.05,
726 -0.05, -0.08, -0.10, -0.10, -0.11,
727 -0.13, -0.14, -0.16, -0.16, -0.14,
728 -0.13, -0.13, -0.15, -0.19, -0.20,
729 -0.19, -0.19, -0.19, -0.21, -0.23,
730 -0.24, -0.23, -0.25, -0.26, -0.25,
731 -0.27, -0.28, -0.30, -0.30, -0.29,
732 -0.28, -0.29, -0.29, -0.28, -0.26,
733 -0.25, -0.23, -0.19, -0.14, -0.09,
734 -0.02, 0.09, 0.22, 0.35, 0.54,
735 0.80, 1.11, 1.45, 1.90, 2.52,
736 3.23, 4.02, 5.05, 6.46, 8.09,
737 9.88, 12.21, 15.38, 19.02, 23.03,
738 28.19, 35.30, 43.32, 52.28, 63.42,
739 79.69, 96.79, 116.90, 142.90, 178.20,
740 212.40, 259.50, 322.80, 387.20, 474.50,
741 584.40, 709.70, 883.00, 1072.00, 1335.00,
742 1631.00, 2030.00, 2516.00, 3147.00, 3953.00,
743 5029.00, 6624.00, 8430.00, 12810.00, 13540.00,
744},
745{
746 0.00, -0.00, 0.00, 0.00, -0.00,
747 -0.00, -0.00, -0.00, -0.01, -0.00,
748 -0.01, -0.02, -0.02, -0.04, -0.06,
749 -0.06, -0.10, -0.10, -0.09, -0.10,
750 -0.08, -0.07, -0.08, -0.10, -0.11,
751 -0.09, -0.08, -0.09, -0.11, -0.11,
752 -0.13, -0.12, -0.16, -0.16, -0.16,
753 -0.16, -0.16, -0.18, -0.19, -0.20,
754 -0.21, -0.22, -0.22, -0.21, -0.22,
755 -0.25, -0.27, -0.30, -0.30, -0.28,
756 -0.29, -0.31, -0.32, -0.31, -0.31,
757 -0.32, -0.33, -0.34, -0.34, -0.33,
758 -0.32, -0.30, -0.28, -0.25, -0.20,
759 -0.14, -0.08, 0.00, 0.15, 0.31,
760 0.48, 0.70, 1.05, 1.46, 1.86,
761 2.40, 3.22, 4.15, 5.09, 6.34,
762 8.20, 10.31, 12.44, 15.27, 19.45,
763 24.13, 28.95, 35.17, 44.64, 54.76,
764 65.62, 79.90, 101.10, 121.70, 146.20,
765 179.90, 222.90, 267.80, 331.30, 405.80,
766 489.30, 617.60, 742.70, 930.50, 1130.00,
767 1425.00, 1736.00, 2188.00, 2714.00, 3419.00,
768 4375.00, 5427.00, 7412.00, 8629.00, 11930.00,
769},
770{
771 -0.00, -0.00, -0.00, 0.00, 0.00,
772 0.00, 0.00, 0.00, 0.00, 0.00,
773 -0.01, -0.02, -0.04, -0.07, -0.07,
774 -0.07, -0.06, -0.04, -0.05, -0.08,
775 -0.09, -0.11, -0.08, -0.10, -0.12,
776 -0.13, -0.11, -0.13, -0.14, -0.15,
777 -0.18, -0.17, -0.16, -0.15, -0.16,
778 -0.16, -0.17, -0.19, -0.20, -0.20,
779 -0.21, -0.22, -0.25, -0.24, -0.23,
780 -0.24, -0.24, -0.27, -0.30, -0.34,
781 -0.35, -0.35, -0.35, -0.35, -0.37,
782 -0.39, -0.39, -0.40, -0.39, -0.39,
783 -0.40, -0.40, -0.38, -0.35, -0.34,
784 -0.32, -0.26, -0.18, -0.12, -0.02,
785 0.16, 0.35, 0.52, 0.76, 1.20,
786 1.68, 2.09, 2.68, 3.69, 4.82,
787 5.81, 7.18, 9.48, 11.99, 14.27,
788 17.36, 22.56, 28.09, 33.27, 40.20,
789 52.06, 63.53, 75.39, 92.47, 118.60,
790 139.80, 168.60, 215.60, 256.40, 312.50,
791 393.10, 470.20, 596.90, 717.50, 908.90,
792 1100.00, 1399.00, 1702.00, 2166.00, 2685.00,
793 3326.00, 4232.00, 4815.00, 4857.00, 7097.00,
794},
795{
796 0.00, -0.00, -0.00, -0.00, -0.00,
797 -0.00, -0.00, -0.00, -0.00, -0.00,
798 -0.01, -0.03, -0.07, -0.08, -0.08,
799 -0.08, -0.06, -0.05, -0.06, -0.06,
800 -0.09, -0.10, -0.13, -0.12, -0.13,
801 -0.14, -0.16, -0.16, -0.16, -0.17,
802 -0.17, -0.17, -0.14, -0.13, -0.13,
803 -0.15, -0.18, -0.20, -0.20, -0.23,
804 -0.23, -0.24, -0.26, -0.27, -0.28,
805 -0.28, -0.28, -0.30, -0.34, -0.38,
806 -0.39, -0.40, -0.39, -0.40, -0.41,
807 -0.42, -0.43, -0.44, -0.46, -0.47,
808 -0.48, -0.48, -0.49, -0.50, -0.48,
809 -0.46, -0.46, -0.44, -0.37, -0.30,
810 -0.26, -0.19, 0.01, 0.21, 0.34,
811 0.54, 1.02, 1.53, 1.86, 2.38,
812 3.51, 4.69, 5.51, 6.73, 9.31,
813 11.98, 13.89, 16.65, 22.60, 28.25,
814 32.75, 39.69, 53.06, 63.57, 74.12,
815 93.37, 118.70, 138.40, 172.90, 216.90,
816 254.40, 335.00, 392.50, 504.90, 602.80,
817 779.90, 927.40, 1201.00, 1453.00, 1836.00,
818 2259.00, 2547.00, 2742.00, 2751.00, 97.71,
819},
820{
821 -0.00, -0.00, 0.00, -0.00, 0.00,
822 0.00, 0.00, 0.00, -0.00, -0.02,
823 -0.02, -0.03, -0.04, -0.03, -0.05,
824 -0.06, -0.06, -0.09, -0.09, -0.07,
825 -0.08, -0.09, -0.14, -0.14, -0.13,
826 -0.14, -0.15, -0.15, -0.17, -0.16,
827 -0.17, -0.18, -0.17, -0.17, -0.16,
828 -0.17, -0.20, -0.20, -0.20, -0.22,
829 -0.24, -0.27, -0.27, -0.29, -0.30,
830 -0.31, -0.33, -0.36, -0.37, -0.39,
831 -0.39, -0.40, -0.41, -0.41, -0.41,
832 -0.44, -0.47, -0.50, -0.52, -0.53,
833 -0.56, -0.58, -0.60, -0.60, -0.64,
834 -0.66, -0.66, -0.65, -0.68, -0.70,
835 -0.64, -0.59, -0.63, -0.64, -0.46,
836 -0.30, -0.32, -0.27, 0.17, 0.57,
837 0.61, 0.79, 1.86, 2.84, 3.01,
838 3.52, 5.98, 8.13, 8.70, 10.10,
839 15.88, 19.83, 21.48, 26.96, 39.59,
840 44.07, 49.95, 72.56, 82.95, 97.66,
841 134.10, 148.40, 204.40, 232.50, 312.50,
842 358.10, 489.30, 549.80, 738.20, 880.00,
843 1046.00, 1184.00, 1315.00, 817.00, 8.43,
844},
845{
846 -0.00, 0.00, 0.00, -0.00, -0.00,
847 -0.00, -0.00, -0.00, -0.01, -0.03,
848 -0.04, -0.05, -0.04, -0.05, -0.04,
849 -0.05, -0.05, -0.07, -0.09, -0.12,
850 -0.12, -0.13, -0.12, -0.12, -0.11,
851 -0.12, -0.13, -0.15, -0.18, -0.19,
852 -0.19, -0.19, -0.21, -0.20, -0.20,
853 -0.20, -0.20, -0.21, -0.23, -0.24,
854 -0.28, -0.30, -0.33, -0.35, -0.34,
855 -0.33, -0.34, -0.36, -0.38, -0.40,
856 -0.40, -0.40, -0.40, -0.42, -0.44,
857 -0.48, -0.52, -0.54, -0.59, -0.62,
858 -0.65, -0.67, -0.71, -0.75, -0.78,
859 -0.82, -0.87, -0.95, -0.96, -0.99,
860 -1.10, -1.20, -1.20, -1.23, -1.41,
861 -1.59, -1.52, -1.53, -1.86, -2.18,
862 -1.97, -1.90, -2.54, -3.15, -2.57,
863 -2.37, -3.66, -4.84, -3.35, -3.13,
864 -5.72, -7.24, -3.85, -5.24, -10.45,
865 -8.79, -5.65, -14.54, -12.62, -9.61,
866 -25.10, -7.20, -28.75, -14.10, -38.98,
867 -16.21, -63.82, -26.48, -86.33, -75.28,
868 -103.50, -134.00, -174.80, -72.07, 68.25,
869},
870};
871//
872 return ExArray[ix][iy];
873}

◆ EyValue150()

double SCT_DetailedSurfaceChargesGenerator::EyValue150 ( int ix,
int iy )
staticprivate

Definition at line 7 of file GetExEy_150V.cxx.

7 {
8 // EyArray for VD=70V(rho=0.1540[C/m**3]), VB=150V
9static const double EyArray[17][115] = {
10{
11 2609.00, 2646.00, 2683.00, 2721.00, 2758.00,
12 2794.00, 2833.00, 2871.00, 2908.00, 2944.00,
13 2983.00, 3021.00, 3058.00, 3094.00, 3132.00,
14 3170.00, 3208.00, 3244.00, 3283.00, 3320.00,
15 3358.00, 3394.00, 3432.00, 3470.00, 3508.00,
16 3544.00, 3583.00, 3620.00, 3658.00, 3694.00,
17 3732.00, 3770.00, 3808.00, 3844.00, 3883.00,
18 3920.00, 3958.00, 3994.00, 4032.00, 4070.00,
19 4108.00, 4144.00, 4183.00, 4220.00, 4258.00,
20 4294.00, 4332.00, 4370.00, 4408.00, 4444.00,
21 4482.00, 4520.00, 4558.00, 4594.00, 4633.00,
22 4670.00, 4708.00, 4744.00, 4783.00, 4820.00,
23 4858.00, 4894.00, 4933.00, 4970.00, 5008.00,
24 5044.00, 5081.00, 5120.00, 5157.00, 5193.00,
25 5232.00, 5269.00, 5306.00, 5342.00, 5380.00,
26 5416.00, 5451.00, 5488.00, 5525.00, 5560.00,
27 5594.00, 5628.00, 5664.00, 5697.00, 5727.00,
28 5758.00, 5790.00, 5817.00, 5841.00, 5864.00,
29 5885.00, 5902.00, 5909.00, 5918.00, 5916.00,
30 5902.00, 5885.00, 5855.00, 5800.00, 5746.00,
31 5661.00, 5538.00, 5407.00, 5215.00, 5017.00,
32 4732.00, 4444.00, 4044.00, 3647.00, 3179.00,
33 2571.00, 2022.00, 1310.00, 671.00, 327.70,
34},
35{
36 2609.00, 2646.00, 2683.00, 2720.00, 2757.00,
37 2795.00, 2833.00, 2870.00, 2907.00, 2945.00,
38 2983.00, 3020.00, 3057.00, 3095.00, 3132.00,
39 3170.00, 3207.00, 3245.00, 3283.00, 3320.00,
40 3357.00, 3395.00, 3432.00, 3470.00, 3507.00,
41 3545.00, 3583.00, 3620.00, 3658.00, 3695.00,
42 3732.00, 3770.00, 3807.00, 3845.00, 3883.00,
43 3920.00, 3957.00, 3995.00, 4032.00, 4070.00,
44 4107.00, 4145.00, 4183.00, 4220.00, 4258.00,
45 4295.00, 4332.00, 4370.00, 4407.00, 4445.00,
46 4482.00, 4520.00, 4557.00, 4595.00, 4633.00,
47 4670.00, 4708.00, 4745.00, 4783.00, 4820.00,
48 4858.00, 4895.00, 4933.00, 4970.00, 5007.00,
49 5044.00, 5082.00, 5120.00, 5156.00, 5194.00,
50 5231.00, 5269.00, 5305.00, 5342.00, 5379.00,
51 5416.00, 5452.00, 5488.00, 5525.00, 5560.00,
52 5595.00, 5630.00, 5664.00, 5698.00, 5730.00,
53 5760.00, 5791.00, 5819.00, 5845.00, 5868.00,
54 5889.00, 5908.00, 5917.00, 5925.00, 5927.00,
55 5917.00, 5899.00, 5874.00, 5827.00, 5771.00,
56 5697.00, 5577.00, 5457.00, 5273.00, 5083.00,
57 4807.00, 4528.00, 4128.00, 3746.00, 3251.00,
58 2667.00, 2091.00, 1357.00, 706.90, 341.70,
59},
60{
61 2609.00, 2646.00, 2683.00, 2720.00, 2758.00,
62 2795.00, 2833.00, 2870.00, 2907.00, 2945.00,
63 2983.00, 3020.00, 3057.00, 3095.00, 3132.00,
64 3170.00, 3207.00, 3245.00, 3282.00, 3320.00,
65 3357.00, 3395.00, 3432.00, 3470.00, 3507.00,
66 3545.00, 3582.00, 3620.00, 3657.00, 3695.00,
67 3732.00, 3770.00, 3807.00, 3845.00, 3882.00,
68 3920.00, 3957.00, 3995.00, 4032.00, 4070.00,
69 4107.00, 4145.00, 4182.00, 4220.00, 4257.00,
70 4295.00, 4332.00, 4370.00, 4407.00, 4445.00,
71 4482.00, 4520.00, 4557.00, 4595.00, 4632.00,
72 4670.00, 4707.00, 4745.00, 4782.00, 4820.00,
73 4857.00, 4895.00, 4932.00, 4970.00, 5007.00,
74 5045.00, 5082.00, 5119.00, 5157.00, 5194.00,
75 5231.00, 5268.00, 5306.00, 5343.00, 5380.00,
76 5416.00, 5453.00, 5489.00, 5525.00, 5561.00,
77 5596.00, 5631.00, 5666.00, 5699.00, 5732.00,
78 5764.00, 5795.00, 5822.00, 5849.00, 5875.00,
79 5896.00, 5914.00, 5928.00, 5941.00, 5940.00,
80 5933.00, 5927.00, 5898.00, 5855.00, 5818.00,
81 5733.00, 5641.00, 5514.00, 5355.00, 5164.00,
82 4916.00, 4624.00, 4274.00, 3847.00, 3409.00,
83 2766.00, 2187.00, 1439.00, 751.10, 310.60,
84},
85{
86 2607.00, 2645.00, 2683.00, 2720.00, 2758.00,
87 2795.00, 2833.00, 2870.00, 2908.00, 2945.00,
88 2983.00, 3020.00, 3058.00, 3095.00, 3132.00,
89 3170.00, 3207.00, 3245.00, 3282.00, 3320.00,
90 3357.00, 3395.00, 3432.00, 3470.00, 3507.00,
91 3545.00, 3582.00, 3620.00, 3657.00, 3695.00,
92 3732.00, 3770.00, 3807.00, 3845.00, 3882.00,
93 3920.00, 3957.00, 3995.00, 4032.00, 4070.00,
94 4107.00, 4145.00, 4182.00, 4220.00, 4257.00,
95 4295.00, 4332.00, 4370.00, 4407.00, 4445.00,
96 4482.00, 4520.00, 4557.00, 4595.00, 4633.00,
97 4670.00, 4707.00, 4745.00, 4783.00, 4820.00,
98 4857.00, 4895.00, 4932.00, 4970.00, 5007.00,
99 5045.00, 5082.00, 5119.00, 5157.00, 5194.00,
100 5232.00, 5269.00, 5306.00, 5343.00, 5380.00,
101 5417.00, 5453.00, 5490.00, 5526.00, 5562.00,
102 5598.00, 5633.00, 5668.00, 5701.00, 5735.00,
103 5767.00, 5799.00, 5827.00, 5856.00, 5881.00,
104 5905.00, 5926.00, 5941.00, 5954.00, 5960.00,
105 5960.00, 5951.00, 5932.00, 5903.00, 5860.00,
106 5802.00, 5704.00, 5600.00, 5453.00, 5277.00,
107 5045.00, 4782.00, 4416.00, 4055.00, 3547.00,
108 2966.00, 2292.00, 1543.00, 787.60, 418.30,
109},
110{
111 2607.00, 2645.00, 2683.00, 2720.00, 2758.00,
112 2795.00, 2832.00, 2870.00, 2908.00, 2945.00,
113 2982.00, 3020.00, 3057.00, 3095.00, 3133.00,
114 3170.00, 3207.00, 3245.00, 3282.00, 3320.00,
115 3357.00, 3395.00, 3432.00, 3470.00, 3507.00,
116 3545.00, 3582.00, 3620.00, 3657.00, 3695.00,
117 3732.00, 3770.00, 3807.00, 3845.00, 3882.00,
118 3920.00, 3957.00, 3995.00, 4032.00, 4070.00,
119 4107.00, 4145.00, 4182.00, 4220.00, 4257.00,
120 4295.00, 4332.00, 4370.00, 4407.00, 4445.00,
121 4482.00, 4520.00, 4557.00, 4595.00, 4632.00,
122 4670.00, 4707.00, 4745.00, 4782.00, 4820.00,
123 4857.00, 4895.00, 4932.00, 4970.00, 5007.00,
124 5045.00, 5082.00, 5120.00, 5157.00, 5194.00,
125 5232.00, 5269.00, 5306.00, 5343.00, 5380.00,
126 5417.00, 5454.00, 5491.00, 5527.00, 5563.00,
127 5600.00, 5635.00, 5670.00, 5704.00, 5739.00,
128 5771.00, 5804.00, 5834.00, 5864.00, 5891.00,
129 5917.00, 5940.00, 5958.00, 5978.00, 5985.00,
130 5993.00, 5992.00, 5978.00, 5959.00, 5933.00,
131 5875.00, 5807.00, 5712.00, 5589.00, 5435.00,
132 5234.00, 4977.00, 4681.00, 4285.00, 3838.00,
133 3178.00, 2515.00, 1710.00, 917.80, 152.50,
134},
135{
136 2607.00, 2645.00, 2683.00, 2720.00, 2758.00,
137 2795.00, 2833.00, 2870.00, 2908.00, 2945.00,
138 2982.00, 3020.00, 3057.00, 3095.00, 3133.00,
139 3170.00, 3207.00, 3245.00, 3282.00, 3320.00,
140 3357.00, 3395.00, 3432.00, 3470.00, 3507.00,
141 3545.00, 3582.00, 3620.00, 3657.00, 3695.00,
142 3732.00, 3770.00, 3807.00, 3845.00, 3882.00,
143 3920.00, 3957.00, 3995.00, 4032.00, 4070.00,
144 4107.00, 4145.00, 4182.00, 4220.00, 4257.00,
145 4295.00, 4332.00, 4370.00, 4407.00, 4445.00,
146 4482.00, 4520.00, 4557.00, 4595.00, 4632.00,
147 4670.00, 4707.00, 4745.00, 4782.00, 4820.00,
148 4857.00, 4895.00, 4932.00, 4970.00, 5007.00,
149 5045.00, 5082.00, 5120.00, 5157.00, 5195.00,
150 5232.00, 5269.00, 5307.00, 5344.00, 5381.00,
151 5418.00, 5455.00, 5492.00, 5529.00, 5565.00,
152 5601.00, 5637.00, 5673.00, 5708.00, 5743.00,
153 5777.00, 5811.00, 5842.00, 5874.00, 5903.00,
154 5932.00, 5958.00, 5981.00, 6002.00, 6017.00,
155 6030.00, 6036.00, 6034.00, 6027.00, 6007.00,
156 5978.00, 5924.00, 5854.00, 5761.00, 5632.00,
157 5469.00, 5260.00, 4963.00, 4654.00, 4173.00,
158 3588.00, 2797.00, 1942.00, 1013.00, 320.60,
159},
160{
161 2607.00, 2645.00, 2683.00, 2720.00, 2758.00,
162 2795.00, 2833.00, 2870.00, 2908.00, 2945.00,
163 2982.00, 3020.00, 3057.00, 3095.00, 3132.00,
164 3170.00, 3207.00, 3245.00, 3282.00, 3320.00,
165 3357.00, 3395.00, 3432.00, 3470.00, 3507.00,
166 3545.00, 3582.00, 3620.00, 3657.00, 3695.00,
167 3732.00, 3770.00, 3807.00, 3845.00, 3882.00,
168 3920.00, 3957.00, 3995.00, 4032.00, 4070.00,
169 4107.00, 4145.00, 4182.00, 4220.00, 4257.00,
170 4295.00, 4332.00, 4370.00, 4407.00, 4445.00,
171 4482.00, 4520.00, 4557.00, 4595.00, 4632.00,
172 4670.00, 4707.00, 4745.00, 4782.00, 4820.00,
173 4857.00, 4895.00, 4932.00, 4970.00, 5008.00,
174 5045.00, 5082.00, 5120.00, 5157.00, 5195.00,
175 5232.00, 5270.00, 5307.00, 5344.00, 5382.00,
176 5419.00, 5456.00, 5493.00, 5530.00, 5567.00,
177 5604.00, 5640.00, 5676.00, 5712.00, 5749.00,
178 5783.00, 5818.00, 5852.00, 5886.00, 5917.00,
179 5948.00, 5978.00, 6006.00, 6033.00, 6055.00,
180 6078.00, 6092.00, 6101.00, 6110.00, 6109.00,
181 6090.00, 6064.00, 6023.00, 5959.00, 5875.00,
182 5752.00, 5584.00, 5381.00, 5066.00, 4729.00,
183 4059.00, 3286.00, 2263.00, 1242.00, 148.10,
184},
185{
186 2607.00, 2645.00, 2683.00, 2720.00, 2758.00,
187 2795.00, 2833.00, 2870.00, 2908.00, 2945.00,
188 2982.00, 3020.00, 3057.00, 3095.00, 3132.00,
189 3170.00, 3207.00, 3245.00, 3282.00, 3320.00,
190 3357.00, 3395.00, 3432.00, 3470.00, 3507.00,
191 3545.00, 3582.00, 3620.00, 3657.00, 3695.00,
192 3732.00, 3770.00, 3807.00, 3845.00, 3882.00,
193 3920.00, 3957.00, 3995.00, 4032.00, 4070.00,
194 4107.00, 4145.00, 4182.00, 4220.00, 4257.00,
195 4295.00, 4332.00, 4370.00, 4407.00, 4445.00,
196 4482.00, 4520.00, 4557.00, 4595.00, 4632.00,
197 4670.00, 4707.00, 4745.00, 4782.00, 4820.00,
198 4857.00, 4895.00, 4933.00, 4970.00, 5008.00,
199 5045.00, 5083.00, 5120.00, 5158.00, 5195.00,
200 5233.00, 5270.00, 5308.00, 5345.00, 5382.00,
201 5420.00, 5457.00, 5495.00, 5532.00, 5569.00,
202 5606.00, 5643.00, 5681.00, 5717.00, 5753.00,
203 5790.00, 5827.00, 5862.00, 5897.00, 5933.00,
204 5967.00, 6000.00, 6033.00, 6064.00, 6093.00,
205 6122.00, 6149.00, 6171.00, 6191.00, 6206.00,
206 6219.00, 6219.00, 6207.00, 6187.00, 6147.00,
207 6079.00, 5982.00, 5828.00, 5649.00, 5312.00,
208 4787.00, 3950.00, 2762.00, 1331.00, 585.20,
209},
210{
211 2607.00, 2645.00, 2683.00, 2720.00, 2758.00,
212 2795.00, 2833.00, 2870.00, 2908.00, 2945.00,
213 2982.00, 3020.00, 3057.00, 3095.00, 3132.00,
214 3170.00, 3207.00, 3245.00, 3282.00, 3320.00,
215 3357.00, 3395.00, 3432.00, 3470.00, 3507.00,
216 3545.00, 3582.00, 3620.00, 3657.00, 3695.00,
217 3732.00, 3770.00, 3807.00, 3845.00, 3882.00,
218 3920.00, 3957.00, 3995.00, 4032.00, 4070.00,
219 4107.00, 4145.00, 4182.00, 4220.00, 4257.00,
220 4295.00, 4332.00, 4370.00, 4407.00, 4445.00,
221 4482.00, 4520.00, 4557.00, 4595.00, 4632.00,
222 4670.00, 4707.00, 4745.00, 4782.00, 4820.00,
223 4858.00, 4895.00, 4933.00, 4970.00, 5008.00,
224 5045.00, 5083.00, 5120.00, 5158.00, 5195.00,
225 5233.00, 5271.00, 5308.00, 5346.00, 5383.00,
226 5421.00, 5458.00, 5496.00, 5533.00, 5571.00,
227 5609.00, 5646.00, 5684.00, 5722.00, 5760.00,
228 5797.00, 5834.00, 5873.00, 5911.00, 5948.00,
229 5985.00, 6023.00, 6062.00, 6100.00, 6137.00,
230 6177.00, 6211.00, 6248.00, 6289.00, 6322.00,
231 6355.00, 6382.00, 6409.00, 6433.00, 6440.00,
232 6436.00, 6415.00, 6372.00, 6258.00, 6143.00,
233 5750.00, 5024.00, 4152.00, 1868.00, 1002.00,
234},
235{
236 2607.00, 2645.00, 2682.00, 2720.00, 2758.00,
237 2795.00, 2833.00, 2870.00, 2908.00, 2945.00,
238 2982.00, 3020.00, 3057.00, 3095.00, 3132.00,
239 3170.00, 3207.00, 3245.00, 3282.00, 3320.00,
240 3357.00, 3395.00, 3432.00, 3470.00, 3507.00,
241 3545.00, 3582.00, 3620.00, 3657.00, 3695.00,
242 3732.00, 3770.00, 3807.00, 3845.00, 3882.00,
243 3920.00, 3957.00, 3995.00, 4032.00, 4070.00,
244 4107.00, 4145.00, 4182.00, 4220.00, 4257.00,
245 4295.00, 4332.00, 4370.00, 4407.00, 4445.00,
246 4482.00, 4520.00, 4557.00, 4595.00, 4632.00,
247 4670.00, 4707.00, 4745.00, 4782.00, 4820.00,
248 4858.00, 4895.00, 4933.00, 4970.00, 5008.00,
249 5045.00, 5083.00, 5120.00, 5158.00, 5196.00,
250 5233.00, 5271.00, 5309.00, 5346.00, 5384.00,
251 5422.00, 5459.00, 5497.00, 5535.00, 5573.00,
252 5611.00, 5650.00, 5688.00, 5726.00, 5765.00,
253 5804.00, 5844.00, 5883.00, 5922.00, 5964.00,
254 6006.00, 6047.00, 6089.00, 6132.00, 6177.00,
255 6222.00, 6273.00, 6323.00, 6372.00, 6428.00,
256 6490.00, 6552.00, 6617.00, 6680.00, 6756.00,
257 6817.00, 6883.00, 6940.00, 6994.00, 6974.00,
258 6798.00, 6575.00, 6077.00, 5308.00, 3392.00,
259},
260{
261 2607.00, 2645.00, 2682.00, 2720.00, 2758.00,
262 2795.00, 2833.00, 2870.00, 2908.00, 2945.00,
263 2982.00, 3020.00, 3057.00, 3095.00, 3132.00,
264 3170.00, 3207.00, 3245.00, 3282.00, 3320.00,
265 3357.00, 3395.00, 3432.00, 3470.00, 3507.00,
266 3545.00, 3582.00, 3620.00, 3657.00, 3695.00,
267 3732.00, 3770.00, 3807.00, 3845.00, 3882.00,
268 3920.00, 3957.00, 3995.00, 4032.00, 4070.00,
269 4107.00, 4145.00, 4182.00, 4220.00, 4257.00,
270 4295.00, 4332.00, 4370.00, 4407.00, 4445.00,
271 4482.00, 4520.00, 4557.00, 4595.00, 4632.00,
272 4670.00, 4707.00, 4745.00, 4783.00, 4820.00,
273 4858.00, 4895.00, 4933.00, 4970.00, 5008.00,
274 5045.00, 5083.00, 5121.00, 5158.00, 5196.00,
275 5234.00, 5271.00, 5309.00, 5347.00, 5385.00,
276 5423.00, 5461.00, 5499.00, 5537.00, 5575.00,
277 5614.00, 5653.00, 5691.00, 5731.00, 5771.00,
278 5811.00, 5851.00, 5894.00, 5936.00, 5979.00,
279 6022.00, 6069.00, 6117.00, 6166.00, 6220.00,
280 6270.00, 6333.00, 6397.00, 6470.00, 6541.00,
281 6629.00, 6714.00, 6816.00, 6937.00, 7054.00,
282 7208.00, 7362.00, 7536.00, 7719.00, 7949.00,
283 8250.00, 8270.00, 8404.00, 9458.00, 10750.00,
284},
285{
286 2607.00, 2645.00, 2682.00, 2720.00, 2758.00,
287 2795.00, 2833.00, 2870.00, 2908.00, 2945.00,
288 2982.00, 3020.00, 3057.00, 3095.00, 3132.00,
289 3170.00, 3207.00, 3245.00, 3282.00, 3320.00,
290 3357.00, 3395.00, 3432.00, 3470.00, 3507.00,
291 3545.00, 3582.00, 3620.00, 3657.00, 3695.00,
292 3732.00, 3770.00, 3807.00, 3845.00, 3882.00,
293 3920.00, 3957.00, 3995.00, 4032.00, 4070.00,
294 4107.00, 4145.00, 4182.00, 4220.00, 4257.00,
295 4295.00, 4332.00, 4370.00, 4407.00, 4445.00,
296 4482.00, 4520.00, 4557.00, 4595.00, 4632.00,
297 4670.00, 4707.00, 4745.00, 4783.00, 4820.00,
298 4858.00, 4895.00, 4933.00, 4970.00, 5008.00,
299 5046.00, 5083.00, 5121.00, 5158.00, 5196.00,
300 5234.00, 5272.00, 5309.00, 5347.00, 5385.00,
301 5423.00, 5462.00, 5500.00, 5539.00, 5577.00,
302 5616.00, 5656.00, 5695.00, 5735.00, 5775.00,
303 5818.00, 5860.00, 5902.00, 5946.00, 5994.00,
304 6041.00, 6089.00, 6141.00, 6196.00, 6257.00,
305 6318.00, 6389.00, 6466.00, 6543.00, 6639.00,
306 6749.00, 6873.00, 7012.00, 7163.00, 7359.00,
307 7564.00, 7817.00, 8114.00, 8457.00, 8840.00,
308 9361.00, 10300.00, 11300.00, 11720.00, 12450.00,
309},
310{
311 2607.00, 2645.00, 2682.00, 2720.00, 2758.00,
312 2795.00, 2833.00, 2870.00, 2908.00, 2945.00,
313 2983.00, 3020.00, 3057.00, 3095.00, 3132.00,
314 3170.00, 3207.00, 3245.00, 3282.00, 3320.00,
315 3357.00, 3395.00, 3432.00, 3470.00, 3507.00,
316 3545.00, 3582.00, 3620.00, 3657.00, 3695.00,
317 3732.00, 3770.00, 3807.00, 3845.00, 3882.00,
318 3920.00, 3957.00, 3995.00, 4032.00, 4070.00,
319 4107.00, 4145.00, 4182.00, 4220.00, 4257.00,
320 4295.00, 4332.00, 4370.00, 4407.00, 4445.00,
321 4482.00, 4520.00, 4557.00, 4595.00, 4632.00,
322 4670.00, 4707.00, 4745.00, 4783.00, 4820.00,
323 4858.00, 4895.00, 4933.00, 4970.00, 5008.00,
324 5046.00, 5083.00, 5121.00, 5159.00, 5196.00,
325 5234.00, 5272.00, 5310.00, 5348.00, 5386.00,
326 5424.00, 5463.00, 5501.00, 5540.00, 5579.00,
327 5618.00, 5658.00, 5698.00, 5739.00, 5780.00,
328 5823.00, 5865.00, 5911.00, 5957.00, 6005.00,
329 6054.00, 6108.00, 6165.00, 6223.00, 6290.00,
330 6354.00, 6437.00, 6526.00, 6624.00, 6731.00,
331 6867.00, 7010.00, 7177.00, 7384.00, 7609.00,
332 7906.00, 8240.00, 8633.00, 9109.00, 9708.00,
333 10660.00, 11850.00, 13860.00, 14800.00, 10130.00,
334},
335{
336 2607.00, 2645.00, 2682.00, 2720.00, 2758.00,
337 2795.00, 2833.00, 2870.00, 2907.00, 2945.00,
338 2982.00, 3020.00, 3057.00, 3095.00, 3132.00,
339 3170.00, 3207.00, 3245.00, 3282.00, 3320.00,
340 3357.00, 3395.00, 3432.00, 3470.00, 3507.00,
341 3545.00, 3582.00, 3620.00, 3657.00, 3695.00,
342 3732.00, 3770.00, 3807.00, 3845.00, 3882.00,
343 3920.00, 3957.00, 3995.00, 4032.00, 4070.00,
344 4107.00, 4145.00, 4182.00, 4220.00, 4257.00,
345 4295.00, 4332.00, 4370.00, 4407.00, 4445.00,
346 4482.00, 4520.00, 4557.00, 4595.00, 4632.00,
347 4670.00, 4707.00, 4745.00, 4783.00, 4820.00,
348 4858.00, 4895.00, 4933.00, 4970.00, 5008.00,
349 5046.00, 5083.00, 5121.00, 5159.00, 5197.00,
350 5234.00, 5272.00, 5310.00, 5348.00, 5386.00,
351 5425.00, 5463.00, 5502.00, 5541.00, 5580.00,
352 5619.00, 5660.00, 5700.00, 5742.00, 5783.00,
353 5828.00, 5871.00, 5917.00, 5964.00, 6015.00,
354 6067.00, 6122.00, 6182.00, 6244.00, 6317.00,
355 6388.00, 6478.00, 6576.00, 6675.00, 6803.00,
356 6952.00, 7124.00, 7323.00, 7549.00, 7840.00,
357 8170.00, 8582.00, 9076.00, 9668.00, 10370.00,
358 11480.00, 12940.00, 14610.00, 18510.00, 20220.00,
359},
360{
361 2607.00, 2645.00, 2682.00, 2720.00, 2758.00,
362 2795.00, 2833.00, 2870.00, 2907.00, 2945.00,
363 2982.00, 3020.00, 3057.00, 3095.00, 3132.00,
364 3170.00, 3207.00, 3245.00, 3282.00, 3320.00,
365 3357.00, 3395.00, 3432.00, 3470.00, 3507.00,
366 3545.00, 3582.00, 3620.00, 3657.00, 3695.00,
367 3732.00, 3770.00, 3807.00, 3845.00, 3882.00,
368 3920.00, 3957.00, 3995.00, 4032.00, 4070.00,
369 4107.00, 4145.00, 4182.00, 4220.00, 4257.00,
370 4295.00, 4332.00, 4370.00, 4407.00, 4445.00,
371 4482.00, 4520.00, 4557.00, 4595.00, 4632.00,
372 4670.00, 4707.00, 4745.00, 4783.00, 4820.00,
373 4858.00, 4895.00, 4933.00, 4970.00, 5008.00,
374 5046.00, 5083.00, 5121.00, 5159.00, 5197.00,
375 5234.00, 5272.00, 5310.00, 5349.00, 5387.00,
376 5425.00, 5464.00, 5503.00, 5541.00, 5581.00,
377 5621.00, 5661.00, 5702.00, 5744.00, 5786.00,
378 5830.00, 5874.00, 5923.00, 5970.00, 6022.00,
379 6075.00, 6133.00, 6196.00, 6260.00, 6337.00,
380 6410.00, 6507.00, 6612.00, 6716.00, 6859.00,
381 7028.00, 7211.00, 7423.00, 7688.00, 7993.00,
382 8387.00, 8850.00, 9398.00, 10070.00, 10910.00,
383 12040.00, 13590.00, 15300.00, 17750.00, 18520.00,
384},
385{
386 2607.00, 2645.00, 2682.00, 2720.00, 2758.00,
387 2795.00, 2833.00, 2870.00, 2908.00, 2945.00,
388 2982.00, 3020.00, 3057.00, 3095.00, 3132.00,
389 3170.00, 3207.00, 3245.00, 3282.00, 3320.00,
390 3357.00, 3395.00, 3432.00, 3470.00, 3507.00,
391 3545.00, 3582.00, 3620.00, 3657.00, 3695.00,
392 3732.00, 3770.00, 3807.00, 3845.00, 3882.00,
393 3920.00, 3957.00, 3995.00, 4032.00, 4070.00,
394 4107.00, 4145.00, 4182.00, 4220.00, 4257.00,
395 4295.00, 4332.00, 4370.00, 4407.00, 4445.00,
396 4482.00, 4520.00, 4557.00, 4595.00, 4632.00,
397 4670.00, 4707.00, 4745.00, 4783.00, 4820.00,
398 4858.00, 4895.00, 4933.00, 4970.00, 5008.00,
399 5046.00, 5083.00, 5121.00, 5159.00, 5197.00,
400 5234.00, 5272.00, 5310.00, 5349.00, 5387.00,
401 5425.00, 5464.00, 5503.00, 5542.00, 5582.00,
402 5621.00, 5662.00, 5703.00, 5745.00, 5788.00,
403 5833.00, 5877.00, 5925.00, 5973.00, 6026.00,
404 6081.00, 6139.00, 6203.00, 6270.00, 6349.00,
405 6425.00, 6526.00, 6635.00, 6744.00, 6892.00,
406 7061.00, 7261.00, 7492.00, 7761.00, 8101.00,
407 8503.00, 9003.00, 9601.00, 10320.00, 11190.00,
408 12380.00, 13650.00, 15220.00, 15810.00, 17860.00,
409},
410{
411 2607.00, 2645.00, 2682.00, 2720.00, 2758.00,
412 2795.00, 2833.00, 2870.00, 2907.00, 2945.00,
413 2982.00, 3020.00, 3057.00, 3095.00, 3132.00,
414 3170.00, 3207.00, 3245.00, 3282.00, 3320.00,
415 3357.00, 3395.00, 3432.00, 3470.00, 3507.00,
416 3545.00, 3582.00, 3620.00, 3657.00, 3695.00,
417 3732.00, 3770.00, 3807.00, 3845.00, 3882.00,
418 3920.00, 3957.00, 3995.00, 4032.00, 4070.00,
419 4107.00, 4145.00, 4182.00, 4220.00, 4257.00,
420 4295.00, 4332.00, 4370.00, 4407.00, 4445.00,
421 4482.00, 4520.00, 4557.00, 4595.00, 4632.00,
422 4670.00, 4707.00, 4745.00, 4782.00, 4820.00,
423 4858.00, 4895.00, 4933.00, 4970.00, 5008.00,
424 5046.00, 5083.00, 5121.00, 5159.00, 5197.00,
425 5234.00, 5272.00, 5310.00, 5349.00, 5387.00,
426 5425.00, 5464.00, 5503.00, 5542.00, 5582.00,
427 5621.00, 5662.00, 5703.00, 5746.00, 5788.00,
428 5833.00, 5878.00, 5926.00, 5974.00, 6027.00,
429 6082.00, 6141.00, 6206.00, 6273.00, 6353.00,
430 6430.00, 6530.00, 6641.00, 6753.00, 6901.00,
431 7081.00, 7278.00, 7507.00, 7790.00, 8126.00,
432 8548.00, 9056.00, 9655.00, 10390.00, 11280.00,
433 12420.00, 13680.00, 14850.00, 15960.00, 17550.00,
434},
435 };
436//
437return EyArray[ix][iy];
438 }

◆ finalize()

StatusCode SCT_DetailedSurfaceChargesGenerator::finalize ( )
overridevirtual

AlgTool finalize.

Definition at line 145 of file SCT_DetailedSurfaceChargesGenerator.cxx.

145 {
146 ATH_MSG_DEBUG("SCT_DetailedSurfaceChargesGenerator::finalize()");
147 return StatusCode::SUCCESS;
148}

◆ GetPotentialValue()

double SCT_DetailedSurfaceChargesGenerator::GetPotentialValue ( int ix,
int iy )
staticprivate

Definition at line 877 of file SCT_DetailedSurfaceChargesGenerator.cxx.

877 {
878 return getPotentialValue(ix, iy);
879}
double getPotentialValue(const int ix, const int iy)
A free function to return the SCT electric field potential internal to the silicon on a 81 * 115 arra...

◆ hole()

bool SCT_DetailedSurfaceChargesGenerator::hole ( double x_h,
double y_h,
double & vx_h,
double & vy_h,
double & D_h )
private

Definition at line 639 of file SCT_DetailedSurfaceChargesGenerator.cxx.

639 {
640 double Ex, Ey;
641 EField(x_h, y_h, Ex, Ey); // [V/cm]
642
643 if (m_doHistoTrap) {
644 m_h_efieldz->Fill(y_h, Ey);
645 }
646
647 if (Ey > 0.) {
648 const double E{sqrt(Ex*Ex+Ey*Ey)};
649 const double mu_h{mud_h(E)};
650 const double v_h{mu_h * E};
651 const double r_h{0.72 - 0.0005*(m_sensorTemperature-CLHEP::STP_Temperature)};
652 const double tanLA_h{r_h * mu_h * m_magneticField * 1.E-4};
653 const double secLA{sqrt(1.+tanLA_h*tanLA_h)};
654 const double cosLA{1./secLA};
655 const double sinLA{tanLA_h / secLA};
656
657 vy_h = v_h * (Ey*cosLA - Ex*sinLA)/E;
658 vx_h = v_h * (Ex*cosLA + Ey*sinLA)/E;
659 D_h = m_kB * m_sensorTemperature * mu_h / m_e;
660 return true;
661 } else {
662 return false;
663 }
664}

◆ holeTransport()

void SCT_DetailedSurfaceChargesGenerator::holeTransport ( double & x0,
double & y0,
double * Q_m2,
double * Q_m1,
double * Q_00,
double * Q_p1,
double * Q_p2,
CLHEP::HepRandomEngine * rndmEngine )
private

Definition at line 788 of file SCT_DetailedSurfaceChargesGenerator.cxx.

788 {
789 // transport holes in the bulk
790 // T. Kondo, 2010.9.9
791 // External parameters to be specified
792 // m_transportTimeMax [nsec]
793 // m_transportTimeStep [nsec]
794 // m_bulk_depth [cm]
795 // Induced currents are added to
796 // Q_m2[50],Q_m1[50],Q_00[50],Q_p1[50],Q_p2[50]
797
798 double x{x0}; // original hole position [cm]
799 double y{y0}; // original hole position [cm]
800 bool isInBulk{true}; //PJ ?!
801 double t_current{0.};
802 double qstrip[5];
803 double vx, vy, D;
804
805 // -- Charge Trapping -- //
806 static const double betaHoles{5.1E-16};
807 double trappingHoles{1./(m_Fluence*betaHoles)};
808 double u{CLHEP::RandFlat::shoot(0., 1.)};
809 double drift_time{-TMath::Log(u)*trappingHoles};
810
811 for (int istrip{-2}; istrip<=2; istrip++) {
812 qstrip[istrip+2] = induced(istrip, x, y);
813 }
814#ifdef SCT_DIG_DEBUG
815 ATH_MSG_DEBUG("h:qstrip=" << qstrip[0] << " " << qstrip[1] << " " << qstrip[2] << " " << qstrip[3] << " " << qstrip[4]);
816#endif
817 while (t_current < m_transportTimeMax) {
818 if (not isInBulk) break;
819 if (not hole(x, y, vx, vy, D)) break;
820 double delta_y{vy * m_transportTimeStep *1.E-9};
821 y += delta_y;
822 double dt{m_transportTimeStep};
823 if (y > m_bulk_depth) {
824 isInBulk = false;
825 dt = (m_bulk_depth - (y-delta_y))/delta_y * m_transportTimeStep;
826 y = m_bulk_depth;
827 }
828 t_current += dt;
829
830 // -- Charge Trapping -- //
831 if (m_doTrapping) {
832 if (drift_time < t_current) break;
833 }
834
835 x += vx*dt*1.E-9;
836 double diffusion{sqrt(2.*D*dt*1.E-9)};
837 y += diffusion * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
838 x += diffusion * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
839 if (y > m_bulk_depth) {
840 y = m_bulk_depth;
841 isInBulk = false;
842 }
843
844 // Get induced current by subtracting induced charges
845#ifdef SCT_DIG_DEBUG
846 ATH_MSG_DEBUG("h:t,x,y=" << t_current << ", " << x*1e4 << ", " << y*1e4);
847#endif
848 for (int istrip{-2}; istrip<=2; istrip++) {
849 double qnew{induced(istrip, x, y)};
850 int jj{istrip + 2};
851 double dq{qnew - qstrip[jj]};
852 qstrip[jj] = qnew;
853#ifdef SCT_DIG_DEBUG
854 ATH_MSG_DEBUG("dq= " << dq);
855#endif
856 int jt{static_cast<int>((t_current+0.001) / 0.50)};
857 if (jt<50) {
858 switch (istrip) {
859 case -2: Q_m2[jt] += dq; break;
860 case -1: Q_m1[jt] += dq; break;
861 case 0: Q_00[jt] += dq; break;
862 case +1: Q_p1[jt] += dq; break;
863 case +2: Q_p2[jt] += dq; break;
864 // default: break; // logically dead code
865 }
866 }
867 }
868#ifdef SCT_DIG_DEBUG
869 ATH_MSG_DEBUG("h:qstrip=" << qstrip[0] << " " << qstrip[1] << " " << qstrip[2] << " " << qstrip[3] << " " << qstrip[4]);
870#endif
871 } // end of hole tracing
872#ifdef SCT_DIG_DEBUG
873 ATH_MSG_DEBUG("holeTransport : x,y=(" << x0*1.e4<< "," <<y0*1.e4<< ")->(" << x*1.e4<< "," <<y*1.e4 << ") t=" << t_current);
874#endif
875 }
bool hole(double x_h, double y_h, double &vx_h, double &vy_h, double &D_h)

◆ induced()

double SCT_DetailedSurfaceChargesGenerator::induced ( int istrip,
double x,
double y ) const
private

Definition at line 669 of file SCT_DetailedSurfaceChargesGenerator.cxx.

669 {
670 // x and y are the coorlocation of charge (e or hole)
671 // induced chardege on the strip "istrip" situated at the height y = d
672 // the center of the strip (istrip=0) is x = 0.004 [cm]
673 static const double deltax{0.0005};
674 static const double deltay{0.00025};
675
676 if (y < 0. or y > m_bulk_depth) return 0.;
677 const double xc{m_strip_pitch * (istrip + 0.5)};
678 const double dx{std::abs(x-xc)};
679 const int ix{static_cast<int>(dx / deltax)};
680 if (ix > 79) return 0.;
681 const int iy{static_cast<int>(y / deltay)};
682 const double fx{(dx - ix*deltax) / deltax};
683 const double fy{( y - iy*deltay) / deltay};
684 double P{ m_PotentialValue[ix ][iy ] *(1.-fx)*(1.-fy)
685 + m_PotentialValue[ix+1][iy ] * fx *(1.-fy)
686 + m_PotentialValue[ix ][iy+1] *(1.-fx)* fy
687 + m_PotentialValue[ix+1][iy+1] * fx * fy};
688#ifdef SCT_DIG_DEBUG
689 ATH_MSG_DEBUG("induced: x,y,iy=" << x << " " << y << " " << iy << " istrip,xc,dx,ix="
690 << istrip << " " << xc << " " << dx << " " <<ix << " fx,fy=" << fx << " " << fy << ", P=" << P);
691#endif
692
693 return P;
694}
static Double_t P(Double_t *tt, Double_t *par)

◆ inducedCharge()

double SCT_DetailedSurfaceChargesGenerator::inducedCharge ( int & istrip,
double & x,
double & y,
double & t ) const
private

Definition at line 969 of file SCT_DetailedSurfaceChargesGenerator.cxx.

969 {
970 // x and y are in um, t is in ns.
971 double charge{0.};
972
973 static const double dt{0.5};
974 double fx, fy, ft;
975 int ix, iy, it;//, iy1, it1;
976
977 if (strip<-2 or strip>2) return charge;
978 if (x<0. or x>=m_strip_pitch*10000.) return charge;
979 if (y<0. or y>=m_bulk_depth*10000.) return charge;
980 if (t<0. or t>=m_transportTimeMax) return charge;
981
982 fx = x / m_stripCharge_dx;
983 ix = static_cast<int>(fx);
984 fx -= ix;
985
986 fy = (y - 0.5*m_stripCharge_dy) / m_stripCharge_dy;
987 iy = static_cast<int>(fy);
988 fy -= iy;
989 //iy1 = iy + 1;
990 if (y <= 0.5*m_stripCharge_dy) {
991 fy = 0.;
992 iy = 0;
993 /*iy1 = 0;*/
994 }
995 if (y >= m_bulk_depth*10000.-0.5*m_stripCharge_dy) {
996 fy = 1.;
998 /*iy1 = iy;*/
999 }
1000
1001 ft = (t - m_transportTimeStep) / dt;
1002 it = static_cast<int>(ft);
1003 ft -= it;
1004 //it1 = it + 1;
1005 if (t <= m_transportTimeStep) {
1006 ft = 0.;
1007 it = 0;
1008 /*it1= 0;*/
1009 }
1011 ft = 1.;
1012 it = 49;
1013 /*it1=49;*/
1014 }
1015
1016 double p000{0.};//m_stripCharge[strip+2][ix][iy][it];
1017 double p010{0.};//m_stripCharge[strip+2][ix][iy1][it];
1018 double p100{0.};//m_stripCharge[strip+2][ix+1][iy][it];
1019 double p110{0.};//m_stripCharge[strip+2][ix+1][iy1][it];
1020 double p001{0.};//m_stripCharge[strip+2][ix][iy][it1];
1021 double p011{0.};//m_stripCharge[strip+2][ix][iy1][it1];
1022 double p101{0.};//m_stripCharge[strip+2][ix+1][iy][it1];
1023 double p111{0.};//m_stripCharge[strip+2][ix+1][iy1][it1];
1024
1025 const double charge0{p000*(1.-fx)*(1.-fy) + p010*(1.-fx)*fy + p100*fx*(1.-fy) + p110*fx*fy};
1026 const double charge1{p001*(1.-fx)*(1.-fy) + p011*(1.-fx)*fy + p101*fx*(1.-fy) + p111*fx*fy};
1027
1028 charge = charge0*(1.-ft) + charge1*ft;
1029
1030 return charge;
1031}
double charge(const T &p)
Definition AtlasPID.h:997

◆ init_mud_e()

void SCT_DetailedSurfaceChargesGenerator::init_mud_e ( double T)
private

Definition at line 560 of file SCT_DetailedSurfaceChargesGenerator.cxx.

560 {
561 m_vs_e = 1.53E9 * pow(T, -0.87);
562 m_Ec_e = 1.01 * pow(T, 1.55);
563 m_beta_e = 2.57E-2 * pow(T, 0.66);
564}
constexpr int pow(int base, int exp) noexcept

◆ init_mud_h()

void SCT_DetailedSurfaceChargesGenerator::init_mud_h ( double T)
private

◆ initExEyArray()

void SCT_DetailedSurfaceChargesGenerator::initExEyArray ( )
private

Definition at line 578 of file SCT_DetailedSurfaceChargesGenerator.cxx.

578 {
579 for (int ix{0}; ix<17; ix++) {
580 for (int iy{0}; iy<115; iy++) {
581 m_ExValue150[ix][iy] = ExValue150(ix, iy);
582 m_EyValue150[ix][iy] = EyValue150(ix, iy);
583 if (m_doHistoTrap) {
584 m_h_yzEfield->Fill( ix*0.00025, iy*0.00025, sqrt(ExValue150(ix, iy)*ExValue150(ix, iy)+EyValue150(ix, iy)*EyValue150(ix, iy)));
585 m_h_yzEfield->Fill(-ix*0.00025, iy*0.00025, sqrt(ExValue150(ix, iy)*ExValue150(ix, iy)+EyValue150(ix, iy)*EyValue150(ix, iy)));
586 m_h_yEfield->Fill( ix*0.0005, iy*0.00025, ExValue150(ix, iy));
587 m_h_yEfield->Fill( -ix*0.0005, iy*0.00025, ExValue150(ix, iy));
588 m_h_zEfield->Fill( ix*0.0005, iy*0.00025, EyValue150(ix, iy));
589 m_h_zEfield->Fill( -ix*0.0005, iy*0.00025, EyValue150(ix, iy));
590 }
591 }
592 }
593}
static double ExValue150(int ix, int iy)
static double EyValue150(int ix, int iy)

◆ initialize()

StatusCode SCT_DetailedSurfaceChargesGenerator::initialize ( )
overridevirtual

AlgTool initialize.

Definition at line 43 of file SCT_DetailedSurfaceChargesGenerator.cxx.

43 {
44 ATH_MSG_DEBUG("SCT_DetailedSurfaceChargesGenerator::initialize()");
45
46 //Get ISiPropertiesTool
47 ATH_CHECK(m_siPropertiesTool.retrieve());
48
49 //Get ISiliconConditionsTool
50 ATH_CHECK(m_siConditionsTool.retrieve());
51
53 if (m_doHistoTrap) {
54 //-- Get Histogram Service
55 StatusCode rc{m_thistSvc.retrieve()};
56 if (rc.isFailure()) {
57 ATH_MSG_FATAL("Unable to retrieve pointer to THistSvc");
58 return StatusCode::FAILURE;
59 }
60 if (m_doHistoTrap) {
61 m_h_efieldz = new TProfile("efieldz", "", 50, 0., 0.03);
62 rc = m_thistSvc->regHist("/file1/efieldz", m_h_efieldz);
63 if (rc.isFailure()) {
64 ATH_MSG_FATAL("Unable to retrieve pointer to THistSvc");
65 return StatusCode::FAILURE;
66 }
67 m_h_yzRamo = new TProfile2D("yzRamo", "", 60, -0.44, 0.44, 60, 0., m_bulk_depth*10.);
68 rc = m_thistSvc->regHist("/file1/yzRamo", m_h_yzRamo);
69 if (rc.isFailure()) {
70 ATH_MSG_FATAL("Unable to retrieve pointer to THistSvc");
71 return StatusCode::FAILURE;
72 }
73 m_h_yzEfield = new TProfile2D("yzEfield", "", 40, -0.004, 0.004, 60, 0., m_bulk_depth);
74 rc = m_thistSvc->regHist("/file1/yzEfield", m_h_yzEfield);
75 if (rc.isFailure()) {
76 ATH_MSG_FATAL("Unable to retrieve pointer to THistSvc");
77 return StatusCode::FAILURE;
78 }
79 m_h_yEfield = new TProfile2D("yEfield", "", 40, -0.004, 0.004, 60, 0., m_bulk_depth);
80 rc = m_thistSvc->regHist("/file1/yEfield", m_h_yEfield);
81 if (rc.isFailure()) {
82 ATH_MSG_FATAL("Unable to retrieve pointer to THistSvc");
83 return StatusCode::FAILURE;
84 }
85 m_h_zEfield = new TProfile2D("zEfield", "", 40, -0.004, 0.004, 60, 0., m_bulk_depth);
86 rc = m_thistSvc->regHist("/file1/zEfield", m_h_zEfield);
87 if (rc.isFailure()) {
88 ATH_MSG_FATAL("Unable to retrieve pointer to THistSvc");
89 return StatusCode::FAILURE;
90 }
91 }
92 }
94
95 m_smallStepLength.setValue(m_smallStepLength.value() * CLHEP::micrometer);
96 m_tSurfaceDrift.setValue(m_tSurfaceDrift.value() * CLHEP::ns);
97
98 // Surface drift time calculation Stuff
102 (m_tHalfwayDrift>=0.0) and
103 (m_distHalfInterStrip>0.0) and
105 m_SurfaceDriftFlag = true;
106#ifdef SCT_DIG_DEBUG
107 ATH_MSG_INFO("\tsurface drift ON: surface drift time at d=" << m_distInterStrip << " (mid strip) =" << this->SurfaceDriftTime(m_distInterStrip));
108 ATH_MSG_INFO("\tsurface drift ON: surface drift time at d=" << m_distHalfInterStrip << " (half way) =" << this->SurfaceDriftTime(m_distHalfInterStrip));
109 ATH_MSG_INFO("\tsurface drift ON: surface drift time at d=0.0" << " (strip center) =" << this->SurfaceDriftTime(0.));
110#endif
111 } else {
112 ATH_MSG_INFO("\tsurface drift still not on, wrong params");
113 }
114
115 // Make sure these two flags are not set simultaneously
116 if (m_tfix>-998. and m_tsubtract>-998.) {
117 ATH_MSG_FATAL("\tCannot set both FixedTime and SubtractTime options!");
118 ATH_MSG_INFO("\tMake sure the two flags are not set simultaneously in jo");
119 return StatusCode::FAILURE;
120 }
121
123 ATH_MSG_INFO("\tUsing Taka Kondo eh-transport code");
125 }
127 ATH_MSG_INFO("\tUsing Taka Kondo fixed charge map");
128 //init_ChargeMapModel("..."); //PJ to be changed
129 }
130
131#ifdef SCT_DIG_DEBUG
132 ATH_MSG_INFO("\tDetailedSurfaceChargesGenerator copied");
133 ATH_MSG_INFO("\tn.charg " << m_numberOfCharges);
134 ATH_MSG_INFO("\tdigi steps " << m_smallStepLength << " mm");
135#endif
136
137 ATH_CHECK(m_lorentzAngleTool.retrieve());
138
139 return StatusCode::SUCCESS;
140}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
static Double_t rc
FloatProperty m_tSurfaceDrift
related to the surface drift
float m_distInterStrip
Inter strip distance normalized to 1.
float m_distHalfInterStrip
Half way distance inter strip.
FloatProperty m_smallStepLength
max internal step along the larger G4 step
float SurfaceDriftTime(float ysurf) const
Calculate of the surface drift time.
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ initPotentialValue()

void SCT_DetailedSurfaceChargesGenerator::initPotentialValue ( )
private

Definition at line 598 of file SCT_DetailedSurfaceChargesGenerator.cxx.

598 {
599 for (int ix{0}; ix<81; ix++) {
600 for (int iy{0}; iy<115; iy++) {
601 m_PotentialValue[ix][iy] = GetPotentialValue(ix, iy);
602 if (m_doHistoTrap) {
603 m_h_yzRamo->Fill( ix*0.005, iy*0.0025, GetPotentialValue(ix, iy));
604 m_h_yzRamo->Fill(-ix*0.005, iy*0.0025, GetPotentialValue(ix, iy));
605 }
606 }
607 }
608}

◆ initTransportModel()

void SCT_DetailedSurfaceChargesGenerator::initTransportModel ( )
private

Definition at line 495 of file SCT_DetailedSurfaceChargesGenerator.cxx.

495 {
496 //------------------------ initialize subfunctions ------------
501
502 //------------ find delepletion deph for model=uniformEFieldModel and flatDiodeModel -------------
503 ATH_MSG_INFO("\tmodel= " << m_eFieldModel << " VB= " << m_biasVoltage << " B= " << m_magneticField);
507 }
508
509 // ----------- find for the case of model = FEMsolution ---------------
510 if (m_eFieldModel == FEMsolution) {
511 double Ex{0.}, Ey{0.};
512 for (double y{0.}; y < m_bulk_depth; y += 0.00025) {
513 EField(0., y, Ex, Ey);
514 if (Ey > 0.1) continue;
516 }
517 }
519
520 ATH_MSG_INFO("------ initialization of e-h transport ------");
521 ATH_MSG_INFO("\tm_bulk_depth = " << m_bulk_depth << " [cm]");
522 ATH_MSG_INFO("\tm_depletion_depth = " << m_depletion_depth << " [cm]");
523 ATH_MSG_INFO("\tm_y_origin _min = " << m_y_origin_min << " [cm]");
524
525 //----for the case of uniform field model (SCT digitization model)------
526 double Emean{m_biasVoltage / m_depletion_depth};
527 m_driftMobility = mud_h(Emean);
528
529#ifdef SCT_DIG_DEBUG
530 ATH_MSG_INFO("----parameters for old SCT digitization model ----");
531 ATH_MSG_INFO("\tmean E field = " << Emean << " [KV/cm] ");
532 ATH_MSG_INFO("\tdriftMobility = " << m_driftMobility<< " [ ]");
533
534 double diffusion{m_kB * m_sensorTemperature * m_driftMobility / m_e};
535 ATH_MSG_INFO("\tdiffusion D = " << diffusion << " [ ]");
536
537 double r_h{0.72 - 0.0005*(m_sensorTemperature-CLHEP::STP_Temperature)};
538 double tanLA{r_h * m_driftMobility * m_magneticField * 1.E-4};
539 ATH_MSG_INFO("\ttan(LA) = " << tanLA);
540 ATH_MSG_INFO("\tLA = " << atan(tanLA)*180./M_PI << " [degree]");
541 ATH_MSG_INFO("-----------------------------------------------");
542
543 ATH_MSG_INFO("EfieldModel\t" << m_eFieldModel << "\t(default = FEMsolution)");
544 ATH_MSG_INFO("DepletionVoltage_VD\t" << m_depletionVoltage << "\t(default = 70.)");
545 ATH_MSG_INFO("BiasVoltage_VB\t" << m_biasVoltage << "\t(150.)");
546 ATH_MSG_INFO("MagneticField_B\t" << m_magneticField << "\t(-2.0)");
547 ATH_MSG_INFO("Temperature_T\t" << m_sensorTemperature << "\t(273.15)");
548 ATH_MSG_INFO("TransportTimeStep \t" << m_transportTimeStep << "\t(0.25)");
549 ATH_MSG_INFO("TransportTimeMax\t" << m_transportTimeMax << "\t(25.0)");
550 ATH_MSG_INFO("BulkDepth\t" << m_bulk_depth << "\t(0.0285)");
551 ATH_MSG_INFO("StripPitch\t" << m_strip_pitch << "\t(0.0080)");
552 ATH_MSG_INFO("----------------------------------------------");
553#endif
554
555}
#define M_PI

◆ MaxDiffusionSigma()

float SCT_DetailedSurfaceChargesGenerator::MaxDiffusionSigma ( const InDetDD::SiDetectorElement * element,
const EventContext & ctx ) const
private

max sigma diffusion

Definition at line 211 of file SCT_DetailedSurfaceChargesGenerator.cxx.

211 {
212 if (element) {
213 const double sensorThickness{element->thickness()};
214 return this->DiffusionSigma(sensorThickness, element, ctx);
215 } else {
216 ATH_MSG_INFO("Error: SiDetectorElement not set!");
217 return 0.;
218 }
219}
float DiffusionSigma(float zhit, const InDetDD::SiDetectorElement *element, const EventContext &ctx) const
calculate diffusion sigma from a gaussian dist scattered charge

◆ MaxDriftTime()

float SCT_DetailedSurfaceChargesGenerator::MaxDriftTime ( const InDetDD::SiDetectorElement * element,
const EventContext & ctx ) const
private

max drift charge equivalent to the detector thickness

Definition at line 198 of file SCT_DetailedSurfaceChargesGenerator.cxx.

198 {
199 if (element) {
200 const double sensorThickness{element->thickness()};
201 return this->DriftTime(sensorThickness, element, ctx);
202 } else {
203 ATH_MSG_INFO("Error: SiDetectorElement not set!");
204 return 0.;
205 }
206}

◆ mud_e()

double SCT_DetailedSurfaceChargesGenerator::mud_e ( double E) const
private

Definition at line 774 of file SCT_DetailedSurfaceChargesGenerator.cxx.

774 {
775 return m_vs_e/m_Ec_e/pow(1.+pow(E/m_Ec_e, m_beta_e), 1./m_beta_e);
776}

◆ mud_h()

double SCT_DetailedSurfaceChargesGenerator::mud_h ( double E) const
private

Definition at line 781 of file SCT_DetailedSurfaceChargesGenerator.cxx.

781 {
782 return m_vs_h/m_Ec_h/pow(1.+pow(E/m_Ec_h, m_beta_h), 1./m_beta_h);
783}

◆ process()

void SCT_DetailedSurfaceChargesGenerator::process ( const InDetDD::SiDetectorElement * element,
const TimedHitPtr< SiHit > & phit,
ISiSurfaceChargesInserter & inserter,
CLHEP::HepRandomEngine * rndmEngine,
const EventContext & ctx )
overrideprivatevirtual

create a list of surface charges from a hit

Definition at line 249 of file SCT_DetailedSurfaceChargesGenerator.cxx.

249 {
250 ATH_MSG_VERBOSE("SCT_DetailedSurfaceChargesGenerator::process starts");
251 const float p_eventTime{phit.eventTime()};
252 const unsigned short p_eventId{phit.eventId()};
253 processSiHit(element, *phit, inserter, p_eventTime, p_eventId, rndmEngine, ctx);
254}
#define ATH_MSG_VERBOSE(x)
void processSiHit(const InDetDD::SiDetectorElement *element, const SiHit &phit, ISiSurfaceChargesInserter &inserter, const float eventTime, const unsigned short eventID, CLHEP::HepRandomEngine *rndmEngine, const EventContext &ctx)
unsigned short eventId() const
the index of the component event in PileUpEventInfo.
Definition TimedHitPtr.h:47
float eventTime() const
t0 offset of the bunch xing containing the hit in ns.
Definition TimedHitPtr.h:55

◆ processSiHit()

void SCT_DetailedSurfaceChargesGenerator::processSiHit ( const InDetDD::SiDetectorElement * element,
const SiHit & phit,
ISiSurfaceChargesInserter & inserter,
const float eventTime,
const unsigned short eventID,
CLHEP::HepRandomEngine * rndmEngine,
const EventContext & ctx )
private

< extract the distance to the origin of the module to Time of flight

< timing set from jo to adjust (subtract) the timing

< tdrift: perpandicular drift time

< Taking into account the magnetic field

< dist on the surface from the hit point to the nearest strip (diode)

< Surface drift time

< Total drift time

Definition at line 259 of file SCT_DetailedSurfaceChargesGenerator.cxx.

259 {
260 const SCT_ModuleSideDesign* p_design{dynamic_cast<const SCT_ModuleSideDesign*>(&(element->design()))};
261 if (p_design==nullptr) {
262 ATH_MSG_ERROR("SCT_DetailedSurfaceChargesGenerator::process can not get " << p_design);
263 return;
264 }
265
266 //---**************************************
267 // Time of Flight Calculation - separate method?
268 //---**************************************
269 //--- Original calculation of Time of Flight of the particle Time needed by the particle to reach the sensor
270 float timeOfFlight{p_eventTime + hitTime(phit)}; // hitTime(phit): Open functions of InDetSimEvent/SiHit.h hitTime(phit) = phit->meanTime();
271
272 // Kondo 19/09/2007: Use the coordinate of the center of the module to calculate the time of flight
273 timeOfFlight -= (element->center().mag())/CLHEP::c_light;
274
276 if (m_tsubtract>-998.) timeOfFlight -= m_tsubtract;
277 //---**************************************
278
279 //Get HashId
280 const IdentifierHash hashId{element->identifyHash()};
281
282 //get sensor thickness and tg lorentz from SiDetectorDesign
283 const double sensorThickness{p_design->thickness()};
284 const double tanLorentz{m_lorentzAngleTool->getTanLorentzAngle(hashId,ctx)};
285
286 const CLHEP::Hep3Vector pos{phit.localStartPosition()};
287 const double xEta{pos[SiHit::xEta]};
288 const double xPhi{pos[SiHit::xPhi]};
289 const double xDep{pos[SiHit::xDep]};
290
291 const CLHEP::Hep3Vector endPos{phit.localEndPosition()};
292 const double cEta{endPos[SiHit::xEta]-xEta};
293 const double cPhi{endPos[SiHit::xPhi]-xPhi};
294 const double cDep{endPos[SiHit::xDep]-xDep};
295
296 double LargeStep{sqrt(cEta*cEta+cPhi*cPhi+cDep*cDep)};
297 int numberOfSteps{static_cast<int>(LargeStep/m_smallStepLength) + 1};
298 double steps{static_cast<double>(m_numberOfCharges*numberOfSteps)};
299 double e1{phit.energyLoss()/steps};
300 double q1{e1*m_siPropertiesTool->getSiProperties(hashId, ctx).electronHolePairsPerEnergy()};
301
302 //in the following, to test the code, we will use the original coordinate system of the SCTtest3SurfaceChargesGenerator x is eta y is phi z is depth
303 double xhit{xEta};
304 double yhit{xPhi};
305 double zhit{xDep};
306
307 double StepX{cEta/numberOfSteps};
308 double StepY{cPhi/numberOfSteps};
309 double StepZ{cDep/numberOfSteps};
310
311 //check the status of truth information for this SiHit
312 //some Truth information is cut for pile up events
313 const HepMcParticleLink trklink = HepMcParticleLink::getRedirectedLink(phit.particleLink(), p_eventId, ctx); // This link should now correctly resolve to the TruthEvent McEventCollection in the main StoreGateSvc.
314
316 if (phit.truthID() != 0 || phit.truthBarcode() != 0) { // if the hit was not caused by a delta-ray then one of these must be true
317 if (not trklink.isValid()) {
318 // TODO consider extending this check to reject links to
319 // GenEvents other than the first one in the McEventCollection,
320 // so that the digitization output doesn't change if pile-up
321 // truth is saved.
322 hitproc = SiCharge::cut_track;
323 }
324 }
325
326 double dstep{-0.5};
327 for (int istep{0}; istep<numberOfSteps; ++istep) {
328 dstep += 1.0;
329 double z1{zhit+StepZ*dstep};//(static_cast<float>(istep)+0.5);
330
331 //Distance between charge and readout side. p_design->readoutSide() is +1 if readout side is in +ve depth axis direction and visa-versa.
332 double zReadout{0.5*sensorThickness - p_design->readoutSide() * z1};
333
334 float tdrift{DriftTime(zReadout, element, ctx)};
335 if (tdrift>-2.0000002 and tdrift<-1.9999998) {
336 ATH_MSG_DEBUG("Checking for rounding errors in compression");
337 if ((std::abs(z1)-0.5*sensorThickness)<0.000010) {
338 ATH_MSG_DEBUG("Rounding error found attempting to correct it. z1 = " << std::fixed << std::setprecision(8) << z1);
339 if (z1<0.0) {
340 z1= 0.0000005-0.5*sensorThickness; //set new coordinate to be 0.5nm inside wafer volume.
341 } else {
342 z1 = 0.5*sensorThickness-0.0000005; //set new coordinate to be 0.5nm inside wafer volume.
343 }
344 zReadout = 0.5*sensorThickness - p_design->readoutSide() * z1;
345 tdrift=DriftTime(zReadout, element, ctx);
346 if (tdrift>-2.0000002 and tdrift<-1.9999998) {
347 ATH_MSG_WARNING("Attempt failed. Making no correction.");
348 } else {
349 ATH_MSG_DEBUG("Correction Successful! z1 = " << std::fixed << std::setprecision(8) << z1 << ", zReadout = " << zReadout << ", tdrift = " << tdrift);
350 }
351 } else {
352 ATH_MSG_DEBUG("No rounding error found. Making no correction.");
353 }
354 }
355 if (tdrift > 0.0) {
356 double x1{xhit+StepX*dstep};//(static_cast<float>(istep)+0.5);
357 double y1{yhit+StepY*dstep};//(static_cast<float>(istep)+0.5);
358
359 //PJ select driftmodel here
360 if (m_chargeDriftModel == defaultSCTModel or element->isEndcap()) { //Standard SCT driftmodel
361 y1 += tanLorentz*zReadout;
362 float diffusionSigma{DiffusionSigma(zReadout, element, ctx)};
363 for (int i{0}; i<m_numberOfCharges; ++i) {
364 float rx{CLHEP::RandGaussZiggurat::shoot(rndmEngine)};
365 double xd{x1+diffusionSigma*rx};
366 float ry{CLHEP::RandGaussZiggurat::shoot(rndmEngine)};
367 double yd{y1+diffusionSigma*ry};
368
369 SiLocalPosition position{element->hitLocalToLocal(xd, yd)};
370 if (p_design->inActiveArea(position)) {
371 float sdist{static_cast<float>(p_design->scaledDistanceToNearestDiode(position))};
372 float tsurf{this->SurfaceDriftTime(2.0*sdist)};
373 float totaltime{(m_tfix>-998.) ? m_tfix.value() : tdrift + timeOfFlight + tsurf};
374 inserter(SiSurfaceCharge(position, SiCharge(q1, totaltime, hitproc, trklink)));
375
376#ifdef SCT_DIG_DEBUG
377 ATH_MSG_INFO("Total Time: " << totaltime << " tdrift " << tdrift << " tsurf " << tsurf << " sdist " << sdist << " charge: " << q1);
378#endif
379
380 } else {
381#ifdef SCT_DIG_DEBUG
382 ATH_MSG_INFO(std::fixed << std::setprecision(8) << "Local position: " << position << " of the element is out of active area, charge = " << q1);
383#endif
384 }
385 } // end of loop on charges
386 } else if (m_chargeDriftModel == ehTransport and element->isBarrel()) { //TKs eh-transport model
387 //PJ calculates induced charge from e's and h's for 5 strips with 0.5 ns steps
388 // Set up local taka parameters, TK using cm...
389
390 const InDetDD::SCT_BarrelModuleSideDesign* b_design{dynamic_cast<const InDetDD::SCT_BarrelModuleSideDesign*>(&(element->design()))};
391 if (b_design==nullptr) {
392 ATH_MSG_ERROR("SCT_DetailedSurfaceChargesGenerator::process can not get " << b_design);
393 return;
394 }
395
396 double stripPitch{p_design->stripPitch()};
397 double stripPatternCentre{b_design->phiStripPatternCentre()};
398 double dstrip{(y1-stripPatternCentre)/stripPitch};
399
400 // need the distance from the nearest strips edge not centre, xtaka = 1/2*stripPitch
401 // centre of detector, y1=0, is in the middle of an interstrip gap
402 if (dstrip>0.) {
403 dstrip -= static_cast<double>(static_cast<int>(dstrip));
404 } else {
405 dstrip -= static_cast<double>(static_cast<int>(dstrip)-1);
406 }
407 double xtakadist{dstrip*stripPitch};
408 double x0{xtakadist/10.}; // [mm] to [cm]
409 double y0{(sensorThickness - zReadout)/10.}; // [mm] to [cm]
410
411#ifdef SCT_DIG_DEBUG
412 ATH_MSG_INFO("element->isBarrel(): " << element->isBarrel() << " stripPitch: " << stripPitch << " stripPatternCentre: " << stripPatternCentre);
413 ATH_MSG_INFO("tanLorentz, y1, xtakadist = " << tanLorentz << ", " << y1 << ", " << xtakadist);
414#endif
415 double Q_all[5][50]={};
416
417 // Electron and hole transportation starting at x0 and y0
418 holeTransport (x0, y0, Q_all[0], Q_all[1], Q_all[2], Q_all[3], Q_all[4], rndmEngine);
419 electronTransport(x0, y0, Q_all[0], Q_all[1], Q_all[2], Q_all[3], Q_all[4], rndmEngine);
420 //Loop over the strips and add the surface charges from each step and strip
421 for (int strip{-2}; strip<=2; strip++) {
422 double ystrip{y1 + strip*stripPitch};
423 SiLocalPosition position{element->hitLocalToLocal(x1, ystrip)};
424 if (p_design->inActiveArea(position)) {
425 for (int itq{0}; itq<50; itq++) {
426 const double charge =Q_all[strip+2][itq];
427 double time{(itq+1)*0.5 + timeOfFlight};
428 if (charge != 0.) inserter(SiSurfaceCharge(position, SiCharge(q1*charge,time,hitproc,trklink)));
429#ifdef SCT_DIG_DEBUG
430 ATH_MSG_DEBUG("strip: " << strip << " position, x,y:" << x1 << ", " << ystrip << " charge: " << q1*charge);
431#endif
432 }
433 } else {
434#ifdef SCT_DIG_DEBUG
435 ATH_MSG_INFO(std::fixed << std::setprecision(8) << "Local position: " << position << " of the element is out of active area, charge = " << q1);
436#endif
437 }
438 }
439 } else if (m_chargeDriftModel == fixedChargeMap and element->isBarrel()) { //TKs fixed charge map model
440 ATH_MSG_ERROR("Fixed charge map model, implementation not finished yet...");
441
442 const InDetDD::SCT_BarrelModuleSideDesign* b_design{dynamic_cast<const InDetDD::SCT_BarrelModuleSideDesign*>(&(element->design()))};
443 if (b_design==nullptr) {
444 ATH_MSG_ERROR("SCT_DetailedSurfaceChargesGenerator::process can not get " << b_design);
445 return;
446 }
447
448 // Set up local taka parameters, TK using um...I think
449 double stripPitch{p_design->stripPitch()};
450 double stripPatternCentre{b_design->phiStripPatternCentre()};
451 double dstrip{(y1-stripPatternCentre)/stripPitch};
452
453 // need the distance from the nearest strips edge not centre, xtaka = 1/2*stripPitch
454 // centre of detector, y1=0, is in the middle of an interstrip gap
455 if (dstrip>0.) {
456 dstrip -= static_cast<double>(static_cast<int>(dstrip));
457 } else {
458 dstrip -= static_cast<double>(static_cast<int>(dstrip)-1);
459 }
460 double xtakadist{dstrip*stripPitch};
461 double x0{xtakadist*1000.}; // [mm] to [um]
462 double y0{(sensorThickness - zReadout)*1000.}; // [mm] to [um]
463
464 //Loop over the strips and add the surface charges from each step and strip
465 for (int strip{-2}; strip<=2; strip++) {
466 double ystrip{y1 + strip*stripPitch};
467 SiLocalPosition position{element->hitLocalToLocal(x1, ystrip)};
468 if (p_design->inActiveArea(position)) {
469 //PJ best way of doing this...
470 double time{0.};
471 double charge{0.};
472 for (int it{0}; it<50; it++) {
473 time = 0.25 + 0.5*it;
474 charge = q1 * inducedCharge(strip, x0, y0, time);
475 if (charge != 0.) {
476 inserter(SiSurfaceCharge(position, SiCharge(charge, time+timeOfFlight, hitproc, trklink)));
477 }
478 }
479 } else {
480#ifdef SCT_DIG_DEBUG
481 ATH_MSG_INFO(std::fixed << std::setprecision(8) << "Local position: " << position << " of the element is out of active area, charge = " << q1);
482#endif
483 }
484 }
485 } else {
486 ATH_MSG_ERROR("Wrong chargeDriftModel " << m_chargeDriftModel << " 0, standard, 1 eh transport, 2 fixed charge map");
487 }
488 }
489 }
490 }
float hitTime(const AFP_SIDSimHit &hit)
Scalar mag() const
mag method
double thickness() const
Method which returns thickness of the silicon wafer.
int readoutSide() const
ReadoutSide.
double phiStripPatternCentre() const
centre of the strip pattern in phi
virtual double scaledDistanceToNearestDiode(const SiLocalPosition &chargePos) const =0
give distance to the nearest diode in units of pitch, from 0.0 to 0.5, this method should be fast as ...
virtual bool inActiveArea(const SiLocalPosition &chargePos, bool checkBondGap=true) const =0
check if the position is in active area
virtual double stripPitch(const SiLocalPosition &chargePos) const =0
give the strip pitch (dependence on position needed for forward)
virtual const SiDetectorDesign & design() const override final
access to the local description (inline):
virtual const Amg::Vector3D & center() const override final
Center in global coordinates.
Amg::Vector2D hitLocalToLocal(double xEta, double xPhi) const
Simulation/Hit local frame to reconstruction local frame.
void electronTransport(double &x0, double &y0, double *Q_m2, double *Q_m1, double *Q_00, double *Q_p1, double *Q_p2, CLHEP::HepRandomEngine *rndmEngine) const
void holeTransport(double &x0, double &y0, double *Q_m2, double *Q_m1, double *Q_00, double *Q_p1, double *Q_p2, CLHEP::HepRandomEngine *rndmEngine)
double inducedCharge(int &istrip, double &x, double &y, double &t) const
@ cut_track
Definition SiCharge.h:28
double energyLoss() const
Definition SiHit.h:175
int truthID() const
Definition SiHit.cxx:208
HepGeom::Point3D< double > localStartPosition() const
Definition SiHit.cxx:146
@ xPhi
Definition SiHit.h:162
@ xEta
Definition SiHit.h:162
@ xDep
Definition SiHit.h:162
int truthBarcode() const
Definition SiHit.cxx:202
const HepMcParticleLink & particleLink() const
Definition SiHit.h:190
HepGeom::Point3D< double > localEndPosition() const
Definition SiHit.cxx:153
time(flags, cells_name, *args, **kw)
double e1(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in 1st sampling

◆ setFixedTime()

virtual void SCT_DetailedSurfaceChargesGenerator::setFixedTime ( float fixedTime)
inlineoverrideprivatevirtual

Definition at line 87 of file SCT_DetailedSurfaceChargesGenerator.h.

87{ m_tfix.setValue(fixedTime); }

◆ SurfaceDriftTime()

float SCT_DetailedSurfaceChargesGenerator::SurfaceDriftTime ( float ysurf) const
private

Calculate of the surface drift time.

Definition at line 225 of file SCT_DetailedSurfaceChargesGenerator.cxx.

225 {
226 if (m_SurfaceDriftFlag) {
227 if ((ysurf>=0.0) and (ysurf<=m_distInterStrip)) {
228 float surfaceDriftTime{0.};
229 if (ysurf<m_distHalfInterStrip) {
230 const float y{ysurf/m_distHalfInterStrip};
231 surfaceDriftTime = m_tHalfwayDrift*y*y;
232 } else {
235 }
236 return surfaceDriftTime;
237 } else {
238 ATH_MSG_INFO(" ysurf out of range " << ysurf);
239 return -1.0;
240 }
241 } else {
242 return 0.0;
243 }
244}

Member Data Documentation

◆ m_beta_e

double SCT_DetailedSurfaceChargesGenerator::m_beta_e {}
private

Definition at line 175 of file SCT_DetailedSurfaceChargesGenerator.h.

175{};

◆ m_beta_h

double SCT_DetailedSurfaceChargesGenerator::m_beta_h {}
private

Definition at line 176 of file SCT_DetailedSurfaceChargesGenerator.h.

176{};

◆ m_biasVoltage

DoubleProperty SCT_DetailedSurfaceChargesGenerator::m_biasVoltage {this, "BiasVoltage", 150.}
private

Definition at line 141 of file SCT_DetailedSurfaceChargesGenerator.h.

141{this, "BiasVoltage", 150.};

◆ m_bulk_depth

double SCT_DetailedSurfaceChargesGenerator::m_bulk_depth {0.0285}
private

Definition at line 163 of file SCT_DetailedSurfaceChargesGenerator.h.

163{0.0285}; //<!285 micron, expressed in cm units

◆ m_chargeDriftModel

IntegerProperty SCT_DetailedSurfaceChargesGenerator::m_chargeDriftModel {this, "ChargeDriftModel", ehTransport, "use enum ChargeDriftMode"}
private

Definition at line 136 of file SCT_DetailedSurfaceChargesGenerator.h.

136{this, "ChargeDriftModel", ehTransport, "use enum ChargeDriftMode"};

◆ m_depletion_depth

double SCT_DetailedSurfaceChargesGenerator::m_depletion_depth {0.0285}
private

Definition at line 165 of file SCT_DetailedSurfaceChargesGenerator.h.

165{0.0285};

◆ m_depletionVoltage

DoubleProperty SCT_DetailedSurfaceChargesGenerator::m_depletionVoltage {this, "DepletionVoltage", 70.}
private

Definition at line 140 of file SCT_DetailedSurfaceChargesGenerator.h.

140{this, "DepletionVoltage", 70.};

◆ m_distHalfInterStrip

float SCT_DetailedSurfaceChargesGenerator::m_distHalfInterStrip {0.}
private

Half way distance inter strip.

Definition at line 158 of file SCT_DetailedSurfaceChargesGenerator.h.

158{0.};

◆ m_distInterStrip

float SCT_DetailedSurfaceChargesGenerator::m_distInterStrip {1.0}
private

Inter strip distance normalized to 1.

Definition at line 157 of file SCT_DetailedSurfaceChargesGenerator.h.

157{1.0};

◆ m_doHistoTrap

BooleanProperty SCT_DetailedSurfaceChargesGenerator::m_doHistoTrap {this, "doHistoTrap", false, "Allow filling of histos for charge trapping effect"}
private

Definition at line 131 of file SCT_DetailedSurfaceChargesGenerator.h.

131{this, "doHistoTrap", false, "Allow filling of histos for charge trapping effect"};

◆ m_doTrapping

BooleanProperty SCT_DetailedSurfaceChargesGenerator::m_doTrapping {this, "doTrapping", false, "Simulation of charge trapping effect"}
private

Definition at line 132 of file SCT_DetailedSurfaceChargesGenerator.h.

132{this, "doTrapping", false, "Simulation of charge trapping effect"};

◆ m_driftMobility

double SCT_DetailedSurfaceChargesGenerator::m_driftMobility {}
private

Definition at line 177 of file SCT_DetailedSurfaceChargesGenerator.h.

177{};

◆ m_e

double SCT_DetailedSurfaceChargesGenerator::m_e {1.602E-19}
private

Definition at line 170 of file SCT_DetailedSurfaceChargesGenerator.h.

170{1.602E-19}; //<! electron charge [Coulomb]

◆ m_Ec_e

double SCT_DetailedSurfaceChargesGenerator::m_Ec_e {6034.20429}
private

Definition at line 172 of file SCT_DetailedSurfaceChargesGenerator.h.

172{6034.20429};

◆ m_Ec_h

double SCT_DetailedSurfaceChargesGenerator::m_Ec_h {15366.52650}
private

Definition at line 174 of file SCT_DetailedSurfaceChargesGenerator.h.

174{15366.52650};

◆ m_eFieldModel

IntegerProperty SCT_DetailedSurfaceChargesGenerator::m_eFieldModel {this, "EFieldModel", FEMsolution, "use enum EFieldModel"}
private

Definition at line 137 of file SCT_DetailedSurfaceChargesGenerator.h.

137{this, "EFieldModel", FEMsolution, "use enum EFieldModel"};

◆ m_ExValue150

double SCT_DetailedSurfaceChargesGenerator::m_ExValue150[17][115] {{0.}}
private

Definition at line 181 of file SCT_DetailedSurfaceChargesGenerator.h.

181{{0.}};

◆ m_EyValue150

double SCT_DetailedSurfaceChargesGenerator::m_EyValue150[17][115] {{0.}}
private

Definition at line 182 of file SCT_DetailedSurfaceChargesGenerator.h.

182{{0.}};

◆ m_Fluence

DoubleProperty SCT_DetailedSurfaceChargesGenerator::m_Fluence {this, "Fluence", 0., "Fluence for charge trapping effect"}
private

Definition at line 133 of file SCT_DetailedSurfaceChargesGenerator.h.

133{this, "Fluence", 0., "Fluence for charge trapping effect"};

◆ m_h_efieldz

TProfile* SCT_DetailedSurfaceChargesGenerator::m_h_efieldz {nullptr}
private

Definition at line 198 of file SCT_DetailedSurfaceChargesGenerator.h.

198{nullptr};

◆ m_h_yEfield

TProfile2D* SCT_DetailedSurfaceChargesGenerator::m_h_yEfield {nullptr}
private

Definition at line 201 of file SCT_DetailedSurfaceChargesGenerator.h.

201{nullptr};

◆ m_h_yzEfield

TProfile2D* SCT_DetailedSurfaceChargesGenerator::m_h_yzEfield {nullptr}
private

Definition at line 200 of file SCT_DetailedSurfaceChargesGenerator.h.

200{nullptr};

◆ m_h_yzRamo

TProfile2D* SCT_DetailedSurfaceChargesGenerator::m_h_yzRamo {nullptr}
private

Definition at line 199 of file SCT_DetailedSurfaceChargesGenerator.h.

199{nullptr};

◆ m_h_zEfield

TProfile2D* SCT_DetailedSurfaceChargesGenerator::m_h_zEfield {nullptr}
private

Definition at line 202 of file SCT_DetailedSurfaceChargesGenerator.h.

202{nullptr};

◆ m_isOverlay

BooleanProperty SCT_DetailedSurfaceChargesGenerator::m_isOverlay {this, "isOverlay", false, "flag for overlay"}
private

Definition at line 147 of file SCT_DetailedSurfaceChargesGenerator.h.

147{this, "isOverlay", false, "flag for overlay"};

◆ m_kB

double SCT_DetailedSurfaceChargesGenerator::m_kB {1.38E-23}
private

Definition at line 169 of file SCT_DetailedSurfaceChargesGenerator.h.

169{1.38E-23}; //<! Boltzmann const [m^2*kg/s^2/K]

◆ m_lorentzAngleTool

ToolHandle<ISiLorentzAngleTool> SCT_DetailedSurfaceChargesGenerator::m_lorentzAngleTool {this, "LorentzAngleTool", "SiLorentzAngleTool/SCTLorentzAngleTool", "Tool to retreive Lorentz angle"}
private

Definition at line 152 of file SCT_DetailedSurfaceChargesGenerator.h.

152{this, "LorentzAngleTool", "SiLorentzAngleTool/SCTLorentzAngleTool", "Tool to retreive Lorentz angle"};

◆ m_magneticField

DoubleProperty SCT_DetailedSurfaceChargesGenerator::m_magneticField {this, "MagneticField", -2.0}
private

Definition at line 142 of file SCT_DetailedSurfaceChargesGenerator.h.

142{this, "MagneticField", -2.0};

◆ m_numberOfCharges

IntegerProperty SCT_DetailedSurfaceChargesGenerator::m_numberOfCharges {this, "NumberOfCharges", 1}
private

number of charges

Definition at line 121 of file SCT_DetailedSurfaceChargesGenerator.h.

121{this, "NumberOfCharges", 1};

◆ m_PotentialValue

double SCT_DetailedSurfaceChargesGenerator::m_PotentialValue[81][115] {{0.}}
private

Definition at line 180 of file SCT_DetailedSurfaceChargesGenerator.h.

180{{0.}};

◆ m_sensorTemperature

DoubleProperty SCT_DetailedSurfaceChargesGenerator::m_sensorTemperature {this, "SensorTemperature", 0.+CLHEP::STP_Temperature}
private

Definition at line 143 of file SCT_DetailedSurfaceChargesGenerator.h.

143{this, "SensorTemperature", 0.+CLHEP::STP_Temperature};

◆ m_siConditionsTool

ToolHandle<ISiliconConditionsTool> SCT_DetailedSurfaceChargesGenerator::m_siConditionsTool {this, "SiConditionsTool", "SCT_SiliconConditionsTool", "Tool to retrieve SCT silicon information"}
private

Definition at line 151 of file SCT_DetailedSurfaceChargesGenerator.h.

151{this, "SiConditionsTool", "SCT_SiliconConditionsTool", "Tool to retrieve SCT silicon information"};

◆ m_siPropertiesTool

ToolHandle<ISiPropertiesTool> SCT_DetailedSurfaceChargesGenerator::m_siPropertiesTool {this, "SiPropertiesTool", "SCT_SiPropertiesTool", "Tool to retrieve SCT silicon properties"}
private

Definition at line 150 of file SCT_DetailedSurfaceChargesGenerator.h.

150{this, "SiPropertiesTool", "SCT_SiPropertiesTool", "Tool to retrieve SCT silicon properties"};

◆ m_smallStepLength

FloatProperty SCT_DetailedSurfaceChargesGenerator::m_smallStepLength {this, "SmallStepLength", 5.}
private

max internal step along the larger G4 step

Definition at line 122 of file SCT_DetailedSurfaceChargesGenerator.h.

122{this, "SmallStepLength", 5.};

◆ m_strip_pitch

double SCT_DetailedSurfaceChargesGenerator::m_strip_pitch {0.0080}
private

Definition at line 164 of file SCT_DetailedSurfaceChargesGenerator.h.

164{0.0080}; //<! 80 micron, expressed in cm units

◆ m_stripCharge_dx

double SCT_DetailedSurfaceChargesGenerator::m_stripCharge_dx {1.}
private

Definition at line 194 of file SCT_DetailedSurfaceChargesGenerator.h.

194{1.};

◆ m_stripCharge_dy

double SCT_DetailedSurfaceChargesGenerator::m_stripCharge_dy {1.}
private

Definition at line 195 of file SCT_DetailedSurfaceChargesGenerator.h.

195{1.};

◆ m_stripCharge_iymax

int SCT_DetailedSurfaceChargesGenerator::m_stripCharge_iymax {285-1}
private

Definition at line 193 of file SCT_DetailedSurfaceChargesGenerator.h.

193{285-1};

◆ m_SurfaceDriftFlag

bool SCT_DetailedSurfaceChargesGenerator::m_SurfaceDriftFlag {false}
private

surface drift ON/OFF

Definition at line 160 of file SCT_DetailedSurfaceChargesGenerator.h.

160{false};

◆ m_tfix

FloatProperty SCT_DetailedSurfaceChargesGenerator::m_tfix {this, "FixedTime", -999., "ixed time"}
private

Definition at line 127 of file SCT_DetailedSurfaceChargesGenerator.h.

127{this, "FixedTime", -999., "ixed time"};

◆ m_tHalfwayDrift

float SCT_DetailedSurfaceChargesGenerator::m_tHalfwayDrift {0.}
private

Surface drift time.

Definition at line 156 of file SCT_DetailedSurfaceChargesGenerator.h.

156{0.};

◆ m_thistSvc

ServiceHandle<ITHistSvc> SCT_DetailedSurfaceChargesGenerator::m_thistSvc {this, "THistSvc", "THistSvc"}
private

Definition at line 154 of file SCT_DetailedSurfaceChargesGenerator.h.

154{this, "THistSvc", "THistSvc"};

◆ m_transportTimeMax

DoubleProperty SCT_DetailedSurfaceChargesGenerator::m_transportTimeMax {this, "TransportTimeMax", 25.0}
private

Definition at line 145 of file SCT_DetailedSurfaceChargesGenerator.h.

145{this, "TransportTimeMax", 25.0};

◆ m_transportTimeStep

DoubleProperty SCT_DetailedSurfaceChargesGenerator::m_transportTimeStep {this, "TransportTimeStep", 0.25}
private

Definition at line 144 of file SCT_DetailedSurfaceChargesGenerator.h.

144{this, "TransportTimeStep", 0.25};

◆ m_tsubtract

FloatProperty SCT_DetailedSurfaceChargesGenerator::m_tsubtract {this, "SubtractTime", -999., "subtract drift time from mid gap"}
private

Definition at line 128 of file SCT_DetailedSurfaceChargesGenerator.h.

128{this, "SubtractTime", -999., "subtract drift time from mid gap"};

◆ m_tSurfaceDrift

FloatProperty SCT_DetailedSurfaceChargesGenerator::m_tSurfaceDrift {this, "SurfaceDriftTime", 10., "max surface drift time"}
private

related to the surface drift

Definition at line 125 of file SCT_DetailedSurfaceChargesGenerator.h.

125{this, "SurfaceDriftTime", 10., "max surface drift time"};

◆ m_vs_e

double SCT_DetailedSurfaceChargesGenerator::m_vs_e {11615084.7393}
private

Definition at line 171 of file SCT_DetailedSurfaceChargesGenerator.h.

171{11615084.7393}; //<! mobility at 273.15K

◆ m_vs_h

double SCT_DetailedSurfaceChargesGenerator::m_vs_h {8761659.83530}
private

Definition at line 173 of file SCT_DetailedSurfaceChargesGenerator.h.

173{8761659.83530}; //<! hole mobility at 273.15K

◆ m_y_origin_min

double SCT_DetailedSurfaceChargesGenerator::m_y_origin_min {0.0}
private

Definition at line 166 of file SCT_DetailedSurfaceChargesGenerator.h.

166{0.0}; //<! zero unless under-depleted

The documentation for this class was generated from the following files: