 |
ATLAS Offline Software
|
Go to the documentation of this file.
7 #ifndef CALORECGPU_CONSTANTINFODEFINITIONS_H
8 #define CALORECGPU_CONSTANTINFODEFINITIONS_H
204 const carrier intra_calo_sampling,
208 const bool HECIW_or_FCal):
242 #if CALORECGPU_ADD_FULL_PAIRS_LIST_TO_CONSTANT_INFORMATION
264 return cell_info.
is_PS();
288 return cell_info.
region();
296 constexpr
int get_neighbours(
const unsigned int neigh_options,
const int cell,
int * neigh_arr)
const
313 struct DeAllocWrapper
324 CUDA_HOS_DEV DeAllocWrapper (
const DeAllocWrapper &) =
delete;
325 CUDA_HOS_DEV DeAllocWrapper (DeAllocWrapper &&) =
delete;
337 #if CALORECGPU_ETA_PHI_MAP_DEBUG
354 else if (n_cells == 1)
363 for (
int i = 0;
i < n_cells; ++
i)
365 const int this_cell =
cells[
i];
367 const float delta_eta =
eta[this_cell] - test_eta;
368 const float delta_phi = Helpers::angular_difference(
phi[this_cell], test_phi);
372 const float this_dist = fabsf(delta_eta) + fabsf(
delta_phi);
391 static constexpr
carrier s_first_16_bit_mask = 0x0000FFFFU;
392 static constexpr
carrier s_last_16_bit_mask = 0xFFFF0000U;
393 static constexpr
carrier s_invalid_double_gaussian = s_first_16_bit_mask | s_last_16_bit_mask;
415 return value & s_first_16_bit_mask;
420 return (
value & s_last_16_bit_mask) >> 16;
425 return is_valid() && ((
value & s_last_16_bit_mask) == 0x00000000U);
430 return is_valid() && ((
value & s_last_16_bit_mask) == 0x00010000U);
435 return is_valid() && ((
value & s_last_16_bit_mask) == 0x00020000U);
446 return value == s_invalid_double_gaussian;
451 return !is_invalid();
456 return s_invalid_double_gaussian;
463 static constexpr
int s_numDoubleGaussianConstants = 4;
488 const float sigma_1 = this->double_gaussian_constants[0][delta_from_tile_start][
gain];
489 const float sigma_2 = this->double_gaussian_constants[1][delta_from_tile_start][
gain];
490 const float ratio = this->double_gaussian_constants[2][delta_from_tile_start][
gain];
492 if ((sigma_1 == 0.
f && sigma_2 == 0.
f) ||
energy == 0.
f)
496 else if (sigma_1 == 0.
f)
500 else if (
ratio == 0.
f || sigma_2 == 0.
f)
505 const float x_1 =
energy / sigma_1;
506 const float x_2 =
energy / sigma_2;
507 const float x_1_abs = fabsf(x_1);
508 const float x_2_abs = fabsf(x_2);
510 const float min_abs =
min(x_1_abs, x_2_abs);
512 const float max_abs =
max(x_1_abs, x_2_abs);
523 const float y_1 = erff(Helpers::Constants::inv_sqrt2<float> * x_1);
524 const float y_2 = erff(Helpers::Constants::inv_sqrt2<float> * x_2);
527 const float z = (y_1 * sigma_1 +
ratio * y_2 * sigma_2) / (sigma_1 +
ratio * sigma_2);
529 const float ret = Helpers::Constants::sqrt2<float> * Helpers::erf_inv_wrapper(
z);
566 return sqrtf(first_factor * first_factor + second_factor * second_factor * this->luminosity);
568 return first_factor + second_factor * this->
luminosity;
static constexpr carrier invalid_value()
constexpr int intra_calorimeter_sampling(const int cell) const
constexpr OtherCellInfo & operator=(const carrier v)
constexpr OtherCellInfo(const carrier v)
constexpr bool is_PS(const int cell) const
constexpr carrier subcalo() const
constexpr bool is_total_noise() const
constexpr int get_closest_cell(const int sampling, const float test_eta, const float test_phi) const
constexpr auto int_ceil_div(const T1 num, const T2 denom)
Returns the ceiling of num/denom, with proper rounding.
constexpr int get_neighbours(const unsigned int neigh_options, const int cell, int *neigh_arr) const
Places the neighbours according to the option(s) in neigh_options in the array and returns the number...
constexpr bool is_invalid() const
CUDA_HOS_DEV float get_double_gaussian_noise(const int cell, const int gain, const float energy) const
Calculates the double gaussian noise for a Tile cell.
EtaPhiToCellMap etaPhiToCell
constexpr static int to_subcalo_enum(const int subcalo)
static constexpr carrier s_is_PS_flag
constexpr int region(const int cell) const
AccessorTemplate & operator=(AccessorTemplate &&that)
constexpr int NumSamplings
CellNoiseProperties::carrier noise_properties
static constexpr carrier s_region_offset
constexpr bool is_pile_up_noise() const
constexpr int get_neighbours(const unsigned int neigh_options, const int cell, int *neigh_arr) const
Places the neighbours according to the option(s) in neigh_options in the array and returns the number...
constexpr int get_number_of_neighbours(const unsigned int neigh_options, const int cell) const
constexpr int get_max_real_overlap() const
static constexpr carrier s_sampling_offset
constexpr static int s_region_unknown
constexpr carrier version() const
static constexpr carrier s_region_mask
constexpr int TileCellAfterEnd
static constexpr carrier s_bits_unused
constexpr static bool is_tile(const int cell)
constexpr OtherCellInfo(const carrier sampling, const carrier intra_calo_sampling, const carrier subcalo, const carrier region, const bool PS, const bool HECIW_or_FCal)
constexpr static int to_intra_calorimeter_sampling_enum(const int sampling)
static constexpr carrier s_bits_used
int nCellsPerSampling[NumSamplings]
constexpr int sampling(const int cell) const
constexpr CellNoiseProperties(const carrier version, const carrier noise_type)
constexpr static int from_intra_calorimeter_sampling_enum(const int sampling)
constexpr bool is_electronic_noise() const
static constexpr carrier s_subcalo_offset
constexpr bool is_HECIW_or_FCal() const
CUDA_HOS_DEV void finish_initializing(void *buffer)
!
static constexpr int s_max_overlap_cells
constexpr size_t finish_initializing_buffer_size() const
constexpr int NumGainStates
static constexpr carrier s_sampling_mask
constexpr int subcalo(const int cell) const
OtherCellInfo::carrier otherCellInfo[NCaloCells]
constexpr void register_cell(const int cell, const int sampling, const float cell_eta, const float cell_phi, const float cell_deta, const float cell_dphi)
constexpr float get_noise(const int cell, const int gain) const
def delta_phi(phi1, phi2)
constexpr static int from_region_enum(const int region)
constexpr carrier noise_type() const
constexpr static int s_region_unknown_replacement
static constexpr carrier s_subcalo_mask
CUDA_HOS_DEV float get_double_gaussian_significance(const int cell, const int gain, const float energy) const
constexpr carrier sampling() const
static constexpr carrier s_intra_sampling_offset
constexpr static int s_sampling_unknown
constexpr static int to_region_enum(const int region)
constexpr carrier intra_calorimeter_sampling() const
constexpr static int s_sampling_unknown_replacement
CUDA_HOS_DEV void fill_eta_phi_map()
constexpr static int s_subcalo_unknown
constexpr int get_number_of_neighbours(const unsigned int neigh_options, const int cell) const
constexpr carrier region() const
constexpr bool is_valid() const
constexpr bool is_HECIW_or_FCal(const int cell) const
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
constexpr static int s_subcalo_unknown_replacement
static constexpr carrier s_intra_sampling_mask
constexpr int TileCellStart
constexpr CellNoiseProperties(const carrier v)
constexpr int get_possible_cells_from_coords(const int sampling, const float test_eta, const float test_phi, int *cell_arr) const
We assume cell_arr is large enough.
constexpr bool is_PS() const
constexpr static int from_subcalo_enum(const int subcalo)
static constexpr carrier s_is_HECIW_FCal_flag