|
ATLAS Offline Software
|
#include <SCT_FrontEnd.h>
|
| SCT_FrontEnd (const std::string &type, const std::string &name, const IInterface *parent) |
| constructor More...
|
|
virtual | ~SCT_FrontEnd ()=default |
| Destructor. More...
|
|
virtual StatusCode | initialize () override |
| AlgTool InterfaceID. More...
|
|
virtual StatusCode | finalize () override |
| AlgTool finalize. More...
|
|
virtual void | process (SiChargedDiodeCollection &collection, CLHEP::HepRandomEngine *rndmEngine) const override |
| process the collection of pre digits: needed to go through all single-strip pre-digits to calculate the amplifier response add noise (this could be moved elsewhere later) apply threshold do clustering stripMax is for benefit of ITkStrips which can have different numbers of strips for module - for SCT this is always 768 More...
|
|
StatusCode | doSignalChargeForHits (SiChargedDiodeCollection &collectione, SCT_FrontEndData &data, const int &stripMax) const |
|
StatusCode | doThresholdCheckForRealHits (SiChargedDiodeCollection &collectione, SCT_FrontEndData &data, const int &stripMax) const |
|
StatusCode | doThresholdCheckForCrosstalkHits (SiChargedDiodeCollection &collection, SCT_FrontEndData &data, const int &stripMax) const |
|
StatusCode | doClustering (SiChargedDiodeCollection &collection, SCT_FrontEndData &data, const int &stripMax) const |
|
StatusCode | prepareGainAndOffset (SiChargedDiodeCollection &collection, const Identifier &moduleId, CLHEP::HepRandomEngine *rndmEngine, SCT_FrontEndData &data, const int &stripMax) const |
|
StatusCode | prepareGainAndOffset (SiChargedDiodeCollection &collection, int side, const Identifier &moduleId, CLHEP::HepRandomEngine *rndmEngine, SCT_FrontEndData &data, const int &stripMax) const |
|
StatusCode | randomNoise (SiChargedDiodeCollection &collection, const Identifier &moduleId, CLHEP::HepRandomEngine *rndmEngine, SCT_FrontEndData &data, const int &stripMax) const |
|
StatusCode | randomNoise (SiChargedDiodeCollection &collection, const Identifier &moduleId, int side, CLHEP::HepRandomEngine *rndmEngine, SCT_FrontEndData &data, const int &stripMax) const |
|
StatusCode | addNoiseDiode (SiChargedDiodeCollection &collection, int strip, int tbin) const |
|
StatusCode | initVectors (int strips, SCT_FrontEndData &data) const |
|
|
static float | meanValue (std::vector< float > &calibDataVect) |
|
|
FloatProperty | m_NoiseBarrel {this, "NoiseBarrel", 1500.0, "Noise factor, Barrel (in the case of no use of calibration data)"} |
|
FloatProperty | m_NoiseBarrel3 {this, "NoiseBarrel3", 1541.0, "Noise factor, Barrel3 (in the case of no use of calibration data)"} |
|
FloatProperty | m_NoiseInners {this, "NoiseInners", 1090.0, "Noise factor, EC Inners (in the case of no use of calibration data)"} |
|
FloatProperty | m_NoiseMiddles {this, "NoiseMiddles", 1557.0, "Noise factor, EC Middles (in the case of no use of calibration data)"} |
|
FloatProperty | m_NoiseShortMiddles {this, "NoiseShortMiddles", 940.0, "Noise factor, EC Short Middles (in the case of no use of calibration data)"} |
|
FloatProperty | m_NoiseOuters {this, "NoiseOuters", 1618.0, "Noise factor, Ec Outers (in the case of no use of calibration data)"} |
|
DoubleProperty | m_NOBarrel {this, "NOBarrel", 1.5e-5, "Noise factor, Barrel (in the case of no use of calibration data)"} |
|
DoubleProperty | m_NOBarrel3 {this, "NOBarrel3", 2.1e-5, "Noise factor, Barrel3 (in the case of no use of calibration data)"} |
|
DoubleProperty | m_NOInners {this, "NOInners", 5.0e-9, "Noise Occupancy, EC Inners (in the case of no use of calibration data)"} |
|
DoubleProperty | m_NOMiddles {this, "NOMiddles", 2.7e-5, "Noise Occupancy, EC Middles (in the case of no use of calibration data)"} |
|
DoubleProperty | m_NOShortMiddles {this, "NOShortMiddles", 2.0e-9, "Noise Occupancy, EC Short Middles (in the case of no use of calibration data)"} |
|
DoubleProperty | m_NOOuters {this, "NOOuters", 3.5e-5, "Noise Occupancy, Ec Outers (in the case of no use of calibration data)"} |
|
BooleanProperty | m_NoiseOn {this, "NoiseOn", true, "To know if noise is on or off when using calibration data"} |
|
BooleanProperty | m_analogueNoiseOn {this, "AnalogueNoiseOn", true, "To know if analogue noise is on or off"} |
|
FloatProperty | m_GainRMS {this, "GainRMS", 0.031, "Gain spread parameter within the strips for a given Chip gain"} |
|
FloatProperty | m_Ospread {this, "Ospread", 0.0001, "offset spread within the strips for a given Chip offset"} |
|
FloatProperty | m_OGcorr {this, "OffsetGainCorrelation", 0.00001, "Gain/offset correlation for the strips"} |
|
FloatProperty | m_Threshold {this, "Threshold", 1.0, "Threshold"} |
|
FloatProperty | m_timeOfThreshold {this, "TimeOfThreshold", 30.0, "Threshold time"} |
|
ShortProperty | m_data_compression_mode {this, "DataCompressionMode", Edge_01X, "Front End Data Compression Mode: 1 is level mode X1X (default), 2 is edge mode 01X, 3 is any hit mode (1XX|X1X|XX1)"} |
|
ShortProperty | m_data_readout_mode {this, "DataReadOutMode", Condensed, "Front End Data Read out mode Mode: 0 is condensed mode and 1 is expanded mode"} |
|
BooleanProperty | m_useCalibData {this, "UseCalibData", true, "Flag to set the use of calibration data for noise, Gain,offset etc."} |
|
ToolHandle< IAmplifier > | m_sct_amplifier {this, "SCT_Amp", "SCT_Amp", "Handle the Amplifier tool"} |
| Handle the Amplifier tool. More...
|
|
ToolHandle< ISCT_ReadCalibChipDataTool > | m_ReadCalibChipDataTool {this, "SCT_ReadCalibChipDataTool", "SCT_ReadCalibChipDataTool", "Tool to retrieve chip calibration information"} |
| Handle to the Calibration ConditionsTool. More...
|
|
const InDetDD::SCT_DetectorManager * | m_SCTdetMgr {nullptr} |
| Handle to SCT detector manager. More...
|
|
const SCT_ID * | m_sct_id {nullptr} |
| Handle to SCT ID helper. More...
|
|
StringProperty | m_detMgrName {this, "DetectorManager", "SCT", "Name of DetectorManager to retrieve"} |
|
Definition at line 70 of file SCT_FrontEnd.h.
◆ CompressionMode
Enumerator |
---|
Level_X1X | |
Edge_01X | |
AnyHit_1XX_X1X_XX1 | |
Definition at line 107 of file SCT_FrontEnd.h.
◆ ReadOutMode
◆ SCT_FrontEnd()
SCT_FrontEnd::SCT_FrontEnd |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
◆ ~SCT_FrontEnd()
virtual SCT_FrontEnd::~SCT_FrontEnd |
( |
| ) |
|
|
virtualdefault |
◆ addNoiseDiode()
Definition at line 969 of file SCT_FrontEnd.cxx.
972 collection.
add(ndiode, noiseCharge);
976 if (NoiseDiode ==
nullptr) {
977 return StatusCode::FAILURE;
980 return StatusCode::SUCCESS;
◆ doClustering()
Definition at line 875 of file SCT_FrontEnd.cxx.
888 if (
data.m_StripHitsOnWafer[
strip] > 0) {
891 int clusterFirstStrip =
strip;
899 int lastStrip1DInRow = 0;
900 for (
int i = 0;
i <
row + 1; ++
i) {
904 while (
strip < lastStrip1DInRow-1 and
data.m_StripHitsOnWafer[
strip +1] > 0) {
907 int clusterLastStrip =
strip;
909 clusterSize = (clusterLastStrip - clusterFirstStrip) + 1;
910 hitStrip =
SiCellId(clusterFirstStrip);
915 for (
int i = clusterFirstStrip+1;
i <= clusterLastStrip; ++
i) {
920 PreviousHitDiode = &HitDiode2;
924 }
while (
strip < strip_max);
930 if (
data.m_StripHitsOnWafer[
strip] > 0) {
936 for (
int newStrip=
strip+1; newStrip<strip_max; newStrip++) {
937 if (not (
data.m_StripHitsOnWafer[newStrip]>0))
break;
943 previousHitDiode = &newHitDiode;
951 ", HitInfo(1=real, 2=crosstalk, 3=noise): " <<
955 strip += clusterSize;
956 }
while (
strip < strip_max);
966 return StatusCode::SUCCESS;
◆ doSignalChargeForHits()
Definition at line 646 of file SCT_FrontEnd.cxx.
661 std::vector<float>
response(bin_max);
665 for (; i_chargedDiode != i_chargedDiode_end; ++i_chargedDiode) {
668 unsigned int flagmask = diode.
flag() & 0xFE;
681 for (
short bin = 0;
bin < bin_max; ++
bin) {
686 for (
short bin = 0;
bin < bin_max; ++
bin) {
687 if (
strip + 1 < strip_max) {
697 for (
short bin = 0;
bin < bin_max; ++
bin) {
702 for (
short bin = 0;
bin < bin_max; ++
bin) {
703 if (
strip + 1 < strip_max) {
718 return StatusCode::SUCCESS;
◆ doThresholdCheckForCrosstalkHits()
Definition at line 799 of file SCT_FrontEnd.cxx.
808 if (
data.m_StripHitsOnWafer[
strip] != 0) {
820 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (5)");
824 int have_hit_bin = 0;
835 if (have_hit_bin == 2 or have_hit_bin == 3 or have_hit_bin == 6 or have_hit_bin == 7) {
838 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (6)");
844 if (have_hit_bin == 2 or have_hit_bin == 3) {
847 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (7)");
853 if (have_hit_bin == 0) {
859 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (8)");
863 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (9)");
872 return StatusCode::SUCCESS;
◆ doThresholdCheckForRealHits()
Definition at line 721 of file SCT_FrontEnd.cxx.
729 for (; i_chargedDiode != i_chargedDiode_end; ++i_chargedDiode) {
739 }
else if (((0x10 & diode.
flag()) == 0x10) or ((0x4 & diode.
flag()) == 0x4)) {
747 int have_hit_bin = 0;
757 if (((0x10 & diode.
flag()) == 0x10) || ((0x4 & diode.
flag()) == 0x4)) {
761 if (have_hit_bin == 2 or have_hit_bin == 3 or have_hit_bin == 6 or have_hit_bin == 7) {
769 if (have_hit_bin == 2 or have_hit_bin == 3) {
777 if (have_hit_bin == 0) {
793 return StatusCode::SUCCESS;
◆ finalize()
StatusCode SCT_FrontEnd::finalize |
( |
| ) |
|
|
overridevirtual |
AlgTool finalize.
Definition at line 101 of file SCT_FrontEnd.cxx.
105 return StatusCode::SUCCESS;
◆ initialize()
StatusCode SCT_FrontEnd::initialize |
( |
| ) |
|
|
overridevirtual |
AlgTool InterfaceID.
AlgTool initialize
Definition at line 36 of file SCT_FrontEnd.cxx.
38 ATH_MSG_FATAL(
"AnalogueNoiseOn/m_analogueNoiseOn should be true if NoiseOn/m_NoiseOn is true.");
39 return StatusCode::FAILURE;
59 constexpr
float fC = 6242.2;
80 <<
" is invalid. Abort this job!!!");
81 return StatusCode::FAILURE;
85 <<
" is invalid. Abort this job!!!");
86 return StatusCode::FAILURE;
92 <<
" requires timing information."
94 <<
" (Condensed) does not keep timing information. Abort this job!!!");
95 return StatusCode::FAILURE;
98 return StatusCode::SUCCESS;
◆ initVectors()
StatusCode SCT_FrontEnd::initVectors |
( |
int |
strips, |
|
|
SCT_FrontEndData & |
data |
|
) |
| const |
Definition at line 111 of file SCT_FrontEnd.cxx.
112 data.m_GainFactor.resize(strips);
115 data.m_Analogue[0].resize(strips);
116 data.m_Analogue[1].resize(strips);
118 data.m_Analogue[0].resize(strips);
119 data.m_Analogue[1].resize(strips);
120 data.m_Analogue[2].resize(strips);
123 return StatusCode::SUCCESS;
◆ meanValue()
float SCT_FrontEnd::meanValue |
( |
std::vector< float > & |
calibDataVect | ) |
|
|
static |
Definition at line 983 of file SCT_FrontEnd.cxx.
984 float mean_value = 0.0;
986 const unsigned int vec_size = calibDataVect.size();
989 if (calibDataVect[
i] > 0.1) {
990 mean_value += calibDataVect[
i];
998 return mean_value / nData;
◆ prepareGainAndOffset() [1/2]
Definition at line 129 of file SCT_FrontEnd.cxx.
133 float A = 4.0f *
W *
W + 1.0f;
134 float x1 = (
A - std::sqrt(
A)) / (2.0
f *
A);
135 float sinfi = std::sqrt(
x1);
136 float cosfi = sqrt(1.0 -
x1);
141 float S1 = std::sqrt((
S + D) * 0.5
f);
142 float S2 = std::sqrt((
S - D) * 0.5
f);
156 switch (moduleType) {
175 ATH_MSG_ERROR(
"moduleType(eta): " << moduleType <<
" unknown, using barrel");
185 for (; i_chargedDiode != i_chargedDiode_end; ++i_chargedDiode) {
188 unsigned int flagmask = diode.
flag() & 0xFE;
198 for (;
i < i_end;
i++) {
200 if (
data.m_Analogue[1][
i] <= 0.0) {
201 float g = CLHEP::RandGaussZiggurat::shoot(rndmEngine, 0.0,
S1);
202 float o = CLHEP::RandGaussZiggurat::shoot(rndmEngine, 0.0,
S2);
204 data.m_GainFactor[
i] = 1.0f + (cosfi *
g + sinfi * o);
206 float offset_val = (cosfi * o - sinfi *
g);
208 float noise_val = Noise *
mode;
212 data.m_Analogue[0][
i] = offset_val + noise_val * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
213 data.m_Analogue[1][
i] = offset_val + noise_val * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
215 data.m_Analogue[0][
i] = offset_val + noise_val * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
216 data.m_Analogue[1][
i] = offset_val + noise_val * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
217 data.m_Analogue[2][
i] = offset_val + noise_val * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
225 return StatusCode::SUCCESS;
◆ prepareGainAndOffset() [2/2]
Definition at line 232 of file SCT_FrontEnd.cxx.
238 std::vector<float> noiseByChipVect(6, 0.0);
245 if (gainByChipVect.empty() or noiseByChipVect.empty()) {
246 ATH_MSG_DEBUG(
"No calibration data in cond DB for module " << moduleId <<
" using JO values");
248 return StatusCode::FAILURE;
250 return StatusCode::SUCCESS;
255 float gainMeanValue =
meanValue(gainByChipVect);
256 if (gainMeanValue < 0.0) {
257 ATH_MSG_DEBUG(
"All chip gain values are 0 for module " << moduleId <<
" using JO values");
259 return StatusCode::FAILURE;
261 return StatusCode::SUCCESS;
265 std::vector<float>
gain(6, 0.0);
266 std::vector<float>
offset(6, 0.0);
267 std::vector<float>
S1(6, 0.0);
268 std::vector<float>
S2(6, 0.0);
269 std::vector<float> sinfi(6, 0.0);
270 std::vector<float> cosfi(6, 0.0);
272 float offsetRMS = 0.0;
274 for (
int i = 0;
i < 6; ++
i) {
276 if (gainByChipVect[
i] > 0.1) {
277 gain[
i] = gainByChipVect[
i] / gainMeanValue;
279 gainRMS = gainRMSByChipVect[
i] / gainMeanValue;
282 gain[
i] = 55.0f / gainMeanValue;
284 gainRMS = 1.3f / gainMeanValue;
288 float W =
m_OGcorr * gainRMS * offsetRMS / (gainRMS * gainRMS - offsetRMS * offsetRMS);
289 float A = 4.0f *
W *
W + 1.0f;
290 float x1 = (
A - std::sqrt(
A)) / (2.0
f *
A);
291 sinfi[
i] = std::sqrt(
x1);
292 cosfi[
i] = std::sqrt(1.0
f -
x1);
294 float S = gainRMS * gainRMS + offsetRMS * offsetRMS;
295 float D = (gainRMS * gainRMS - offsetRMS * offsetRMS) / (cosfi[
i] * cosfi[
i] - sinfi[
i] * sinfi[
i]);
296 S1[
i] = std::sqrt((
S + D) / 2.0
f);
297 S2[
i] = std::sqrt((
S - D) / 2.0
f);
304 for (; i_chargedDiode != i_chargedDiode_end; ++i_chargedDiode) {
307 unsigned int flagmask = diode.
flag() & 0xFE;
318 for (;
i < i_end;
i++) {
320 if (
data.m_Analogue[1][
i] <= 0.0) {
323 float g = CLHEP::RandGaussZiggurat::shoot(rndmEngine, 0.0,
S1[chip]);
324 float o = CLHEP::RandGaussZiggurat::shoot(rndmEngine, 0.0,
S2[chip]);
326 data.m_GainFactor[
i] =
gain[chip] + (cosfi[chip] *
g + sinfi[chip] * o);
328 float offset_val =
offset[chip] + (cosfi[chip] * o - sinfi[chip] *
g);
330 float noise_val = noiseByChipVect[chip];
334 data.m_Analogue[0][
i] = offset_val + noise_val * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
335 data.m_Analogue[1][
i] = offset_val + noise_val * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
337 data.m_Analogue[0][
i] = offset_val + noise_val * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
338 data.m_Analogue[1][
i] = offset_val + noise_val * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
339 data.m_Analogue[2][
i] = offset_val + noise_val * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
347 return StatusCode::SUCCESS;
◆ process()
process the collection of pre digits: needed to go through all single-strip pre-digits to calculate the amplifier response add noise (this could be moved elsewhere later) apply threshold do clustering stripMax is for benefit of ITkStrips which can have different numbers of strips for module - for SCT this is always 768
Definition at line 575 of file SCT_FrontEnd.cxx.
584 const int strip_max = p_design->
cells();
592 data.m_StripHitsOnWafer.assign(strip_max, 0);
603 if (not collection.
empty()) {
630 if (StatusCode::SUCCESS !=
randomNoise(collection, moduleId,
side, rndmEngine,
data, strip_max)) {
634 if (StatusCode::SUCCESS !=
randomNoise(collection, moduleId, rndmEngine,
data,strip_max)) {
◆ randomNoise() [1/2]
Definition at line 353 of file SCT_FrontEnd.cxx.
356 double occupancy = 0.0;
357 double NoiseOccupancy = 0.0;
359 int nNoisyStrips = 0;
365 if (noise_expanded_mode) {
382 switch (moduleType) {
406 ATH_MSG_ERROR(
"moduleType(eta): " << moduleType <<
" unknown, using barrel");
412 int nEmptyStrips = 0;
413 std::vector<int> emptyStrips;
414 emptyStrips.reserve(strip_max);
415 for (
int i = 0;
i < strip_max;
i++) {
416 if (
data.m_StripHitsOnWafer[
i] == 0) {
417 emptyStrips.push_back(
i);
422 if (nEmptyStrips != 0) {
425 occupancy = CLHEP::RandGaussZiggurat::shoot(rndmEngine, NoiseOccupancy, NoiseOccupancy * 0.1);
429 const float fC = 6242.2;
432 nNoisyStrips = CLHEP::RandPoisson::shoot(rndmEngine, strip_max * occupancy *
mode);
435 if (nEmptyStrips < nNoisyStrips) {
436 nNoisyStrips = nEmptyStrips;
440 for (
int i = 0;
i < nNoisyStrips;
i++) {
441 int index = CLHEP::RandFlat::shootInt(rndmEngine, nEmptyStrips -
i);
444 emptyStrips.erase(emptyStrips.begin()+
index);
446 ATH_MSG_ERROR(
index <<
"-th empty strip, strip " <<
strip <<
" should be empty but is not empty! Something is wrong!");
450 if (noise_expanded_mode) {
451 int noise_tbin = CLHEP::RandFlat::shootInt(rndmEngine, 3);
453 if (noise_tbin == 0) {
457 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (1)");
461 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (2)");
467 return StatusCode::SUCCESS;
◆ randomNoise() [2/2]
Definition at line 473 of file SCT_FrontEnd.cxx.
474 const int n_chips = 6;
475 const int chipStripmax = strip_max / n_chips;
476 std::vector<float> NOByChipVect(n_chips, 0.0);
477 std::vector<float> ENCByChipVect(n_chips, 0.0);
478 std::vector<int> nNoisyStrips(n_chips, 0);
484 if (noise_expanded_mode) {
493 if (NOByChipVect.empty()) {
494 ATH_MSG_DEBUG(
"No calibration data in cond DB for module " << moduleId <<
" using JO values");
495 if (StatusCode::SUCCESS !=
randomNoise(collection, moduleId, rndmEngine,
data,strip_max)) {
496 return StatusCode::FAILURE;
498 return StatusCode::SUCCESS;
501 for (
int i = 0;
i < n_chips;
i++) {
507 constexpr
float fC = 6242.2;
511 nNoisyStrips[
i] = CLHEP::RandPoisson::shoot(rndmEngine, chipStripmax * NOByChipVect[
i] *
mode);
516 for (
int chip_index = 0; chip_index < n_chips; ++chip_index) {
517 int chip_strip_offset = chipStripmax * chip_index;
520 int nEmptyStripsOnChip = 0;
521 std::vector<int> emptyStripsOnChip;
522 emptyStripsOnChip.reserve(chipStripmax);
523 for (
int i = 0;
i < chipStripmax;
i++) {
524 if (
data.m_StripHitsOnWafer[
i + chip_strip_offset] == 0) {
525 emptyStripsOnChip.push_back(
i);
526 ++nEmptyStripsOnChip;
531 if (nEmptyStripsOnChip != 0) {
533 if (nEmptyStripsOnChip < nNoisyStrips[chip_index]) {
534 nNoisyStrips[chip_index] = nEmptyStripsOnChip;
538 for (
int i = 0;
i < nNoisyStrips[chip_index];
i++) {
539 int index = CLHEP::RandFlat::shootInt(rndmEngine, nEmptyStripsOnChip -
i);
540 int strip_on_chip = emptyStripsOnChip.at(
index);
541 emptyStripsOnChip.erase(emptyStripsOnChip.begin()+
index);
542 int strip = strip_on_chip + chip_strip_offset;
544 ATH_MSG_ERROR(
index <<
"-th empty strip, strip " <<
strip <<
" should be empty but is not empty! Something is wrong!");
548 if (noise_expanded_mode) {
550 int noise_tbin = CLHEP::RandFlat::shootInt(rndmEngine, 3);
552 if (noise_tbin == 0) {
556 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (3)");
560 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (4)");
567 return StatusCode::SUCCESS;
◆ m_analogueNoiseOn
BooleanProperty SCT_FrontEnd::m_analogueNoiseOn {this, "AnalogueNoiseOn", true, "To know if analogue noise is on or off"} |
|
private |
◆ m_data_compression_mode
ShortProperty SCT_FrontEnd::m_data_compression_mode {this, "DataCompressionMode", Edge_01X, "Front End Data Compression Mode: 1 is level mode X1X (default), 2 is edge mode 01X, 3 is any hit mode (1XX|X1X|XX1)"} |
|
private |
◆ m_data_readout_mode
ShortProperty SCT_FrontEnd::m_data_readout_mode {this, "DataReadOutMode", Condensed, "Front End Data Read out mode Mode: 0 is condensed mode and 1 is expanded mode"} |
|
private |
◆ m_detMgrName
StringProperty SCT_FrontEnd::m_detMgrName {this, "DetectorManager", "SCT", "Name of DetectorManager to retrieve"} |
|
private |
◆ m_GainRMS
FloatProperty SCT_FrontEnd::m_GainRMS {this, "GainRMS", 0.031, "Gain spread parameter within the strips for a given Chip gain"} |
|
private |
◆ m_NOBarrel
DoubleProperty SCT_FrontEnd::m_NOBarrel {this, "NOBarrel", 1.5e-5, "Noise factor, Barrel (in the case of no use of calibration data)"} |
|
private |
◆ m_NOBarrel3
DoubleProperty SCT_FrontEnd::m_NOBarrel3 {this, "NOBarrel3", 2.1e-5, "Noise factor, Barrel3 (in the case of no use of calibration data)"} |
|
private |
◆ m_NOInners
DoubleProperty SCT_FrontEnd::m_NOInners {this, "NOInners", 5.0e-9, "Noise Occupancy, EC Inners (in the case of no use of calibration data)"} |
|
private |
◆ m_NoiseBarrel
FloatProperty SCT_FrontEnd::m_NoiseBarrel {this, "NoiseBarrel", 1500.0, "Noise factor, Barrel (in the case of no use of calibration data)"} |
|
private |
◆ m_NoiseBarrel3
FloatProperty SCT_FrontEnd::m_NoiseBarrel3 {this, "NoiseBarrel3", 1541.0, "Noise factor, Barrel3 (in the case of no use of calibration data)"} |
|
private |
◆ m_NoiseInners
FloatProperty SCT_FrontEnd::m_NoiseInners {this, "NoiseInners", 1090.0, "Noise factor, EC Inners (in the case of no use of calibration data)"} |
|
private |
◆ m_NoiseMiddles
FloatProperty SCT_FrontEnd::m_NoiseMiddles {this, "NoiseMiddles", 1557.0, "Noise factor, EC Middles (in the case of no use of calibration data)"} |
|
private |
◆ m_NoiseOn
BooleanProperty SCT_FrontEnd::m_NoiseOn {this, "NoiseOn", true, "To know if noise is on or off when using calibration data"} |
|
private |
◆ m_NoiseOuters
FloatProperty SCT_FrontEnd::m_NoiseOuters {this, "NoiseOuters", 1618.0, "Noise factor, Ec Outers (in the case of no use of calibration data)"} |
|
private |
◆ m_NoiseShortMiddles
FloatProperty SCT_FrontEnd::m_NoiseShortMiddles {this, "NoiseShortMiddles", 940.0, "Noise factor, EC Short Middles (in the case of no use of calibration data)"} |
|
private |
◆ m_NOMiddles
DoubleProperty SCT_FrontEnd::m_NOMiddles {this, "NOMiddles", 2.7e-5, "Noise Occupancy, EC Middles (in the case of no use of calibration data)"} |
|
private |
◆ m_NOOuters
DoubleProperty SCT_FrontEnd::m_NOOuters {this, "NOOuters", 3.5e-5, "Noise Occupancy, Ec Outers (in the case of no use of calibration data)"} |
|
private |
◆ m_NOShortMiddles
DoubleProperty SCT_FrontEnd::m_NOShortMiddles {this, "NOShortMiddles", 2.0e-9, "Noise Occupancy, EC Short Middles (in the case of no use of calibration data)"} |
|
private |
◆ m_OGcorr
FloatProperty SCT_FrontEnd::m_OGcorr {this, "OffsetGainCorrelation", 0.00001, "Gain/offset correlation for the strips"} |
|
private |
◆ m_Ospread
FloatProperty SCT_FrontEnd::m_Ospread {this, "Ospread", 0.0001, "offset spread within the strips for a given Chip offset"} |
|
private |
◆ m_ReadCalibChipDataTool
Handle to the Calibration ConditionsTool.
Definition at line 134 of file SCT_FrontEnd.h.
◆ m_sct_amplifier
◆ m_sct_id
◆ m_SCTdetMgr
◆ m_Threshold
FloatProperty SCT_FrontEnd::m_Threshold {this, "Threshold", 1.0, "Threshold"} |
|
private |
◆ m_timeOfThreshold
FloatProperty SCT_FrontEnd::m_timeOfThreshold {this, "TimeOfThreshold", 30.0, "Threshold time"} |
|
private |
◆ m_useCalibData
BooleanProperty SCT_FrontEnd::m_useCalibData {this, "UseCalibData", true, "Flag to set the use of calibration data for noise, Gain,offset etc."} |
|
private |
The documentation for this class was generated from the following files:
FloatProperty m_timeOfThreshold
def retrieve(aClass, aKey=None)
simulation of the SCT front-end electronics working as a SiPreDigitsProcessor models response of ABCD...
char data[hepevt_bytes_allocation_ATLAS]
ShortProperty m_data_readout_mode
BooleanProperty m_NoiseOn
struct TBPatternUnitContext S1
ShortProperty m_data_compression_mode
StatusCode randomNoise(SiChargedDiodeCollection &collection, const Identifier &moduleId, CLHEP::HepRandomEngine *rndmEngine, SCT_FrontEndData &data, const int &stripMax) const
ToolHandle< ISCT_ReadCalibChipDataTool > m_ReadCalibChipDataTool
Handle to the Calibration ConditionsTool.
static float meanValue(std::vector< float > &calibDataVect)
void setNextInCluster(SiChargedDiode *nextInCluster)
constexpr ATH_ALWAYS_INLINE size_t vec_size()
Return the number of elements in a vectorized type.
const InDetDD::SiReadoutCellId & getReadoutCell() const
bool isValid() const
Test if its in a valid state.
SiChargedDiodeIterator end()
const SCT_ID * m_sct_id
Handle to SCT ID helper.
FloatProperty m_NoiseInners
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
int strip() const
Get strip number. Equivalent to phiIndex().
std::vector< SiCharge > list_t
StatusCode prepareGainAndOffset(SiChargedDiodeCollection &collection, const Identifier &moduleId, CLHEP::HepRandomEngine *rndmEngine, SCT_FrontEndData &data, const int &stripMax) const
SiChargedDiodeIterator begin()
int cells() const
number of readout stips within module side:
DoubleProperty m_NOMiddles
Identifier module_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
SiChargedDiodeMap::iterator SiChargedDiodeIterator
StatusCode initVectors(int strips, SCT_FrontEndData &data) const
virtual int row(int stripId1Dim) const
SiChargedDiode * find(const InDetDD::SiCellId &siId)
const list_t & chargeComposition() const
FloatProperty m_Threshold
virtual int diodesInRow(const int row) const
const SiTotalCharge & totalCharge() const
DoubleProperty m_NOBarrel3
ToolHandle< IAmplifier > m_sct_amplifier
Handle the Amplifier tool.
static void SetTimeBin(SiChargedDiode &chDiode, int time, MsgStream *log=nullptr)
static void belowThreshold(SiChargedDiode &chDiode, bool flag, bool mask=false)
StatusCode addNoiseDiode(SiChargedDiodeCollection &collection, int strip, int tbin) const
static int GetTimeBin(SiChargedDiode &chDiode)
FloatProperty m_NoiseShortMiddles
BooleanProperty m_useCalibData
static void ClusterUsed(SiChargedDiode &chDiode, bool flag)
StatusCode doThresholdCheckForCrosstalkHits(SiChargedDiodeCollection &collection, SCT_FrontEndData &data, const int &stripMax) const
FloatProperty m_NoiseBarrel
int layer_disk(const Identifier &id) const
StringProperty m_detMgrName
BooleanProperty m_analogueNoiseOn
FloatProperty m_NoiseMiddles
DoubleProperty m_NOBarrel
void add(const InDetDD::SiCellId &diode, const T &charge)
DoubleProperty m_NOOuters
DoubleProperty m_NOInners
StatusCode doThresholdCheckForRealHits(SiChargedDiodeCollection &collectione, SCT_FrontEndData &data, const int &stripMax) const
#define ATH_MSG_WARNING(x)
const InDetDD::SCT_DetectorManager * m_SCTdetMgr
Handle to SCT detector manager.
int eta_module(const Identifier &id) const
DoubleProperty m_NOShortMiddles
struct TBPatternUnitContext S2
int side(const Identifier &id) const
static void SetStripNum(SiChargedDiode &chDiode, int nstrip, MsgStream *log=nullptr)
FloatProperty m_NoiseBarrel3
StatusCode doSignalChargeForHits(SiChargedDiodeCollection &collectione, SCT_FrontEndData &data, const int &stripMax) const
FloatProperty m_NoiseOuters
StatusCode doClustering(SiChargedDiodeCollection &collection, SCT_FrontEndData &data, const int &stripMax) const
const InDetDD::DetectorDesign & design() const
virtual Identifier identify() const override final