Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | Friends
G4MoleculeCounter Class Reference

#include <G4MoleculeCounter.hh>

Public Types

typedef std::map< G4Molecule,
NbMoleculeAgainstTime
CounterMapType
 
typedef std::auto_ptr
< std::vector< G4Molecule > > 
RecordedMolecules
 

Public Member Functions

const NbMoleculeAgainstTimeGetNbMoleculeAgainstTime (const G4Molecule &molecule)
 
RecordedMolecules GetRecordedMolecules ()
 
virtual void DontRegister (const G4MoleculeDefinition *)
 
virtual void RegisterAll ()
 
void Use (G4bool flag=true)
 
G4bool InUse ()
 
void SetVerbose (G4int)
 
G4int GetVerbose ()
 
void SetTimeSlice (double)
 
virtual void ResetCounter ()
 

Static Public Member Functions

static void DeleteInstance ()
 
static G4MoleculeCounterGetMoleculeCounter ()
 

Protected Member Functions

 G4MoleculeCounter ()
 
virtual ~G4MoleculeCounter ()
 
virtual void AddAMoleculeAtTime (const G4Molecule &, G4double)
 
virtual void RemoveAMoleculeAtTime (const G4Molecule &, G4double)
 

Protected Attributes

CounterMapType fCounterMap
 
std::map< const
G4MoleculeDefinition *, G4bool
fDontRegister
 
G4int fVerbose
 

Static Protected Attributes

static G4ThreadLocal
G4MoleculeCounter
fpInstance = 0
 
static G4bool fUse = FALSE
 

Friends

class G4Molecule
 

Detailed Description

Definition at line 52 of file G4MoleculeCounter.hh.

Member Typedef Documentation

Definition at line 55 of file G4MoleculeCounter.hh.

typedef std::auto_ptr<std::vector<G4Molecule> > G4MoleculeCounter::RecordedMolecules

Definition at line 60 of file G4MoleculeCounter.hh.

Constructor & Destructor Documentation

G4MoleculeCounter::G4MoleculeCounter ( )
protected

Definition at line 38 of file G4MoleculeCounter.cc.

39 {
40  fVerbose = 0 ;
41 }
virtual G4MoleculeCounter::~G4MoleculeCounter ( )
inlineprotectedvirtual

Definition at line 65 of file G4MoleculeCounter.hh.

65 {;}

Member Function Documentation

void G4MoleculeCounter::AddAMoleculeAtTime ( const G4Molecule molecule,
G4double  time 
)
protectedvirtual

Definition at line 67 of file G4MoleculeCounter.cc.

References G4BestUnit, G4cout, G4endl, G4Molecule::GetDefinition(), and G4Molecule::GetName().

Referenced by G4Molecule::BuildTrack().

68 {
69  if(fDontRegister[molecule.GetDefinition()]) return ;
70 
71  if(fVerbose)
72  {
73  G4cout<<"G4MoleculeCounter::AddAMoleculeAtTime : "<< molecule.GetName()
74  << " at time : " << G4BestUnit(time, "Time") <<G4endl;
75  }
76 
77  CounterMapType::iterator counterMap_i = fCounterMap.find(molecule) ;
78 
79  if(counterMap_i == fCounterMap.end())
80  {
81  // DEBUG
82 // if(fVerbose) G4cout << " !! ***** Map is empty " << G4endl;
83  fCounterMap[molecule][time] = 1;
84  }
85  else if(counterMap_i->second.empty())
86  {
87  // DEBUG
88 // if(fVerbose) G4cout << " !! ***** Map is empty " << G4endl;
89  counterMap_i->second[time] = 1;
90  }
91  else
92  {
93  NbMoleculeAgainstTime::iterator end = counterMap_i->second.end();
94  end--;
95 
96  // DEBUG
97 // if(fVerbose)
98 // G4cout<<"!! End Time = "<< G4BestUnit(end->first, "Time") <<G4endl;
99 
100  if(end->first <= time)
101  {
102  counterMap_i->second[time]=end->second + 1;
103  }
104  else
105  {
106  NbMoleculeAgainstTime::iterator it = counterMap_i->second.lower_bound(time);
107 
108  while(it->first > time && it!=counterMap_i->second.begin())
109  {
110  // DEBUG
111 // if(fVerbose)
112 // G4cout<<"!! ********** Is going back!!!!"<<G4endl;
113  it--;
114  }
115 
116  if(it==counterMap_i->second.begin() && it->first > time)
117  {
118  // DEBUG
119 // if(fVerbose)
120 // G4cout<<"!! ********** Illegal !!!!"<<G4endl;
121  return ;
122  }
123 
124  // DEBUG
125 // if(fVerbose)
126 // {
127 // G4cout<<"!! PREVIOUS NB = "<< it->second <<G4endl;
128 // G4cout<<"!! PREVIOUS TIME = "<< G4BestUnit(it->first,"Time") <<G4endl;
129 // }
130  counterMap_i->second[time]=it->second + 1;
131  }
132  }
133 
134  // DEBUG
135 // if(fVerbose)
136 // G4cout<<"!! NB = "<< fCounterMap[molecule][time]<<G4endl;
137 }
CounterMapType fCounterMap
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
std::map< const G4MoleculeDefinition *, G4bool > fDontRegister
const G4String & GetName() const
Definition: G4Molecule.cc:243
G4GLOB_DLL std::ostream G4cout
const G4MoleculeDefinition * GetDefinition() const
Definition: G4Molecule.cc:379
#define G4endl
Definition: G4ios.hh:61
void G4MoleculeCounter::DeleteInstance ( )
static

Definition at line 53 of file G4MoleculeCounter.cc.

54 {
55  if(fpInstance)
56  {
57  delete fpInstance;
58  fpInstance = 0;
59  }
60 }
static G4ThreadLocal G4MoleculeCounter * fpInstance
void G4MoleculeCounter::DontRegister ( const G4MoleculeDefinition molDef)
inlinevirtual

Definition at line 137 of file G4MoleculeCounter.hh.

References fDontRegister.

138 {
139  fDontRegister[molDef] = true ;
140 }
std::map< const G4MoleculeDefinition *, G4bool > fDontRegister
G4MoleculeCounter * G4MoleculeCounter::GetMoleculeCounter ( )
static

Definition at line 45 of file G4MoleculeCounter.cc.

Referenced by G4Molecule::BuildTrack(), and G4Molecule::~G4Molecule().

46 {
47  if(!fpInstance)
49 
50  return fpInstance;
51 }
static G4ThreadLocal G4MoleculeCounter * fpInstance
const NbMoleculeAgainstTime & G4MoleculeCounter::GetNbMoleculeAgainstTime ( const G4Molecule molecule)
inline

Definition at line 122 of file G4MoleculeCounter.hh.

References fCounterMap.

123 {
124  return fCounterMap[molecule];
125 }
CounterMapType fCounterMap
G4MoleculeCounter::RecordedMolecules G4MoleculeCounter::GetRecordedMolecules ( )

Definition at line 253 of file G4MoleculeCounter.cc.

References G4cout, and G4endl.

254 {
255  if(fVerbose > 1)
256  {
257  G4cout<<"Entering in G4MoleculeCounter::RecordMolecules"<<G4endl;
258  }
259 
260  CounterMapType::iterator it;
261  RecordedMolecules output (new vector<G4Molecule>) ;
262 
263  for(it = fCounterMap.begin() ; it != fCounterMap.end() ; it++)
264  {
265  output->push_back(it->first);
266  }
267  return output;
268 }
CounterMapType fCounterMap
G4GLOB_DLL std::ostream G4cout
std::auto_ptr< std::vector< G4Molecule > > RecordedMolecules
#define G4endl
Definition: G4ios.hh:61
G4int G4MoleculeCounter::GetVerbose ( )
inline

Definition at line 132 of file G4MoleculeCounter.hh.

References fVerbose.

