|
15 | 15 |
|
16 | 16 | #include "TPCSimulation/DigitContainer.h" |
17 | 17 | #include <memory> |
| 18 | +#include <type_traits> |
18 | 19 | #include <fairlogger/Logger.h> |
19 | 20 | #include "TPCBase/Mapper.h" |
20 | 21 | #include "TPCBaseRecSim/CDBInterface.h" |
@@ -48,6 +49,9 @@ void DigitContainer::fillOutputContainer(std::vector<Digit>& output, |
48 | 49 | updateCalibrations(); |
49 | 50 | } |
50 | 51 |
|
| 52 | + // after updateCalibrations, which may reload the FEE parameters that SAMPAProcessing picks up |
| 53 | + auto& sampaProcessing = mSAMPAProcessing ? *mSAMPAProcessing : SAMPAProcessing::instance(); |
| 54 | + |
51 | 55 | const bool needsPrevDigArray = eleParam.doIonTail || eleParam.doIonTailPerPad || eleParam.doSaturationTail; |
52 | 56 | const bool needsEmptyTimeBins = needsPrevDigArray || eleParam.doNoiseEmptyPads; |
53 | 57 |
|
@@ -89,39 +93,37 @@ void DigitContainer::fillOutputContainer(std::vector<Digit>& output, |
89 | 93 | // fmt::print("Processing secotor: {}, time bin: {}, mFirstTimeBin: {}, dgitTime: {}\n", sector.getSector(), timeBin, mFirstTimeBin, (void*)time); |
90 | 94 |
|
91 | 95 | if (time) { |
| 96 | + // the digitization mode is a template parameter of fillOutputContainer |
| 97 | + auto fill = [&](auto mode) { |
| 98 | + time->fillOutputContainer<decltype(mode)::value>(output, mcTruth, commonModeOutput, sector, timeBin, sampaProcessing, mLabelCollector, mPrevDigArr.get(), debugStream, mPadParams, mDeadMap); |
| 99 | + }; |
| 100 | + using M = DigitzationMode; |
92 | 101 | switch (digitizationMode) { |
93 | | - case DigitzationMode::FullMode: { |
94 | | - time->fillOutputContainer<DigitzationMode::FullMode>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr.get(), debugStream, mPadParams, mDeadMap); |
| 102 | + case M::FullMode: |
| 103 | + fill(std::integral_constant<M, M::FullMode>{}); |
95 | 104 | break; |
96 | | - } |
97 | | - case DigitzationMode::ZeroSuppression: { |
98 | | - time->fillOutputContainer<DigitzationMode::ZeroSuppression>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr.get(), debugStream, mPadParams, mDeadMap); |
| 105 | + case M::ZeroSuppression: |
| 106 | + fill(std::integral_constant<M, M::ZeroSuppression>{}); |
99 | 107 | break; |
100 | | - } |
101 | | - case DigitzationMode::ZeroSuppressionCMCorr: { |
102 | | - time->fillOutputContainer<DigitzationMode::ZeroSuppressionCMCorr>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr.get(), debugStream, mPadParams, mDeadMap); |
| 108 | + case M::ZeroSuppressionCMCorr: |
| 109 | + fill(std::integral_constant<M, M::ZeroSuppressionCMCorr>{}); |
103 | 110 | break; |
104 | | - } |
105 | | - case DigitzationMode::SubtractPedestal: { |
106 | | - time->fillOutputContainer<DigitzationMode::SubtractPedestal>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr.get(), debugStream, mPadParams, mDeadMap); |
| 111 | + case M::SubtractPedestal: |
| 112 | + fill(std::integral_constant<M, M::SubtractPedestal>{}); |
107 | 113 | break; |
108 | | - } |
109 | | - case DigitzationMode::NoSaturation: { |
110 | | - time->fillOutputContainer<DigitzationMode::NoSaturation>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr.get(), debugStream, mPadParams, mDeadMap); |
| 114 | + case M::NoSaturation: |
| 115 | + fill(std::integral_constant<M, M::NoSaturation>{}); |
111 | 116 | break; |
112 | | - } |
113 | | - case DigitzationMode::PropagateADC: { |
114 | | - time->fillOutputContainer<DigitzationMode::PropagateADC>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr.get(), debugStream, mPadParams, mDeadMap); |
| 117 | + case M::PropagateADC: |
| 118 | + fill(std::integral_constant<M, M::PropagateADC>{}); |
115 | 119 | break; |
116 | | - } |
117 | | - case DigitzationMode::Auto: { |
| 120 | + case M::Auto: |
118 | 121 | if (mCMCEnabled) { |
119 | | - time->fillOutputContainer<DigitzationMode::ZeroSuppressionCMCorr>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr.get(), debugStream, mPadParams, mDeadMap); |
| 122 | + fill(std::integral_constant<M, M::ZeroSuppressionCMCorr>{}); |
120 | 123 | } else { |
121 | | - time->fillOutputContainer<DigitzationMode::ZeroSuppression>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr.get(), debugStream, mPadParams, mDeadMap); |
| 124 | + fill(std::integral_constant<M, M::ZeroSuppression>{}); |
122 | 125 | } |
123 | 126 | break; |
124 | | - } |
125 | 127 | } |
126 | 128 | } |
127 | 129 |
|
|
0 commit comments