Geant4  10.03.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4HadronicInteractionRegistry.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: G4HadronicInteractionRegistry.cc 97302 2016-06-01 09:30:11Z gcosmo $
27 //
28 // 23-Jan-2009 V.Ivanchenko make the class to be a singleton
29 // 17-Aug-2012 V.Ivanchenko added hadronic model factories
30 
32 #include "G4HadronicInteraction.hh"
33 
34 G4ThreadLocal G4HadronicInteractionRegistry* G4HadronicInteractionRegistry::instance = nullptr;
35 
37 {
38  if(nullptr == instance) {
40  instance = inst.Instance();
41  }
42  return instance;
43 }
44 
45 G4HadronicInteractionRegistry::G4HadronicInteractionRegistry()
46  : isInitialized(false)
47 {
48  //G4cout << "G4HadronicInteractionRegistry " << this << G4endl;
49 }
50 
52 {
53  Clean();
54 }
55 
57 {
58  size_t nModels = allModels.size();
59  //G4cout << "G4HadronicInteractionRegistry::Clean() start " << nModels
60  // << " " << this << G4endl;
61  for (size_t i=0; i<nModels; ++i) {
62  if( allModels[i] ) {
63  const char* xxx = (allModels[i]->GetModelName()).c_str();
64  G4int len = (allModels[i]->GetModelName()).length();
65  len = std::min(len, 9);
66  const G4String mname = G4String(xxx, len);
67  //G4cout << "G4HadronicInteractionRegistry: delete " << i << " "
68  // << allModels[i] << " " << mname
69  // << " " << this << G4endl;
70  if(mname != "NeutronHP" && mname != "ParticleH") {
71  delete allModels[i];
72  }
73  // G4cout << "done " << this << G4endl;
74  }
75  }
76  allModels.clear();
77  //G4cout <<"G4HadronicInteractionRegistry::Clean() is done "<<G4endl;
78 }
79 
81 {
82  size_t nModels = allModels.size();
83  for (size_t i=0; i<nModels; ++i) {
84  if( allModels[i] ) { allModels[i]->InitialiseModel(); }
85  }
86 }
87 
88 void
90 {
91  if(!aModel) { return; }
92  size_t nModels = allModels.size();
93  for (size_t i=0; i<nModels; ++i) {
94  if( aModel == allModels[i] ) { return; }
95  }
96  //G4cout << "Register model <" << aModel->GetModelName()
97  // << "> " << nModels+1 << " " << aModel << G4endl;
98  allModels.push_back(aModel);
99 }
100 
101 void
103 {
104  if(!aModel) { return; }
105  size_t nModels = allModels.size();
106  for (size_t i=0; i<nModels; ++i) {
107  if( aModel == allModels[i] ) {
108  //G4cout << "DeRegister model <" << aModel
109  // << "> " << i << G4endl;
110  allModels[i] = 0;
111  return;
112  }
113  }
114 }
115 
118 {
120 
121  size_t nModels = allModels.size();
122  for (size_t i=0; i<nModels; ++i) {
123  G4HadronicInteraction* p = allModels[i];
124  if(p) {
125  if (p->GetModelName() == name) {
126  model = p;
127  break;
128  }
129  }
130  }
131  return model;
132 }
133 
134 std::vector<G4HadronicInteraction*>
136 {
137  std::vector<G4HadronicInteraction*> models;
138 
139  size_t nModels = allModels.size();
140  for (size_t i=0; i<nModels; ++i) {
141  G4HadronicInteraction* p = allModels[i];
142  if(p) {
143  if (p->GetModelName() == name) {
144  models.push_back(p);
145  }
146  }
147  }
148  return models;
149 }
const XML_Char int len
Definition: expat.h:262
const XML_Char * name
Definition: expat.h:151
const char * p
Definition: xmltok.h:285
std::vector< G4HadronicInteraction * > FindAllModels(const G4String &name)
void RemoveMe(G4HadronicInteraction *aModel)
const G4String & GetModelName() const
void RegisterMe(G4HadronicInteraction *aModel)
#define G4ThreadLocal
Definition: tls.hh:89
int G4int
Definition: G4Types.hh:78
G4HadronicInteraction * FindModel(const G4String &name)
static G4HadronicInteractionRegistry * Instance()
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
const XML_Char XML_Content * model
Definition: expat.h:151
G4bool isInitialized()