ATLAS Offline Software
Functions
CaloGpuGeneral_fnc Namespace Reference

Functions

__DEVICE__ long long getDDE (GeoGpu *geo, int sampling, float eta, float phi)
 
__DEVICE__ int find_index_f (float *array, int size, float value)
 
__DEVICE__ int find_index_uint32 (uint32_t *array, int size, uint32_t value)
 
__DEVICE__ void rnd_to_fct2d (float &valuex, float &valuey, float rnd0, float rnd1, FH2D *hf2d)
 
__DEVICE__ float rnd_to_fct1d (float rnd, uint32_t *contents, float *borders, int nbins, uint32_t s_MaxValue)
 
__DEVICE__ void CenterPositionCalculation_d (Hit &hit, const Chain0_Args args)
 
__DEVICE__ void HistoLateralShapeParametrization_d (Hit &hit, unsigned long t, Chain0_Args args, bool reweight)
 
__DEVICE__ void HitCellMapping_d (Hit &hit, unsigned long, Chain0_Args args)
 
__DEVICE__ void HitCellMappingWiggle_d (Hit &hit, Chain0_Args args, unsigned long t)
 

Function Documentation

◆ CenterPositionCalculation_d()

__DEVICE__ void CaloGpuGeneral_fnc::CenterPositionCalculation_d ( Hit hit,
const Chain0_Args  args 
)

Definition at line 160 of file CaloGpuGeneral_fnc.cxx.

160  {
161 
162  hit.setCenter_r( ( 1. - args.extrapWeight ) * args.extrapol_r_ent + args.extrapWeight * args.extrapol_r_ext );
163  hit.setCenter_z( ( 1. - args.extrapWeight ) * args.extrapol_z_ent + args.extrapWeight * args.extrapol_z_ext );
164  hit.setCenter_eta( ( 1. - args.extrapWeight ) * args.extrapol_eta_ent + args.extrapWeight * args.extrapol_eta_ext );
165  hit.setCenter_phi( ( 1. - args.extrapWeight ) * args.extrapol_phi_ent + args.extrapWeight * args.extrapol_phi_ext );
166  }

◆ find_index_f()

__DEVICE__ int CaloGpuGeneral_fnc::find_index_f ( float *  array,
int  size,
float  value 
)

Definition at line 76 of file CaloGpuGeneral_fnc.cxx.

76  {
77 
78  int low = 0;
79  int high = size - 1;
80  int m_index = ( high - low ) / 2;
81  while ( high != low ) {
82  if ( value >= array[m_index] )
83  low = m_index + 1;
84  else
85  high = m_index;
86  m_index = ( high + low ) / 2;
87  }
88  return m_index;
89  }

◆ find_index_uint32()

__DEVICE__ int CaloGpuGeneral_fnc::find_index_uint32 ( uint32_t *  array,
int  size,
uint32_t  value 
)

Definition at line 93 of file CaloGpuGeneral_fnc.cxx.

93  {
94  // find the first index of element which has vaule > value
95  int low = 0;
96  int high = size - 1;
97  int m_index = ( high - low ) / 2;
98  while ( high != low ) {
99  if ( value > array[m_index] )
100  low = m_index + 1;
101  else if ( value == array[m_index] ) {
102  return m_index + 1;
103  } else
104  high = m_index;
105  m_index = ( high - low ) / 2 + low;
106  }
107  return m_index;
108  }

◆ getDDE()

__DEVICE__ long long CaloGpuGeneral_fnc::getDDE ( GeoGpu geo,
int  sampling,
float  eta,
float  phi 
)

Definition at line 16 of file CaloGpuGeneral_fnc.cxx.

16  {
17 
18  float* distance = 0;
19  int* steps = 0;
20 
21  int MAX_SAMPLING = geo->max_sample;
22  Rg_Sample_Index* SampleIdx = geo->sample_index;
23  GeoRegion* regions_g = geo->regions;
24 
25  if ( sampling < 0 ) return -1;
26  if ( sampling >= MAX_SAMPLING ) return -1;
27 
28  int sample_size = SampleIdx[sampling].size;
29  unsigned int sample_index = SampleIdx[sampling].index;
30 
31  GeoRegion* gr = regions_g;
32  if ( sample_size == 0 ) return -1;
33  float dist{};
34  long long bestDDE = -1;
35  if ( !distance ) distance = &dist;
36  *distance = +10000000;
37  int intsteps;
38  int beststeps;
39  if ( steps )
40  beststeps = ( *steps );
41  else
42  beststeps = 0;
43 
44  if ( sampling < 21 ) {
45  for ( int skip_range_check = 0; skip_range_check <= 1; ++skip_range_check ) {
46  for ( unsigned int j = sample_index; j < sample_index + sample_size; ++j ) {
47  if ( !skip_range_check ) {
48  if ( eta < gr[j].mineta() ) continue;
49  if ( eta > gr[j].maxeta() ) continue;
50  }
51  if ( steps )
52  intsteps = ( *steps );
53  else
54  intsteps = 0;
55  float newdist;
56  long long newDDE = gr[j].getDDE( eta, phi, &newdist, &intsteps );
57  if ( newdist < *distance ) {
58  bestDDE = newDDE;
59  *distance = newdist;
60  if ( steps ) beststeps = intsteps;
61  if ( newdist < -0.1 ) break; // stop, we are well within the hit cell
62  }
63  }
64  if ( bestDDE >= 0 ) break;
65  }
66  } else {
67  return -3;
68  }
69  if ( steps ) *steps = beststeps;
70 
71  return bestDDE;
72  }

◆ HistoLateralShapeParametrization_d()

__DEVICE__ void CaloGpuGeneral_fnc::HistoLateralShapeParametrization_d ( Hit hit,
unsigned long  t,
Chain0_Args  args,
bool  reweight 
)

Definition at line 170 of file CaloGpuGeneral_fnc.cxx.

170  {
171 
172  // int pdgId = args.pdgId;
173  float charge = args.charge;
174 
175  // int cs=args.charge;
176  float center_eta = hit.center_eta();
177  float center_phi = hit.center_phi();
178  float center_r = hit.center_r();
179  float center_z = hit.center_z();
180 
181  float alpha, r, rnd1, rnd2;
182  rnd1 = args.rand[t];
183  rnd2 = args.rand[t + args.nhits];
184 
185  if ( args.is_phi_symmetric ) {
186  if ( rnd2 >= 0.5 ) { // Fill negative phi half of shape
187  rnd2 -= 0.5;
188  rnd2 *= 2;
189  rnd_to_fct2d( alpha, r, rnd1, rnd2, args.fh2d );
190  alpha = -alpha;
191  } else { // Fill positive phi half of shape
192  rnd2 *= 2;
193  rnd_to_fct2d( alpha, r, rnd1, rnd2, args.fh2d );
194  }
195  } else {
196  rnd_to_fct2d( alpha, r, rnd1, rnd2, args.fh2d );
197  }
198 
199  float delta_eta_mm = r * cos( alpha );
200  float delta_phi_mm = r * sin( alpha );
201 
202  // Particles with negative eta are expected to have the same shape as those with positive eta after transformation:
203  // delta_eta --> -delta_eta
204  if ( center_eta < 0. ) delta_eta_mm = -delta_eta_mm;
205  // Particle with negative charge are expected to have the same shape as positively charged particles after
206  // transformation: delta_phi --> -delta_phi
207  if ( charge < 0. ) delta_phi_mm = -delta_phi_mm;
208 
209  float dist000 = sqrt( center_r * center_r + center_z * center_z );
210  float eta_jakobi = abs( 2.0 * exp( -center_eta ) / ( 1.0 + exp( -2 * center_eta ) ) );
211 
212  float delta_eta = delta_eta_mm / eta_jakobi / dist000;
213  float delta_phi = delta_phi_mm / center_r;
214 
215  if( reweight ){
216  float* histocontents = ( args.fh1d)->h_contents;
217  float* histoborders = ( args.fh1d)->h_borders;
218  float* histoerrors= ( args.fh1d)->h_errors;
219  int nbins = args.fh1d->nbins ;
220  float delta_r_mm = sqrt( delta_eta_mm * delta_eta_mm + delta_phi_mm * delta_phi_mm );
221  int ibin = find_index_f( histoborders, nbins + 1, delta_r_mm);
222  if( ibin < 1 ) ibin = 1 ;
223  if( ibin > nbins ) ibin = nbins ;
224  float weight = histocontents[ibin];
225  float rms = histoerrors[ibin];
226  if(rms>0){
227  float rnd1 = args.rand[t + 2 * args.nhits -100 ];
228  float rnd2 = args.rand[t + 2 * args.nhits -10 ];
229  float logweight= sqrt( r-2. * log(rnd1) )*cos( M_2PI * rnd2) * rms - 0.5 * rms * rms;
230  weight *= exp( logweight );
231  }
232  hit.E() *= weight;
233  }
234 
235  hit.setEtaPhiZE( center_eta + delta_eta, center_phi + delta_phi, center_z, hit.E() );
236  }

◆ HitCellMapping_d()

__DEVICE__ void CaloGpuGeneral_fnc::HitCellMapping_d ( Hit hit,
unsigned long  ,
Chain0_Args  args 
)

Definition at line 240 of file CaloGpuGeneral_fnc.cxx.

240  {
241 
242  long long cellele = getDDE( args.geo, args.cs, hit.eta(), hit.phi() );
243 
244  if ( cellele < 0 ) printf( "cellele not found %lld \n", cellele );
245 
246  atomicAdd( &args.cells_energy[cellele], hit.E() );
247  }

◆ HitCellMappingWiggle_d()

__DEVICE__ void CaloGpuGeneral_fnc::HitCellMappingWiggle_d ( Hit hit,
Chain0_Args  args,
unsigned long  t 
)

Definition at line 251 of file CaloGpuGeneral_fnc.cxx.

251  {
252 
253  int nhist = ( *( args.fhs ) ).nhist;
254  float* bin_low_edge = ( *( args.fhs ) ).low_edge;
255 
256  float eta = fabs( hit.eta() );
257  if ( eta < bin_low_edge[0] || eta > bin_low_edge[nhist] ) { HitCellMapping_d( hit, t, args ); }
258 
259  int bin = nhist;
260  for ( int i = 0; i < nhist + 1; ++i ) {
261  if ( bin_low_edge[i] > eta ) {
262  bin = i;
263  break;
264  }
265  }
266 
267  bin -= 1;
268 
269  unsigned int mxsz = args.fhs->mxsz;
270  uint32_t* contents = &( args.fhs->d_contents1D[bin * mxsz] );
271  float* borders = &( args.fhs->d_borders1D[bin * mxsz] );
272  int h_size = ( *( args.fhs ) ).h_szs[bin];
273  uint32_t s_MaxValue = ( *( args.fhs ) ).s_MaxValue;
274 
275  float rnd = args.rand[t + 2 * args.nhits];
276 
277  float wiggle = rnd_to_fct1d( rnd, contents, borders, h_size, s_MaxValue );
278 
279  float hit_phi_shifted = hit.phi() + wiggle;
280  hit.phi() = Phi_mpi_pi( hit_phi_shifted );
281 
282  HitCellMapping_d( hit, t, args );
283  }

◆ rnd_to_fct1d()

__DEVICE__ float CaloGpuGeneral_fnc::rnd_to_fct1d ( float  rnd,
uint32_t *  contents,
float *  borders,
int  nbins,
uint32_t  s_MaxValue 
)

Definition at line 139 of file CaloGpuGeneral_fnc.cxx.

139  {
140 
141  uint32_t int_rnd = s_MaxValue * rnd;
142 
143  int ibin = find_index_uint32( contents, nbins, int_rnd );
144 
145  int binx = ibin;
146 
147  uint32_t basecont = 0;
148  if ( ibin > 0 ) basecont = contents[ibin - 1];
149 
150  uint32_t dcont = contents[ibin] - basecont;
151  if ( dcont > 0 ) {
152  return borders[binx] + ( ( borders[binx + 1] - borders[binx] ) * ( int_rnd - basecont ) ) / dcont;
153  } else {
154  return borders[binx] + ( borders[binx + 1] - borders[binx] ) / 2;
155  }
156  }

◆ rnd_to_fct2d()

__DEVICE__ void CaloGpuGeneral_fnc::rnd_to_fct2d ( float &  valuex,
float &  valuey,
float  rnd0,
float  rnd1,
FH2D hf2d 
)

Definition at line 112 of file CaloGpuGeneral_fnc.cxx.

