CbmRoot
Loading...
Searching...
No Matches
CbmMvdSensorDataSheet.cxx
Go to the documentation of this file.
1/* Copyright (C) 2011-2016 Institut fuer Kernphysik, Goethe-Universitaet Frankfurt, Frankfurt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Michael Deveaux, Philipp Sitzmann [committer], Florian Uhlig */
4
5// -------------------------------------------------------------------------
6// ----- CbmMvdSensorDataSheet source file -----
7// ----- Created 31/01/11 by M. Deveaux -----
8// -------------------------------------------------------------------------
9
11
12#include "TMath.h"
13
14#include <Logger.h>
15
16#include <ostream> // for operator<<, stringstream, basic_ostream
17using std::endl;
18
19
20// ----- Default constructor -------------------------------------------
22 : TNamed()
23 , fMimosaName("DefaulSensor")
24 , fPixelPitchX(18.4e-4)
25 , fPixelPitchY(18.4e-4)
26 , fNPixelsX(0)
27 , fNPixelsY(0)
28 , fNPixels(0)
29 , fPixelSignX(1)
30 , fPixelSignY(1)
31 , fShutterSign(1)
32 , fIntegrationTime(50e3)
33 , fEpiTh(14e-4)
34 , fShaperNormalisationFactor(1)
35 , fChargeThreshold(1)
36 , fSignalRiseTime(nan("NotSet"))
37 , fSignalFallTime(nan("NotSet"))
38 , fNoise(0)
39 , fLandauMPV(8.62131e+02)
40 , fLandauSigma(2.e+02)
41 , fLandauGain(1.56)
42 , fLorentzPar0(4.12073e+02)
43 , fLorentzPar1(0.8e+00)
44 , fLorentzPar2(0.)
45 , fAdcDynamic(150)
46 , fAdcOffset(0)
47 , fAdcBits(1)
48 , fAdcSteps(TMath::Power(2, fAdcBits))
49 , fAdcStepSize(fAdcDynamic / fAdcSteps)
50 , fStatesPerBank(0)
51 , fStatesPerLine(0)
52 , fStatesPerFrame(0)
53 , fPixelsPerBank(0)
54 , fAnalogThreshold(-1)
55 , fValidData(kFALSE)
56
57
58{
59}
60
61// ----- Public method Print -------------------------------------------
62void CbmMvdSensorDataSheet::Print(Option_t* /*opt*/) const { LOG(info) << ToString(); }
63
65{
66 std::stringstream ss;
67 ss << " --- " << GetName() << "--------------------------------" << endl;
68 ss << " Technical Data:" << endl;
69 ss << "--------------------------" << endl;
70 ss << "Name of the sensor: " << fMimosaName << endl;
71 ss << "Pixel pitch (x/y) [µm]: " << fPixelPitchY * 1e4 << "/" << fPixelPitchY * 1e-4 << endl;
72 ss << "N Pixels (rows/cols): " << fNPixelsX << "/" << fNPixelsY << endl;
73 ss << "Thickness of active volume[µm]: " << fEpiTh * 1e4 << endl;
74 ss << "Integration time [µs]: " << fIntegrationTime * 1e6 << endl;
75 ss << "ADC resolution: " << fAdcBits << "bit ADC (1 = discriminator)" << endl;
76 ss << "Default noise [e ENC]: " << fNoise << endl;
77 ss << "Matrix size (x/y) [cm]: " << fPixelPitchX * fNPixelsX << " / " << fPixelPitchY * fNPixelsY << endl;
78 ss << endl;
79 ss << "Readout system: " << endl;
80 ss << "----------------" << endl;
81 ss << "PixelNmb X from left to right?: " << fPixelSignX << endl;
82 ss << "PixelNmb Y from up to down?: " << fPixelSignY << endl;
83 ss << "Rolling shutter from up to down?: " << fShutterSign << endl;
84 ss << endl;
85 ss << "ADC / SUZE -Settings: " << endl;
86 ss << "----------------" << endl;
87 ss << "ADC Range [e]: " << fAdcDynamic << endl;
88 ss << "ADC offset [e]: " << fAdcOffset << endl;
89 ss << "ADC stepsize [e]: " << fAdcStepSize << endl;
90 ss << "SUZE states per banks: " << fStatesPerBank << endl;
91 ss << "SUZE states per line : " << fStatesPerLine << endl;
92 ss << "SUZE states per frame: " << fStatesPerFrame << endl;
93 ss << "SUZE pixels per bank: " << fPixelsPerBank << endl;
94 ss << endl;
95 ss << "Data card properly initialized: " << fValidData << endl;
96 return ss.str();
97}
98
99// ----------- Methode ComputeCCE ----------------------------------
100// ----------- Computes the relative number of electrons being deposited at chargePointXYZ and collected by a diode at diodeXYZ
101// ----------- Standard implementation for backward compatibility based on Lorentz-Model.
102// ----------- See PhD Christina Dritsa for scientific details on this model.
103
104Double_t CbmMvdSensorDataSheet::ComputeCCE(Float_t chargePointX, Float_t chargePointY, Float_t /*chargePointZ*/,
105 Float_t diodeX, Float_t diodeY, Float_t /*diodeZ*/)
106{
107
108 return
109
110 (0.5 * fLorentzPar0 * fLorentzPar1 / TMath::Pi()
111 / TMath::Max(1.e-10,
112
113
114 ((chargePointX - diodeX) * (chargePointX - diodeX) / fPixelPitchX / fPixelPitchX)
115 + ((chargePointY - diodeY) * (chargePointY - diodeY) / fPixelPitchY / fPixelPitchY)
116 + 0.25 * fLorentzPar1 * fLorentzPar1)
117 + fLorentzPar2);
118
119 // Original Equation
120 // Float_t totCharge = (sPoint->charge * fLorentzNorm * (0.5 * fPar0 * fPar1 / TMath::Pi())
121 // / TMath::Max(1.e-10, (((Current[0] - xCentre) * (Current[0] - xCentre))
122 // + ((Current[1] - yCentre) * (Current[1] - yCentre)))
123 // / fPixelSize / fPixelSize
124 // + 0.25 * fPar1 * fPar1)
125 // + fPar2);
126}
127
129{
130
131 Int_t adcCharge;
132
133 if (charge < fAdcOffset) {
134 return 0;
135 };
136
137 adcCharge = int((charge - fAdcOffset) / fAdcStepSize);
138 if (adcCharge > fAdcSteps - 1) {
139 adcCharge = fAdcSteps - 1;
140 }
141
142 return adcCharge;
143}
144
ClassImp(CbmConverterManager)
virtual Double_t ComputeCCE(Float_t chargePointX, Float_t chargePointY, Float_t chargePointZ, Float_t diodeX, Float_t diodeY, Float_t diodeZ)
virtual Int_t ComputeAdcCharge(Float_t charge)
virtual void Print(Option_t *opt="") const