ATLAS Offline Software
Rand4Hits.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef ISF_FASTCALOGPU_RAND4HITS_H
6 #define ISF_FASTCALOGPU_RAND4HITS_H
7 
8 #include <vector>
9 #include <random>
10 
11 #include "GpuGeneral_structs.h"
12 
13 class Rand4Hits {
14 public:
16  m_rand_ptr = 0;
17  m_total_a_hits = 0;
18  };
20 
21  float* rand_ptr( int nhits ) {
22  if ( over_alloc( nhits ) ) {
23  rd_regen();
24  return m_rand_ptr;
25  } else {
26  float* f_ptr = &( m_rand_ptr[3 * m_current_hits] );
27  return f_ptr;
28  }
29  };
30  float* rand_ptr_base() { return m_rand_ptr; }
31  void set_rand_ptr( float* ptr ) { m_rand_ptr = ptr; };
32  void set_t_a_hits( int nhits ) { m_total_a_hits = nhits; };
33  void set_c_hits( int nhits ) { m_current_hits = nhits; };
34  unsigned int get_c_hits() { return m_current_hits; };
35  unsigned int get_t_a_hits() { return m_total_a_hits; };
36 
37  void create_gen( unsigned long long seed, size_t numhits, bool useCPU = false );
38 
39  void allocate_simulation( long long maxhits, unsigned short maxbins, unsigned short maxhitct, unsigned long n_cells );
40 
41  float* get_cells_energy() { return m_cells_energy; };
42  Cell_E* get_cell_e() { return m_cell_e; };
43  Cell_E* get_cell_e_h() { return m_cell_e_h; };
44 
45  int* get_ct() { return m_ct; };
46 
47  unsigned long* get_hitcells() { return m_hitcells; };
48  int* get_hitcells_ct() { return m_hitcells_ct; };
49 
50  void rd_regen();
51 
52  void add_a_hits( int nhits ) {
53  if ( over_alloc( nhits ) )
54  m_current_hits = nhits;
55  else
56  m_current_hits += nhits;
57  };
58  bool over_alloc( int nhits ) {
59  return m_current_hits + nhits > m_total_a_hits;
60  }; // return true if hits over spill, need regenerat rand..
61 
62 private:
63  float* genCPU( size_t num );
64  void createCPUGen( unsigned long long seed );
65  void destroyCPUGen();
66 
67  float* m_rand_ptr{nullptr};
68  unsigned int m_total_a_hits;
69  unsigned int m_current_hits;
70  void* m_gen{nullptr};
71  bool m_useCPU{false};
72 
73  // patch in some GPU pointers for cudaMalloc
74  float* m_cells_energy {0};
76  int* m_ct {0};
77 
78  // host side ;
79  unsigned long* m_hitcells{nullptr};
80  int* m_hitcells_ct{nullptr};
81  Cell_E* m_cell_e_h{nullptr};
82 
83  std::vector<float> m_rnd_cpu;
84 
85 };
86 
87 #endif
Rand4Hits::get_hitcells_ct
int * get_hitcells_ct()
Definition: Rand4Hits.h:48
Rand4Hits::get_t_a_hits
unsigned int get_t_a_hits()
Definition: Rand4Hits.h:35
Rand4Hits::get_cell_e_h
Cell_E * get_cell_e_h()
Definition: Rand4Hits.h:43
Rand4Hits::m_ct
int * m_ct
Definition: Rand4Hits.h:76
Rand4Hits::m_cell_e_h
Cell_E * m_cell_e_h
Definition: Rand4Hits.h:81
Rand4Hits::createCPUGen
void createCPUGen(unsigned long long seed)
Definition: Rand4Hits_cpu.cxx:7
Rand4Hits::get_cells_energy
float * get_cells_energy()
Definition: Rand4Hits.h:41
Rand4Hits::m_useCPU
bool m_useCPU
Definition: Rand4Hits.h:71
Rand4Hits::m_current_hits
unsigned int m_current_hits
Definition: Rand4Hits.h:69
Rand4Hits::set_rand_ptr
void set_rand_ptr(float *ptr)
Definition: Rand4Hits.h:31
Rand4Hits::rand_ptr_base
float * rand_ptr_base()
Definition: Rand4Hits.h:30
Rand4Hits::~Rand4Hits
~Rand4Hits()
Rand4Hits::m_rand_ptr
float * m_rand_ptr
Definition: Rand4Hits.h:67
Rand4Hits::set_c_hits
void set_c_hits(int nhits)
Definition: Rand4Hits.h:33
Rand4Hits::rd_regen
void rd_regen()
Rand4Hits::allocate_simulation
void allocate_simulation(long long maxhits, unsigned short maxbins, unsigned short maxhitct, unsigned long n_cells)
Rand4Hits::get_ct
int * get_ct()
Definition: Rand4Hits.h:45
Rand4Hits::genCPU
float * genCPU(size_t num)
Definition: Rand4Hits_cpu.cxx:16
Rand4Hits::create_gen
void create_gen(unsigned long long seed, size_t numhits, bool useCPU=false)
Rand4Hits::get_c_hits
unsigned int get_c_hits()
Definition: Rand4Hits.h:34
Rand4Hits::Rand4Hits
Rand4Hits()
Definition: Rand4Hits.h:15
Rand4Hits::m_hitcells_ct
int * m_hitcells_ct
Definition: Rand4Hits.h:80
Rand4Hits::get_hitcells
unsigned long * get_hitcells()
Definition: Rand4Hits.h:47
Rand4Hits::over_alloc
bool over_alloc(int nhits)
Definition: Rand4Hits.h:58
GpuGeneral_structs.h
Rand4Hits::m_hitcells
unsigned long * m_hitcells
Definition: Rand4Hits.h:79
Rand4Hits::m_cells_energy
float * m_cells_energy
Definition: Rand4Hits.h:74
trigbs_pickEvents.num
num
Definition: trigbs_pickEvents.py:76
Rand4Hits::m_rnd_cpu
std::vector< float > m_rnd_cpu
Definition: Rand4Hits.h:83
Rand4Hits
Definition: Rand4Hits.h:13
Rand4Hits::destroyCPUGen
void destroyCPUGen()
Definition: Rand4Hits_cpu.cxx:12
Rand4Hits::rand_ptr
float * rand_ptr(int nhits)
Definition: Rand4Hits.h:21
Rand4Hits::add_a_hits
void add_a_hits(int nhits)
Definition: Rand4Hits.h:52
Rand4Hits::get_cell_e
Cell_E * get_cell_e()
Definition: Rand4Hits.h:42
Rand4Hits::m_total_a_hits
unsigned int m_total_a_hits
Definition: Rand4Hits.h:68
Rand4Hits::m_cell_e
Cell_E * m_cell_e
Definition: Rand4Hits.h:75
Rand4Hits::set_t_a_hits
void set_t_a_hits(int nhits)
Definition: Rand4Hits.h:32
Rand4Hits::m_gen
void * m_gen
Definition: Rand4Hits.h:70
Cell_E
Definition: GpuGeneral_structs.h:9