Geant4  10.01.p02
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 82440 2014-06-20 10:39:49Z 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 
35 
37 {
38  if(0 == theInstance) {
39  static G4ThreadLocal G4HadronicInteractionRegistry *manager_G4MT_TLS_ = 0 ; if (!manager_G4MT_TLS_) manager_G4MT_TLS_ = new G4HadronicInteractionRegistry ; G4HadronicInteractionRegistry &manager = *manager_G4MT_TLS_;
40  theInstance = &manager;
41  }
42  return theInstance;
43 }
44 
46 {}
47 
49 {
50  Clean();
51 }
52 
54 {
55  size_t nModels = allModels.size();
56  //G4cout << "G4HadronicInteractionRegistry::Clean() start " << nModels << G4endl;
57  if(0 < nModels) {
58  for (size_t i=0; i<nModels; ++i) {
59  if( allModels[i] ) {
60  //G4cout << "delete " << i << G4endl;
61  //G4cout << allModels[i]->GetModelName() << G4endl;
62  G4HadronicInteraction * model = allModels[i];
63  allModels[i] = 0;
64  delete model;
65  }
66  }
67  allModels.clear();
68  }
69  //G4cout << "G4HadronicInteractionRegistry::Clean() is done " << G4endl;
70 }
71 
72 void
74 {
75  if(!aModel) { return; }
76  size_t nModels = allModels.size();
77  if(nModels > 0) {
78  for (size_t i=0; i<nModels; ++i) {
79  if( aModel == allModels[i] ) { return; }
80  }
81  }
82  //G4cout << "Register model <" << aModel->GetModelName()
83  //<< "> " << nModels+1 << G4endl;
84  allModels.push_back(aModel);
85 }
86 
87 void
89 {
90  if(!aModel) { return; }
91  size_t nModels = allModels.size();
92  if(0 == nModels) { return; }
93  for (size_t i=0; i<nModels; ++i) {
94  if( aModel == allModels[i] ) {
95  //G4cout << "DeRegister model <" << aModel->GetModelName()
96  //<< "> " << i << G4endl;
97  allModels[i] = 0;
98  return;
99  }
100  }
101 }
102 
105 {
106  G4HadronicInteraction* model = 0;
107 
108  size_t nModels = allModels.size();
109  for (size_t i=0; i<nModels; ++i) {
111  if(p) {
112  if (p->GetModelName() == name) {
113  model = p;
114  break;
115  }
116  }
117  }
118  return model;
119 }
120 
121 std::vector<G4HadronicInteraction*>
123 {
124  std::vector<G4HadronicInteraction*> models;
125 
126  size_t nModels = allModels.size();
127  for (size_t i=0; i<nModels; ++i) {
129  if(p) {
130  if (p->GetModelName() == name) {
131  models.push_back(p);
132  }
133  }
134  }
135  return models;
136 }
G4String name
Definition: TRTMaterials.hh:40
std::vector< G4HadronicInteraction * > FindAllModels(const G4String &name)
void RemoveMe(G4HadronicInteraction *aModel)
std::vector< G4HadronicInteraction * > allModels
const G4String & GetModelName() const
void RegisterMe(G4HadronicInteraction *aModel)
#define G4ThreadLocal
Definition: tls.hh:89
G4HadronicInteraction * FindModel(const G4String &name)
static G4HadronicInteractionRegistry * Instance()
static G4ThreadLocal G4HadronicInteractionRegistry * theInstance