|
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 983 of file SCT_FrontEnd.cxx.
986 collection.
add(ndiode, noiseCharge);
990 if (NoiseDiode ==
nullptr) {
991 return StatusCode::FAILURE;
994 return StatusCode::SUCCESS;
◆ doClustering()
Definition at line 889 of file SCT_FrontEnd.cxx.
902 if (
data.m_StripHitsOnWafer[
strip] > 0) {
905 int clusterFirstStrip =
strip;
913 int lastStrip1DInRow = 0;
914 for (
int i = 0;
i <
row + 1; ++
i) {
918 while (
strip < lastStrip1DInRow-1 and
data.m_StripHitsOnWafer[
strip +1] > 0) {
921 int clusterLastStrip =
strip;
923 clusterSize = (clusterLastStrip - clusterFirstStrip) + 1;
924 hitStrip =
SiCellId(clusterFirstStrip);
929 for (
int i = clusterFirstStrip+1;
i <= clusterLastStrip; ++
i) {
934 PreviousHitDiode = &HitDiode2;
938 }
while (
strip < strip_max);
944 if (
data.m_StripHitsOnWafer[
strip] > 0) {
950 for (
int newStrip=
strip+1; newStrip<strip_max; newStrip++) {
951 if (not (
data.m_StripHitsOnWafer[newStrip]>0))
break;
957 previousHitDiode = &newHitDiode;
965 ", HitInfo(1=real, 2=crosstalk, 3=noise): " <<
969 strip += clusterSize;
970 }
while (
strip < strip_max);
980 return StatusCode::SUCCESS;
◆ doSignalChargeForHits()
Definition at line 660 of file SCT_FrontEnd.cxx.
675 std::vector<float>
response(bin_max);
679 for (; i_chargedDiode != i_chargedDiode_end; ++i_chargedDiode) {
682 unsigned int flagmask = diode.
flag() & 0xFE;
695 for (
short bin = 0;
bin < bin_max; ++
bin) {
700 for (
short bin = 0;
bin < bin_max; ++
bin) {
701 if (
strip + 1 < strip_max) {
711 for (
short bin = 0;
bin < bin_max; ++
bin) {
716 for (
short bin = 0;
bin < bin_max; ++
bin) {
717 if (
strip + 1 < strip_max) {
732 return StatusCode::SUCCESS;
◆ doThresholdCheckForCrosstalkHits()
Definition at line 813 of file SCT_FrontEnd.cxx.
822 if (
data.m_StripHitsOnWafer[
strip] != 0) {
834 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (5)");
838 int have_hit_bin = 0;
849 if (have_hit_bin == 2 or have_hit_bin == 3 or have_hit_bin == 6 or have_hit_bin == 7) {
852 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (6)");
858 if (have_hit_bin == 2 or have_hit_bin == 3) {
861 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (7)");
867 if (have_hit_bin == 0) {
873 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (8)");
877 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (9)");
886 return StatusCode::SUCCESS;
◆ doThresholdCheckForRealHits()
Definition at line 735 of file SCT_FrontEnd.cxx.
743 for (; i_chargedDiode != i_chargedDiode_end; ++i_chargedDiode) {
753 }
else if (((0x10 & diode.
flag()) == 0x10) or ((0x4 & diode.
flag()) == 0x4)) {
761 int have_hit_bin = 0;
771 if (((0x10 & diode.
flag()) == 0x10) || ((0x4 & diode.
flag()) == 0x4)) {
775 if (have_hit_bin == 2 or have_hit_bin == 3 or have_hit_bin == 6 or have_hit_bin == 7) {
783 if (have_hit_bin == 2 or have_hit_bin == 3) {
791 if (have_hit_bin == 0) {
807 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.
115 data.m_GainFactor.reserve(strips);
118 data.m_Analogue[0].reserve(strips);
119 data.m_Analogue[1].reserve(strips);
121 data.m_Analogue[0].reserve(strips);
122 data.m_Analogue[1].reserve(strips);
123 data.m_Analogue[2].reserve(strips);
126 return StatusCode::SUCCESS;
◆ meanValue()
float SCT_FrontEnd::meanValue |
( |
std::vector< float > & |
calibDataVect | ) |
|
|
static |
Definition at line 997 of file SCT_FrontEnd.cxx.
998 float mean_value = 0.0;
1000 const unsigned int vec_size = calibDataVect.size();
1003 if (calibDataVect[
i] > 0.1) {
1004 mean_value += calibDataVect[
i];
1012 return mean_value / nData;
◆ prepareGainAndOffset() [1/2]
Definition at line 132 of file SCT_FrontEnd.cxx.
136 float A = 4.0f *
W *
W + 1.0f;
137 float x1 = (
A - std::sqrt(
A)) / (2.0
f *
A);
138 float sinfi = std::sqrt(
x1);
139 float cosfi = sqrt(1.0 -
x1);
144 float S1 = std::sqrt((
S + D) * 0.5
f);
145 float S2 = std::sqrt((
S - D) * 0.5
f);
159 switch (moduleType) {
178 ATH_MSG_ERROR(
"moduleType(eta): " << moduleType <<
" unknown, using barrel");
188 for (; i_chargedDiode != i_chargedDiode_end; ++i_chargedDiode) {
191 unsigned int flagmask = diode.
flag() & 0xFE;
201 for (;
i < i_end;
i++) {
203 if (
data.m_Analogue[1][
i] <= 0.0) {
204 float g = CLHEP::RandGaussZiggurat::shoot(rndmEngine, 0.0,
S1);
205 float o = CLHEP::RandGaussZiggurat::shoot(rndmEngine, 0.0,
S2);
207 data.m_GainFactor[
i] = 1.0f + (cosfi *
g + sinfi * o);
209 float offset_val = (cosfi * o - sinfi *
g);
211 float noise_val = Noise *
mode;
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);
218 data.m_Analogue[0][
i] = offset_val + noise_val * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
219 data.m_Analogue[1][
i] = offset_val + noise_val * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
220 data.m_Analogue[2][
i] = offset_val + noise_val * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
228 return StatusCode::SUCCESS;
◆ prepareGainAndOffset() [2/2]
Definition at line 235 of file SCT_FrontEnd.cxx.
241 std::vector<float> noiseByChipVect(6, 0.0);
248 if (gainByChipVect.empty() or noiseByChipVect.empty()) {
249 ATH_MSG_DEBUG(
"No calibration data in cond DB for module " << moduleId <<
" using JO values");
251 return StatusCode::FAILURE;
253 return StatusCode::SUCCESS;
258 float gainMeanValue =
meanValue(gainByChipVect);
259 if (gainMeanValue < 0.0) {
260 ATH_MSG_DEBUG(
"All chip gain values are 0 for module " << moduleId <<
" using JO values");
262 return StatusCode::FAILURE;
264 return StatusCode::SUCCESS;
268 std::vector<float>
gain(6, 0.0);
269 std::vector<float>
offset(6, 0.0);
270 std::vector<float>
S1(6, 0.0);
271 std::vector<float>
S2(6, 0.0);
272 std::vector<float> sinfi(6, 0.0);
273 std::vector<float> cosfi(6, 0.0);
275 float offsetRMS = 0.0;
277 for (
int i = 0;
i < 6; ++
i) {
279 if (gainByChipVect[
i] > 0.1) {
280 gain[
i] = gainByChipVect[
i] / gainMeanValue;
282 gainRMS = gainRMSByChipVect[
i] / gainMeanValue;
285 gain[
i] = 55.0f / gainMeanValue;
287 gainRMS = 1.3f / gainMeanValue;
291 float W =
m_OGcorr * gainRMS * offsetRMS / (gainRMS * gainRMS - offsetRMS * offsetRMS);
292 float A = 4.0f *
W *
W + 1.0f;
293 float x1 = (
A - std::sqrt(
A)) / (2.0
f *
A);
294 sinfi[
i] = std::sqrt(
x1);
295 cosfi[
i] = std::sqrt(1.0
f -
x1);
297 float S = gainRMS * gainRMS + offsetRMS * offsetRMS;
298 float D = (gainRMS * gainRMS - offsetRMS * offsetRMS) / (cosfi[
i] * cosfi[
i] - sinfi[
i] * sinfi[
i]);
299 S1[
i] = std::sqrt((
S + D) / 2.0
f);
300 S2[
i] = std::sqrt((
S - D) / 2.0
f);
307 for (; i_chargedDiode != i_chargedDiode_end; ++i_chargedDiode) {
310 unsigned int flagmask = diode.
flag() & 0xFE;
321 for (;
i < i_end;
i++) {
323 if (
data.m_Analogue[1][
i] <= 0.0) {
326 float g = CLHEP::RandGaussZiggurat::shoot(rndmEngine, 0.0,
S1[chip]);
327 float o = CLHEP::RandGaussZiggurat::shoot(rndmEngine, 0.0,
S2[chip]);
329 data.m_GainFactor[
i] =
gain[chip] + (cosfi[chip] *
g + sinfi[chip] * o);
331 float offset_val =
offset[chip] + (cosfi[chip] * o - sinfi[chip] *
g);
333 float noise_val = noiseByChipVect[chip];
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);
340 data.m_Analogue[0][
i] = offset_val + noise_val * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
341 data.m_Analogue[1][
i] = offset_val + noise_val * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
342 data.m_Analogue[2][
i] = offset_val + noise_val * CLHEP::RandGaussZiggurat::shoot(rndmEngine);
350 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 578 of file SCT_FrontEnd.cxx.
587 const int strip_max = p_design->
cells();
595 data.m_StripHitsOnWafer.assign(strip_max, 0);
599 for (
int i = 0;
i < strip_max; ++
i) {
600 data.m_Analogue[0][
i] = 0.0;
601 data.m_Analogue[1][
i] = 0.0;
604 for (
int i = 0;
i < strip_max; ++
i) {
605 data.m_Analogue[0][
i] = 0.0;
606 data.m_Analogue[1][
i] = 0.0;
607 data.m_Analogue[2][
i] = 0.0;
617 if (not collection.
empty()) {
644 if (StatusCode::SUCCESS !=
randomNoise(collection, moduleId,
side, rndmEngine,
data, strip_max)) {
648 if (StatusCode::SUCCESS !=
randomNoise(collection, moduleId, rndmEngine,
data,strip_max)) {
◆ randomNoise() [1/2]
Definition at line 356 of file SCT_FrontEnd.cxx.
359 double occupancy = 0.0;
360 double NoiseOccupancy = 0.0;
362 int nNoisyStrips = 0;
368 if (noise_expanded_mode) {
385 switch (moduleType) {
409 ATH_MSG_ERROR(
"moduleType(eta): " << moduleType <<
" unknown, using barrel");
415 int nEmptyStrips = 0;
416 std::vector<int> emptyStrips;
417 emptyStrips.reserve(strip_max);
418 for (
int i = 0;
i < strip_max;
i++) {
419 if (
data.m_StripHitsOnWafer[
i] == 0) {
420 emptyStrips.push_back(
i);
425 if (nEmptyStrips != 0) {
428 occupancy = CLHEP::RandGaussZiggurat::shoot(rndmEngine, NoiseOccupancy, NoiseOccupancy * 0.1);
432 const float fC = 6242.2;
435 nNoisyStrips = CLHEP::RandPoisson::shoot(rndmEngine, strip_max * occupancy *
mode);
438 if (nEmptyStrips < nNoisyStrips) {
439 nNoisyStrips = nEmptyStrips;
443 for (
int i = 0;
i < nNoisyStrips;
i++) {
444 int index = CLHEP::RandFlat::shootInt(rndmEngine, nEmptyStrips -
i);
447 emptyStrips.erase(emptyStrips.begin()+
index);
449 ATH_MSG_ERROR(
index <<
"-th empty strip, strip " <<
strip <<
" should be empty but is not empty! Something is wrong!");
453 if (noise_expanded_mode) {
454 int noise_tbin = CLHEP::RandFlat::shootInt(rndmEngine, 3);
456 if (noise_tbin == 0) {
460 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (1)");
464 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (2)");
470 return StatusCode::SUCCESS;
◆ randomNoise() [2/2]
Definition at line 476 of file SCT_FrontEnd.cxx.
477 const int n_chips = 6;
478 const int chipStripmax = strip_max / n_chips;
479 std::vector<float> NOByChipVect(n_chips, 0.0);
480 std::vector<float> ENCByChipVect(n_chips, 0.0);
481 std::vector<int> nNoisyStrips(n_chips, 0);
487 if (noise_expanded_mode) {
496 if (NOByChipVect.empty()) {
497 ATH_MSG_DEBUG(
"No calibration data in cond DB for module " << moduleId <<
" using JO values");
498 if (StatusCode::SUCCESS !=
randomNoise(collection, moduleId, rndmEngine,
data,strip_max)) {
499 return StatusCode::FAILURE;
501 return StatusCode::SUCCESS;
504 for (
int i = 0;
i < n_chips;
i++) {
510 constexpr
float fC = 6242.2;
514 nNoisyStrips[
i] = CLHEP::RandPoisson::shoot(rndmEngine, chipStripmax * NOByChipVect[
i] *
mode);
519 for (
int chip_index = 0; chip_index < n_chips; ++chip_index) {
520 int chip_strip_offset = chipStripmax * chip_index;
523 int nEmptyStripsOnChip = 0;
524 std::vector<int> emptyStripsOnChip;
525 emptyStripsOnChip.reserve(chipStripmax);
526 for (
int i = 0;
i < chipStripmax;
i++) {
527 if (
data.m_StripHitsOnWafer[
i + chip_strip_offset] == 0) {
528 emptyStripsOnChip.push_back(
i);
529 ++nEmptyStripsOnChip;
534 if (nEmptyStripsOnChip != 0) {
536 if (nEmptyStripsOnChip < nNoisyStrips[chip_index]) {
537 nNoisyStrips[chip_index] = nEmptyStripsOnChip;
541 for (
int i = 0;
i < nNoisyStrips[chip_index];
i++) {
542 int index = CLHEP::RandFlat::shootInt(rndmEngine, nEmptyStripsOnChip -
i);
543 int strip_on_chip = emptyStripsOnChip.at(
index);
544 emptyStripsOnChip.erase(emptyStripsOnChip.begin()+
index);
545 int strip = strip_on_chip + chip_strip_offset;
547 ATH_MSG_ERROR(
index <<
"-th empty strip, strip " <<
strip <<
" should be empty but is not empty! Something is wrong!");
551 if (noise_expanded_mode) {
553 int noise_tbin = CLHEP::RandFlat::shootInt(rndmEngine, 3);
555 if (noise_tbin == 0) {
559 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (3)");
563 ATH_MSG_ERROR(
"Can't add noise hit diode to collection (4)");
570 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