Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4ITModelManager.cc
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// $Id: G4ITModelManager.cc 64057 2012-10-30 15:04:49Z gcosmo $
27//
28// Author: Mathieu Karamitros (kara (AT) cenbg . in2p3 . fr)
29//
30// History:
31// -----------
32// 10 Oct 2011 M.Karamitros created
33//
34// -------------------------------------------------------------------
35
36#include "G4ITModelManager.hh"
37#include "G4ITType.hh"
38#include "G4UnitsTable.hh"
39
40using namespace std;
41
43{;}
44
46{
47 //dtor
48 mapModels::iterator it ;
49
50 for(it = fModels.begin() ; it != fModels.end() ; it ++)
51 {
52 delete it->second;
53 }
54 fModels.clear();
55}
56
58{
59 mapModels::const_iterator it = right.fModels.begin();
60
61 for ( ; it != right.fModels.end() ; it++)
62 {
63 fModels[it->first] = it->second->Clone();
64 }
65
67}
68
70{
71 if (this == &rhs) return *this; // handle self assignment
72 //assignment operator
73 return *this;
74}
75
77{
78 mapModels::iterator it = fModels.begin();
79
80 for( ; it != fModels.end() ; it ++)
81 {
82 G4VITModel* model = it ->second;
83 if(model!=0)
84 {
85 model->Initialize();
86 }
87 }
88}
89
91{
92 assert(fIsInitialized == FALSE);
93 if(fIsInitialized == true)
94 {
95 G4ExceptionDescription exceptionDescription ;
96 exceptionDescription << "You are trying to insert a new model after initialization of th model manager.";
97 G4Exception("G4ITModelManager::SetModel","ITModelManager001",
98 FatalErrorInArgument,exceptionDescription);
99 }
100 fModels[startingTime] = aModel;
101}
102
104{
105 if(!fModels.empty())
106 {
107 mapModels::reverse_iterator rit = fModels.rbegin();
108 if(rit != fModels.rend())
109 {
110 if(globalTime > rit->first)
111 {
112 return rit->second;
113 }
114 else
115 {
116 mapModels::iterator it = fModels.begin();
117
118 if(globalTime < it->first)
119 {
120 G4ExceptionDescription exceptionDescription ;
121 exceptionDescription << "No model was found at time ";
122 exceptionDescription << G4BestUnit(globalTime,"Time");
123 exceptionDescription << ". The first model is registered at time : ";
124 exceptionDescription << G4BestUnit(it->first,"Time") << ". ";
125 G4Exception("G4ITModelManager::GetModel","ITModelManager003",
126 FatalErrorInArgument,exceptionDescription);
127 }
128
129 it = fModels.lower_bound(globalTime);
130
131 if(it != fModels.end()) return it->second;
132 }
133 }
134 }
135
136 G4ExceptionDescription exceptionDescription ;
137 exceptionDescription << "No model was found.";
138 G4Exception("G4ITModelManager::GetModel","ITModelManager004",
139 FatalErrorInArgument,exceptionDescription);
140 return 0;
141}
@ FatalErrorInArgument
double G4double
Definition: G4Types.hh:64
G4ITModelManager & operator=(const G4ITModelManager &rhs)
void SetModel(G4VITModel *aModel, G4double startingTime)
G4VITModel * GetModel(const G4double globalTime)
virtual void Initialize()
Definition: G4VITModel.cc:95
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
#define FALSE
Definition: globals.hh:52
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76