133 {
134  return fVerbose ;
135 }
G4bool G4MoleculeCounter::InUse ( )
inline

Definition at line 101 of file G4MoleculeCounter.hh.

References fUse.

Referenced by G4Molecule::BuildTrack().

102  {
103  return fUse;
104  }
void G4MoleculeCounter::RegisterAll ( )
inlinevirtual

Definition at line 142 of file G4MoleculeCounter.hh.

References fDontRegister.

143 {
144  fDontRegister.clear();
145 }
std::map< const G4MoleculeDefinition *, G4bool > fDontRegister
void G4MoleculeCounter::RemoveAMoleculeAtTime ( const G4Molecule molecule,
G4double  time 
)
protectedvirtual

Definition at line 139 of file G4MoleculeCounter.cc.

References FatalErrorInArgument, compDoubleWithPrecision::fPrecision, G4BestUnit, G4cout, G4endl, G4Exception(), G4Molecule::GetDefinition(), G4Molecule::GetName(), and G4Molecule::PrintState().

Referenced by G4Molecule::~G4Molecule().

140 {
141  if(fDontRegister[molecule.GetDefinition()]) return ;
142 
143  if(fVerbose)
144  {
145  G4cout<<"G4MoleculeCounter::RemoveAMoleculeAtTime : "<< molecule.GetName()
146  << " at time : " << G4BestUnit(time,"Time") <<G4endl;
147  }
148 
149  NbMoleculeAgainstTime& nbMolPerTime = fCounterMap[molecule];
150 
151  if(nbMolPerTime.empty())
152  {
153  molecule.PrintState();
154  G4String errMsg = "You are trying to remove molecule "
155  + molecule.GetName()
156  +" from the counter while this kind of molecules has not been registered yet";
157  G4Exception("G4MoleculeCounter::RemoveAMoleculeAtTime","",FatalErrorInArgument, errMsg);
158 
159  return;
160  }
161  else
162  {
163  NbMoleculeAgainstTime::iterator it ;
164 
165  if(nbMolPerTime.size() == 1)
166  {
167  it = nbMolPerTime.begin() ;
168  // DEBUG
169 // if(fVerbose)
170 // G4cout << "!! fCounterMap[molecule].size() == 1" << G4endl;
171  }
172  else
173  {
174  it = nbMolPerTime.lower_bound(time);
175  }
176 
177  if(it==nbMolPerTime.end())
178  {
179  // DEBUG
180 // if(fVerbose)
181 // G4cout << " ********** NO ITERATOR !!!!!!!!! " << G4endl;
182  it--;
183 
184  if(time<it->first)
185  {
186  G4String errMsg = "There was no "+ molecule.GetName()
187  + " record at the time or even before the time asked";
188  G4Exception("G4MoleculeCounter::RemoveAMoleculeAtTime","",FatalErrorInArgument, errMsg);
189  }
190  }
191 
192  // DEBUG
193 // if(fVerbose)
194 // {
195 //// G4cout << "G4MoleculeCounter::RemoveAMoleculeAtTime " << G4endl;
196 // G4cout<<"!! Molecule = " << molecule.GetName() << G4endl;
197 // G4cout<<"!! At Time = "<< G4BestUnit(time,"Time") <<G4endl;
198 // G4cout<<"!! PREVIOUS TIME = "<< G4BestUnit(it->first,"Time")<<G4endl;
199 // G4cout<<"!! PREVIOUS Nb = "<< it->second <<G4endl;
200 // }
201 
202  // If valgrind problem on the line below, it means that the pointer "it"
203  // points nowhere
204  if(nbMolPerTime.value_comp()(*it, *nbMolPerTime.begin()))
205  {
206  // DEBUG
207 // if(fVerbose)
208 // G4cout<<"!! ***** In value_comp ... " << G4endl;
209  it++;
210  if(time<it->first)
211  {
212  G4String errMsg = "There was no "+ molecule.GetName()
213  + " record at the time or even before the time asked";
214  G4Exception("G4MoleculeCounter::RemoveAMoleculeAtTime","",FatalErrorInArgument, errMsg);
215  }
216  }
217 
218  while(it->first - time > compDoubleWithPrecision::fPrecision && it!=nbMolPerTime.begin())
219  {
220  // DEBUG
221 // if(fVerbose)
222 // {
223 // G4cout<<"!! ***** Is going back!!!!"<<G4endl;
224 // G4cout<<"!! PREVIOUS TIME = "<< G4BestUnit(it-> first,"Time") <<G4endl;
225 // }
226  it--;
227  }
228 
229  if(it==nbMolPerTime.begin() && it->first > time)
230  {
231  // DEBUG
232 // if(fVerbose)
233 // G4cout<<"!! ********** Illegal !!!!"<<G4endl;
234  return ;
235  }
236 
237  // DEBUG
238 // if(fVerbose)
239 // {
240 // G4cout<<"!! PREVIOUS NB = "<< (*it).second <<G4endl;
241 // G4cout<<"!! PREVIOUS TIME = "<< G4BestUnit(it->first,"Time")<<G4endl;
242 // }
243  nbMolPerTime[time]=it->second - 1;
244  }
245 
246  // DEBUG
247 // if(fVerbose)
248 // {
249 // G4cout<<"!! NB = "<< nbMolPerTime[time]<<G4endl;
250 // }
251 }
CounterMapType fCounterMap
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
std::map< const G4MoleculeDefinition *, G4bool > fDontRegister
const G4String & GetName() const
Definition: G4Molecule.cc:243
G4GLOB_DLL std::ostream G4cout
const G4MoleculeDefinition * GetDefinition() const
Definition: G4Molecule.cc:379
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
static G4ThreadLocal double fPrecision
void PrintState() const
Definition: G4Molecule.cc:258
std::map< G4double, G4int, compDoubleWithPrecision > NbMoleculeAgainstTime
#define G4endl
Definition: G4ios.hh:61
void G4MoleculeCounter::ResetCounter ( )
inlinevirtual

