ATLAS Offline Software
Loading...
Searching...
No Matches
CaloRecGPU::CellNoiseArr Struct Reference

#include <ConstantInfoDefinitions.h>

Collaboration diagram for CaloRecGPU::CellNoiseArr:

Public Member Functions

constexpr float get_noise (const int cell, const int gain) 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.

Public Attributes

float noise [NCaloCells][NumGainStates]
float double_gaussian_constants [s_numDoubleGaussianConstants][NTileCells][NumGainStates]
CellNoiseProperties::carrier noise_properties
float luminosity

Static Public Attributes

static constexpr int s_numDoubleGaussianConstants = 4

Protected Member Functions

CUDA_HOS_DEV float get_double_gaussian_significance (const int cell, const int gain, const float energy) const

Detailed Description

Definition at line 461 of file ConstantInfoDefinitions.h.

Member Function Documentation

◆ get_double_gaussian_noise()

CUDA_HOS_DEV float CaloRecGPU::CellNoiseArr::get_double_gaussian_noise ( const int cell,
const int gain,
const float energy ) const
inline

Calculates the double gaussian noise for a Tile cell.

Does not check explicitly for a cell being from Tile.

Definition at line 541 of file ConstantInfoDefinitions.h.

542 {
543 using namespace std;
544
545 CellNoiseProperties props(this->noise_properties);
546 if (!props.is_valid())
547 {
548 return get_noise(cell, gain);
549 }
550
551 const float sigma = get_double_gaussian_significance(cell, gain, energy);
552
553 const float first_factor = (sigma != 0.f ? fabsf(energy / sigma) : 0.f);
554
555 if (props.is_electronic_noise())
556 {
557 return first_factor;
558 }
559 else
560 {
561 const float second_factor = this->double_gaussian_constants[3][cell - TileCellStart][gain];
562
563 switch (props.version())
564 {
565 case 1:
566 return sqrtf(first_factor * first_factor + second_factor * second_factor * this->luminosity);
567 case 2:
568 return first_factor + second_factor * this->luminosity;
569 default:
570 return 0.f / 0.f;
571 }
572 }
573 }
constexpr float get_noise(const int cell, const int gain) const
CUDA_HOS_DEV float get_double_gaussian_significance(const int cell, const int gain, const float energy) const
CellNoiseProperties::carrier noise_properties

◆ get_double_gaussian_significance()

CUDA_HOS_DEV float CaloRecGPU::CellNoiseArr::get_double_gaussian_significance ( const int cell,
const int gain,
const float energy ) const
inlineprotected

Definition at line 481 of file ConstantInfoDefinitions.h.

482 {
483
484 using namespace std;
485
486 const int delta_from_tile_start = cell - TileCellStart;
487
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];
491
492 if ((sigma_1 == 0.f && sigma_2 == 0.f) || energy == 0.f)
493 {
494 return 0.f;
495 }
496 else if (sigma_1 == 0.f)
497 {
498 return energy / sigma_2;
499 }
500 else if (ratio == 0.f || sigma_2 == 0.f)
501 {
502 return energy / sigma_1;
503 }
504
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);
509
510 const float min_abs = min(x_1_abs, x_2_abs);
511
512 const float max_abs = max(x_1_abs, x_2_abs);
513
514 if (min_abs > 7.4f)
515 {
516 return min_abs;
517 }
518 if (max_abs < 0.9f)
519 {
520 return max_abs;
521 }
522
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);
525
526
527 const float z = (y_1 * sigma_1 + ratio * y_2 * sigma_2) / (sigma_1 + ratio * sigma_2);
528
530
531 //printf("GPU %d %f %f %f %f %f %f\n", delta_from_tile_start, min_abs, max_abs, y_1, y_2, z, ret);
532
533 return ret;
534
535 }
#define z
#define min(a, b)
Definition cfImp.cxx:40
#define max(a, b)
Definition cfImp.cxx:41
static CUDA_HOS_DEV float erf_inv_wrapper(const float x)
constexpr int TileCellStart
float double_gaussian_constants[s_numDoubleGaussianConstants][NTileCells][NumGainStates]

◆ get_noise()

float CaloRecGPU::CellNoiseArr::get_noise ( const int cell,
const int gain ) const
inlineconstexpr

Definition at line 474 of file ConstantInfoDefinitions.h.

475 {
476 return noise[cell][gain];
477 }
float noise[NCaloCells][NumGainStates]

Member Data Documentation

◆ double_gaussian_constants

float CaloRecGPU::CellNoiseArr::double_gaussian_constants[s_numDoubleGaussianConstants][NTileCells][NumGainStates]

Definition at line 468 of file ConstantInfoDefinitions.h.

◆ luminosity

float CaloRecGPU::CellNoiseArr::luminosity

Definition at line 472 of file ConstantInfoDefinitions.h.

◆ noise

float CaloRecGPU::CellNoiseArr::noise[NCaloCells][NumGainStates]

Definition at line 465 of file ConstantInfoDefinitions.h.

◆ noise_properties

CellNoiseProperties::carrier CaloRecGPU::CellNoiseArr::noise_properties

Definition at line 470 of file ConstantInfoDefinitions.h.

◆ s_numDoubleGaussianConstants

int CaloRecGPU::CellNoiseArr::s_numDoubleGaussianConstants = 4
staticconstexpr

Definition at line 463 of file ConstantInfoDefinitions.h.


The documentation for this struct was generated from the following file: