diff --git a/device/calo/tools/include/BremRecovery.cuh b/device/calo/tools/include/BremRecovery.cuh index cb11d148b70234604ea36114b4f101e8ca020002..40a03f178defa90f17416ebf537cbe54e76b5541 100644 --- a/device/calo/tools/include/BremRecovery.cuh +++ b/device/calo/tools/include/BremRecovery.cuh @@ -14,6 +14,7 @@ #include "States.cuh" #include "CaloGeometry.cuh" #include "CaloDigit.cuh" +#include "SystemOfUnits.h" #include "VeloConsolidated.cuh" namespace brem_recovery { @@ -49,7 +50,11 @@ namespace brem_recovery { private: Allen::Property m_block_dim {this, "block_dim", {32, 1, 1}, "block dimensions"}; + Allen::Property m_min_et_gamma {this, + "ecal_min_et_gamma", + 50.f * Allen::Units::MeV, + "minimum transverse energy to correct energy with gamma factor"}; }; - __global__ void brem_recovery(Parameters parameters, const char* raw_ecal_geometry); -} // namespace brem_recovery \ No newline at end of file + __global__ void brem_recovery(Parameters parameters, const char* raw_ecal_geometry, const float min_et_gamma); +} // namespace brem_recovery diff --git a/device/calo/tools/src/BremRecovery.cu b/device/calo/tools/src/BremRecovery.cu index 396ac515207e1ce72936643047c61cc1d26d36f1..c45bb52d0426bff0884fe2bda31cba4a6287693d 100644 --- a/device/calo/tools/src/BremRecovery.cu +++ b/device/calo/tools/src/BremRecovery.cu @@ -40,10 +40,13 @@ void brem_recovery::brem_recovery_t::operator()( Allen::memset_async(arguments, 0, context); global_function(brem_recovery)(dim3(size(arguments)), m_block_dim, context)( - arguments, constants.dev_ecal_geometry); + arguments, constants.dev_ecal_geometry, m_min_et_gamma); } -__global__ void brem_recovery::brem_recovery(brem_recovery::Parameters parameters, const char* raw_ecal_geometry) +__global__ void brem_recovery::brem_recovery( + brem_recovery::Parameters parameters, + const char* raw_ecal_geometry, + const float min_et_gamma) { const unsigned number_of_events = parameters.dev_number_of_events[0]; const unsigned event_number = parameters.dev_event_list[blockIdx.x]; @@ -104,13 +107,16 @@ __global__ void brem_recovery::brem_recovery(brem_recovery::Parameters parameter digits_isBremMatched[digit_index] = true; } - parameters.dev_brem_E[track_index_with_offset] = sum_cell_E; - parameters.dev_brem_ET[track_index_with_offset] = - sum_cell_E * sqrtf( - (velo_state.tx() * velo_state.tx() + velo_state.ty() * velo_state.ty()) / - (velo_state.tx() * velo_state.tx() + velo_state.ty() * velo_state.ty() + 1.f)); + float uT = sqrtf( + (velo_state.tx() * velo_state.tx() + velo_state.ty() * velo_state.ty()) / + (velo_state.tx() * velo_state.tx() + velo_state.ty() * velo_state.ty() + 1.f)); + float gamma = + ((sum_cell_E * uT > min_et_gamma) && (N_matched_digits > 0)) ? ecal_geometry.getGamma(digit_indices[0]) : 0.f; + + parameters.dev_brem_E[track_index_with_offset] = sum_cell_E + gamma; + parameters.dev_brem_ET[track_index_with_offset] = (sum_cell_E + gamma) * uT; parameters.dev_brem_inECALacc[track_index_with_offset] = inAcc; parameters.dev_brem_ecal_digits[track_index_with_offset] = digit_indices; parameters.dev_brem_ecal_digits_size[track_index_with_offset] = N_matched_digits; } -} \ No newline at end of file +} diff --git a/device/calo/tools/src/TrackDigitSelectiveMatching.cu b/device/calo/tools/src/TrackDigitSelectiveMatching.cu index 46a9ed02f3fcc27b1e30f9874231dab22373ea1b..80d04d6ab439ffdcaadbcffc030b05ac31dc9cc1 100644 --- a/device/calo/tools/src/TrackDigitSelectiveMatching.cu +++ b/device/calo/tools/src/TrackDigitSelectiveMatching.cu @@ -164,9 +164,12 @@ __device__ void track_digit_selective_matching::track_digit_selective_matching_i parameters.dev_matched_ecal_digits[track_index + event_offset] = digit_indices; parameters.dev_matched_ecal_digits_size[track_index + event_offset] = N_matched_digits; parameters.dev_track_inEcalAcc[track_index + event_offset] = inAcc; - const auto eop = sum_cell_E * fabsf(long_track.qop()); - parameters.dev_track_Eop[track_index + event_offset] = eop; - parameters.dev_track_Eop3x3[track_index + event_offset] = barycenter_E * fabsf(long_track.qop()); + const float gamma = N_matched_digits > 0 ? ecal_geometry.getGamma(digit_indices[0]) : 0.f; + const float eop_estimate = (sum_cell_E + gamma) * fabsf(long_track.qop()); + const float gamma_corrected = gamma * ((eop_estimate < 1) ? eop_estimate : 1.f); + parameters.dev_track_Eop[track_index + event_offset] = (sum_cell_E + gamma_corrected) * fabsf(long_track.qop()); + parameters.dev_track_Eop3x3[track_index + event_offset] = + (barycenter_E + gamma_corrected) * fabsf(long_track.qop()); parameters.dev_track_isElectron[track_index + event_offset] = parameters.dev_track_Eop[track_index + event_offset] > 0.7f; parameters.dev_delta_barycenter_x[track_index + event_offset] = (xV - xbar);