12 float stripPitch,
int stripID,
int minstripID,
int maxstripID) :
13 m_timeResolution(timeResolution), m_stripPitch(stripPitch), m_stripID(stripID), m_minstripID(minstripID), m_maxstripID(maxstripID) {
14 for (
auto& IonizationCluster : IonizationClusters)
31 [](
const std::unique_ptr<MM_Electron>&
a,
const std::unique_ptr<MM_Electron>&
b) ->
bool { return a->getTime() < b->getTime(); });
49 if (stripVal < m_minstripID - 2 || stripVal >
m_maxstripID + 1) stripVal = -1;
56 if (crossTalk1 > 0.) {
60 std::map<int, std::map<int, float>> stripChargesCopy1;
66 for (
auto& stripTimeSeries : stripChargesCopy1) {
67 int timeBin = stripTimeSeries.first;
68 for (
auto& stripCharge : stripTimeSeries.second) {
69 int stripVal = stripCharge.first;
70 float stripChargeVal = stripCharge.second;
72 if (stripChargeVal == 0.)
continue;
75 float chargeScaleFactor = 1.0 / (1. + ((stripVal - 1 > 0) + (stripVal + 1 <
m_maxstripID)) * crossTalk1 +
76 ((stripVal - 2 > 0) + (stripVal + 2 <
m_maxstripID)) * crossTalk2);
77 stripChargeVal *= chargeScaleFactor;
83 if (stripVal - 1 > 0)
m_stripCharges[timeBin][stripVal - 1] += stripChargeVal * crossTalk1;
86 if (crossTalk2 > 0.) {
87 if (stripVal - 2 > 0)
m_stripCharges[timeBin][stripVal - 2] += stripChargeVal * crossTalk2;
96 std::map<int, std::map<int, float>> stripChargesCopy2;
98 for (
auto& stripTimeSeries : stripChargesCopy2) {
99 int timeBin = stripTimeSeries.first;
100 for (
auto& stripCharge : stripTimeSeries.second) {
101 int stripVal = stripCharge.first;
105 if (stripVal < m_minstripID || stripVal >
m_maxstripID - 1)
continue;
107 if (stripVal == 1024 || stripVal == 1025 || stripVal == 2048 || stripVal == 2049 || stripVal == 3072 || stripVal == 3073 ||
108 stripVal == 4096 || stripVal == 4097)
110 float stripChargeVal = stripCharge.second;
111 if (stripChargeVal < chargeThreshold)
continue;
114 for (
size_t ii = 0; ii <
m_v_strip.size(); ii++) {