From 12a00660025edcaa04b450f2bc5ddf5b84e65312 Mon Sep 17 00:00:00 2001 From: Suchandra Date: Tue, 3 Oct 2023 15:51:13 +0200 Subject: [PATCH 1/2] updating Phase2TrackerDigitizerAlgorithm to fix the issue of lower charge in # of Digis in inner Pixel modules when Premixing is used during Digitization together with Dual Slope signal scaling --- .../plugins/Phase2TrackerDigitizerAlgorithm.cc | 5 +++-- .../SiPhase2Digitizer/python/phase2TrackerDigitizer_cfi.py | 6 ++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.cc b/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.cc index 14ce0b25a2a37..5fc7ea3f96fd6 100644 --- a/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.cc +++ b/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.cc @@ -997,7 +997,7 @@ int Phase2TrackerDigitizerAlgorithm::convertSignalToAdc(uint32_t detID, float si signal_in_adc = theAdcFullScale_; } else { if (thePhase2ReadoutMode_ == -1) { - temp_signal = std::min(static_cast(signal_in_elec / theElectronPerADC_), theAdcFullScale_); + temp_signal = std::min(static_cast(std::round(signal_in_elec / theElectronPerADC_)), theAdcFullScale_); } else { // calculate the kink point and the slope int dualslope_param = std::min(std::abs(thePhase2ReadoutMode_), max_limit); @@ -1005,7 +1005,8 @@ int Phase2TrackerDigitizerAlgorithm::convertSignalToAdc(uint32_t detID, float si // C-ROC: first valid ToT code above threshold is 0b0000 temp_signal = std::floor((signal_in_elec - threshold) / theElectronPerADC_); if (temp_signal > kink_point) - temp_signal = std::floor((temp_signal - kink_point) / (pow(2, dualslope_param - 1))) + kink_point; + temp_signal = + static_cast(std::floor((temp_signal - kink_point) / (pow(2, dualslope_param - 1)))) + kink_point; } signal_in_adc = std::min(temp_signal, theAdcFullScale_); LogTrace("Phase2TrackerDigitizerAlgorithm") diff --git a/SimTracker/SiPhase2Digitizer/python/phase2TrackerDigitizer_cfi.py b/SimTracker/SiPhase2Digitizer/python/phase2TrackerDigitizer_cfi.py index 78603e8bf6e7f..899fc13e4f44e 100644 --- a/SimTracker/SiPhase2Digitizer/python/phase2TrackerDigitizer_cfi.py +++ b/SimTracker/SiPhase2Digitizer/python/phase2TrackerDigitizer_cfi.py @@ -233,11 +233,17 @@ AddNoisyPixels = False, AddInefficiency = False, AddThresholdSmearing = False, + Phase2ReadoutMode = -1, + AdcFullScale = 255, + AddXTalk = False, ), Pixel3DDigitizerAlgorithm = dict( AddNoisyPixels = False, AddInefficiency = False, AddThresholdSmearing = False, + Phase2ReadoutMode = -1, + AdcFullScale = 255, + AddXTalk = False, ), PSPDigitizerAlgorithm = dict( AddNoisyPixels = False, From 8f397b73fa74f67d010102c3dfcd9b193e60b74e Mon Sep 17 00:00:00 2001 From: Suchandra Date: Thu, 5 Oct 2023 14:58:27 +0200 Subject: [PATCH 2/2] updating the configuration file adding proper comments and switching off X-Talk for OT layers alsoat the first step of PreMixing --- .../python/phase2TrackerDigitizer_cfi.py | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/SimTracker/SiPhase2Digitizer/python/phase2TrackerDigitizer_cfi.py b/SimTracker/SiPhase2Digitizer/python/phase2TrackerDigitizer_cfi.py index 899fc13e4f44e..32b24b3ac19e0 100644 --- a/SimTracker/SiPhase2Digitizer/python/phase2TrackerDigitizer_cfi.py +++ b/SimTracker/SiPhase2Digitizer/python/phase2TrackerDigitizer_cfi.py @@ -221,10 +221,15 @@ # - do not add noisy pixels (to be done in stage2) # - do not apply inefficiency (to be done in stage2) # - disable threshold smearing +# - disable x-talk simulatiom # -# For outer tracker -# - force analog readout to get the ADCs -# +# For both Inner and Outer tracker +# - force analog readout to get Full Charge ADCs +# - for Inner Tracker Dual Slope signal scaling NOT used here to avoid any singal loss. +# At step 2 Dual Slope signal scaling is used as default. To keep the full precision +# ADCFull scaling is also changed to 255 for Inner Tracker +# +# - # NOTE: It is currently assumed that all sub-digitizers have the same ElectronPerAdc. from Configuration.ProcessModifiers.premix_stage1_cff import premix_stage1 _premixStage1ModifyDict = dict( @@ -233,33 +238,38 @@ AddNoisyPixels = False, AddInefficiency = False, AddThresholdSmearing = False, + AddXTalk = False, Phase2ReadoutMode = -1, AdcFullScale = 255, - AddXTalk = False, ), Pixel3DDigitizerAlgorithm = dict( AddNoisyPixels = False, AddInefficiency = False, AddThresholdSmearing = False, + AddXTalk = False, Phase2ReadoutMode = -1, AdcFullScale = 255, - AddXTalk = False, ), PSPDigitizerAlgorithm = dict( AddNoisyPixels = False, AddInefficiency = False, AddThresholdSmearing = False, + AddXTalk = False, + Phase2ReadoutMode = -1, ), PSSDigitizerAlgorithm = dict( AddNoisyPixels = False, AddInefficiency = False, AddThresholdSmearing = False, + AddXTalk = False, Phase2ReadoutMode = -1, ), SSDigitizerAlgorithm = dict( AddNoisyPixels = False, AddInefficiency = False, AddThresholdSmearing = False, + AddXTalk = False, + Phase2ReadoutMode = -1, ), )