Definition at line 117 of file G4MoleculeCounter.hh.

References fCounterMap.

118 {
119  fCounterMap.clear();
120 }
CounterMapType fCounterMap
void G4MoleculeCounter::SetTimeSlice ( double  timeSlice)

Definition at line 62 of file G4MoleculeCounter.cc.

References compDoubleWithPrecision::fPrecision.

63 {
65 }
static G4ThreadLocal double fPrecision
void G4MoleculeCounter::SetVerbose ( G4int  level)
inline

Definition at line 127 of file G4MoleculeCounter.hh.

References fVerbose.

128 {
129  fVerbose = level;
130 }
void G4MoleculeCounter::Use ( G4bool  flag = true)
inline

Definition at line 97 of file G4MoleculeCounter.hh.

References fUse.

98  {
99  fUse=flag;
100  }

Friends And Related Function Documentation

friend class G4Molecule
friend

Definition at line 74 of file G4MoleculeCounter.hh.

Field Documentation

CounterMapType G4MoleculeCounter::fCounterMap
protected

Definition at line 68 of file G4MoleculeCounter.hh.

Referenced by GetNbMoleculeAgainstTime(), and ResetCounter().

std::map<const G4MoleculeDefinition*, G4bool> G4MoleculeCounter::fDontRegister
protected

Definition at line 69 of file G4MoleculeCounter.hh.

Referenced by DontRegister(), and RegisterAll().

G4ThreadLocal G4MoleculeCounter * G4MoleculeCounter::fpInstance = 0
staticprotected

Definition at line 66 of file G4MoleculeCounter.hh.

G4bool G4MoleculeCounter::fUse = FALSE
staticprotected

Definition at line 70 of file G4MoleculeCounter.hh.

Referenced by InUse(), and Use().

G4int G4MoleculeCounter::fVerbose
protected

Definition at line 72 of file G4MoleculeCounter.hh.

Referenced by GetVerbose(), and SetVerbose().


The documentation for this class was generated from the following files: