Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4ElectronOccupancy.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// G4ElectronOccupancy
27//
28// Class description:
29//
30// This class has information of occupation of electrons in atomic orbits.
31// GetOccupancy(N) gives the number of electron in N-th orbit
32// For example : Carbon atom should be
33// GetOccupancy(0) --> 2
34// GetOccupancy(1) --> 4
35// GetOccupancy(2..7) --> 0
36//
37// GetTotalOccupancy() gives the total number of electrons
38
39// Author: Hisaya Kurashige, 17 Aug 1999
40// --------------------------------------------------------------------
41#ifndef G4ElectronOccupancy_hh
42#define G4ElectronOccupancy_hh 1
43
44#include "globals.hh"
45#include "G4Allocator.hh"
46#include "G4ios.hh"
47
48#include "pwdefs.hh"
49
51{
52 public:
53
54 enum { MaxSizeOfOrbit = 20};
55
58
59 virtual ~G4ElectronOccupancy();
60
61 inline void *operator new(size_t);
62 inline void operator delete(void *aElectronOccupancy);
63 // new/delete operators are overloaded to use G4Allocator
64
66 G4bool operator==(const G4ElectronOccupancy& right) const;
67 G4bool operator!=(const G4ElectronOccupancy& right) const;
68 // operators
69
70 inline G4int GetTotalOccupancy() const;
71 inline G4int GetOccupancy(G4int orbit) const;
72 // The following methods returns
73 // 0: if the orbit(atom) is vacant
74 // >0: number of electrons in orbit
75
76 G4int AddElectron(G4int orbit, G4int number = 1);
77 G4int RemoveElectron(G4int orbit, G4int number = 1);
78
79 inline G4int GetSizeOfOrbit() const;
80 void DumpInfo() const;
81
82 private:
83
84 G4int theSizeOfOrbit = 0;
85 G4int theTotalOccupancy = 0;
86 G4int* theOccupancies = nullptr;
87};
88
89extern G4PART_DLL
91
92// ------------------------
93// Inline methods
94// ------------------------
95
96inline
97void * G4ElectronOccupancy::operator new(size_t)
98{
99 if (aElectronOccupancyAllocator() == nullptr)
100 {
102 }
103 return (void*) aElectronOccupancyAllocator()->MallocSingle();
104}
105
106inline
107void G4ElectronOccupancy::operator delete(void* aElectronOccupancy)
108{
110 ->FreeSingle((G4ElectronOccupancy *) aElectronOccupancy);
111}
112
113inline
115{
116 return theSizeOfOrbit;
117}
118
119inline
121{
122 return theTotalOccupancy;
123}
124
125inline
127{
128 G4int value = 0;
129 if ((orbit >=0)&&(orbit<theSizeOfOrbit))
130 {
131 value = theOccupancies[orbit];
132 }
133 return value;
134}
135
136#endif
G4PART_DLL G4Allocator< G4ElectronOccupancy > *& aElectronOccupancyAllocator()
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4int GetTotalOccupancy() const
G4bool operator!=(const G4ElectronOccupancy &right) const
G4int AddElectron(G4int orbit, G4int number=1)
G4int RemoveElectron(G4int orbit, G4int number=1)
G4int GetOccupancy(G4int orbit) const
G4bool operator==(const G4ElectronOccupancy &right) const
G4ElectronOccupancy & operator=(const G4ElectronOccupancy &right)
#define G4PART_DLL
Definition: pwdefs.hh:45