112  {
113 
114  int nbinsx = ( *hf2d ).nbinsx;
115  int nbinsy = ( *hf2d ).nbinsy;
116  float* HistoContents = ( *hf2d ).h_contents;
117  float* HistoBorders = ( *hf2d ).h_bordersx;
118  float* HistoBordersy = ( *hf2d ).h_bordersy;
119 
120  int ibin = find_index_f( HistoContents, nbinsx * nbinsy, rnd0 );
121 
122  int biny = ibin / nbinsx;
123  int binx = ibin - nbinsx * biny;
124 
125  float basecont = 0;
126  if ( ibin > 0 ) basecont = HistoContents[ibin - 1];
127 
128  float dcont = HistoContents[ibin] - basecont;
129  if ( dcont > 0 ) {
130  valuex = HistoBorders[binx] + ( HistoBorders[binx + 1] - HistoBorders[binx] ) * ( rnd0 - basecont ) / dcont;
131  } else {
132  valuex = HistoBorders[binx] + ( HistoBorders[binx + 1] - HistoBorders[binx] ) / 2;
133  }
134  valuey = HistoBordersy[biny] + ( HistoBordersy[biny + 1] - HistoBordersy[biny] ) * rnd1;
135  }
beamspotman.r
def r
Definition: beamspotman.py:672
add-xsec-uncert-quadrature-N.alpha
alpha
Definition: add-xsec-uncert-quadrature-N.py:110
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
python.CaloAddPedShiftConfig.args
args
Definition: CaloAddPedShiftConfig.py:47
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
CaloGpuGeneral_fnc::find_index_uint32
__DEVICE__ int find_index_uint32(uint32_t *array, int size, uint32_t value)
Definition: CaloGpuGeneral_fnc.cxx:93
bin
Definition: BinsDiffFromStripMedian.h:43
athena.value
value
Definition: athena.py:124
gr
#define gr
CaloGpuGeneral_fnc::HitCellMapping_d
__DEVICE__ void HitCellMapping_d(Hit &hit, unsigned long, Chain0_Args args)
Definition: CaloGpuGeneral_fnc.cxx:240
Hit::center_eta
CUDA_HOSTDEV float & center_eta()
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloGpu/ISF_FastCaloGpu/Hit.h:85
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
Phi_mpi_pi
__HOSTDEV__ double Phi_mpi_pi(double)
Definition: GeoRegion.cxx:10
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:190
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
beamspotman.steps
int steps
Definition: beamspotman.py:501
Hit::center_z
CUDA_HOSTDEV float & center_z()
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloGpu/ISF_FastCaloGpu/Hit.h:84
lumiFormat.i
int i
Definition: lumiFormat.py:85
Hit::center_phi
CUDA_HOSTDEV float & center_phi()
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloGpu/ISF_FastCaloGpu/Hit.h:86
CaloGpuGeneral_fnc::getDDE
__DEVICE__ long long getDDE(GeoGpu *geo, int sampling, float eta, float phi)
Definition: CaloGpuGeneral_fnc.cxx:16
contents
void contents(std::vector< std::string > &keys, TDirectory *td, const std::string &directory, const std::string &pattern, const std::string &path)
Definition: computils.cxx:321
lumiFormat.array
array
Definition: lumiFormat.py:91
Rg_Sample_Index::index
int index
Definition: GeoGpu_structs.h:12
Hit::phi
CUDA_HOSTDEV float & phi()
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloGpu/ISF_FastCaloGpu/Hit.h:72
plotBeamSpotVxVal.bin
int bin
Definition: plotBeamSpotVxVal.py:82
charge
double charge(const T &p)
Definition: AtlasPID.h:991
Rg_Sample_Index
Definition: GeoGpu_structs.h:10
CaloGpuGeneral_fnc::rnd_to_fct2d
__DEVICE__ void rnd_to_fct2d(float &valuex, float &valuey, float rnd0, float rnd1, FH2D *hf2d)
Definition: CaloGpuGeneral_fnc.cxx:112
Hit::setCenter_phi
CUDA_HOSTDEV void setCenter_phi(float phi)
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloGpu/ISF_FastCaloGpu/Hit.h:90
SCT_CalibAlgs::nbins
@ nbins
Definition: SCT_CalibNumbers.h:10
CaloGpuGeneral_fnc::find_index_f
__DEVICE__ int find_index_f(float *array, int size, float value)
Definition: CaloGpuGeneral_fnc.cxx:76
GeoRegion
Definition: GeoRegion.h:18
Hit::setEtaPhiZE
CUDA_HOSTDEV void setEtaPhiZE(float eta, float phi, float z, float E)
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloGpu/ISF_FastCaloGpu/Hit.h:48
LArCellConditions.geo
bool geo
Definition: LArCellConditions.py:46
eFEXNTuple.delta_phi
def delta_phi(phi1, phi2)
Definition: eFEXNTuple.py:14
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
beamspotnt.rms
rms
Definition: bin/beamspotnt.py:1265
Hit::setCenter_eta
CUDA_HOSTDEV void setCenter_eta(float eta)
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloGpu/ISF_FastCaloGpu/Hit.h:89
Hit::E
CUDA_HOSTDEV float & E()
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloGpu/ISF_FastCaloGpu/Hit.h:75
Hit::eta
CUDA_HOSTDEV float & eta()
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloGpu/ISF_FastCaloGpu/Hit.h:71
Hit::setCenter_r
CUDA_HOSTDEV void setCenter_r(float r)
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloGpu/ISF_FastCaloGpu/Hit.h:87
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
CaloGpuGeneral_fnc::rnd_to_fct1d
__DEVICE__ float rnd_to_fct1d(float rnd, uint32_t *contents, float *borders, int nbins, uint32_t s_MaxValue)
Definition: CaloGpuGeneral_fnc.cxx:139
M_2PI
#define M_2PI
Definition: CaloGpuGeneral_fnc.cxx:11
Hit::setCenter_z
CUDA_HOSTDEV void setCenter_z(float z)
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloGpu/ISF_FastCaloGpu/Hit.h:88
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
Hit::center_r
CUDA_HOSTDEV float & center_r()
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloGpu/ISF_FastCaloGpu/Hit.h:83
Rg_Sample_Index::size
int size
Definition: GeoGpu_structs.h:11