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..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,27 +238,38 @@ AddNoisyPixels = False, AddInefficiency = False, AddThresholdSmearing = False, + AddXTalk = False, + Phase2ReadoutMode = -1, + AdcFullScale = 255, ), Pixel3DDigitizerAlgorithm = dict( AddNoisyPixels = False, AddInefficiency = False, AddThresholdSmearing = False, + AddXTalk = False, + Phase2ReadoutMode = -1, + AdcFullScale = 255, ), 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, ), )