Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4LENDManager.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 // Class Description
27 // Manager of LEND (Low Energy Nuclear Data) target (nucleus)
28 // LEND is Geant4 interface for GIDI (General Interaction Data Interface)
29 // which gives a discription of nuclear and atomic reactions, such as
30 // Binary collision cross sections
31 // Particle number multiplicity distributions of reaction products
32 // Energy and angular distributions of reaction products
33 // Derived calculational constants
34 // GIDI is developped at Lawrence Livermore National Laboratory
35 // Class Description - End
36 
37 // 071025 First implementation done by T. Koi (SLAC/SCCS)
38 // 101118 Name modifications for release T. Koi (SLAC/PPA)
39 
40 #include "G4LENDManager.hh"
41 #include "G4HadronicException.hh"
42 
43 #include "G4Neutron.hh"
44 
45 G4LENDManager* G4LENDManager::lend_manager = NULL;
46 
48 :verboseLevel( 0 )
49 {
50 
51  printBanner();
52 
53  if(!getenv("G4LENDDATA"))
54  throw G4HadronicException(__FILE__, __LINE__, " Please setenv G4LENDDATA to point to the LEND files." );
55 
56  G4String xmcf = getenv("G4LENDDATA");
57  xmcf = xmcf+"/xmcf.n_1.map";
58 
59 // for neutron
60 
61  G4GIDI* axLEND = new G4GIDI( 1 , xmcf );
62 
63  if ( proj_lend_map.find ( G4Neutron::Neutron() ) == proj_lend_map.end() )
64  {
65  proj_lend_map.insert ( std::pair < G4ParticleDefinition* , G4GIDI* > ( G4Neutron::Neutron() , axLEND ) );
66  }
67 
68  v_lend_target.clear();
69 
70  ionTable = new G4IonTable();
71  nistElementBuilder = new G4NistElementBuilder( 0 );
72 
73 }
74 
75 
76 
78 {
79 
80 // deleting target
81  for ( std::vector < lend_target >::iterator
82  it = v_lend_target.begin() ; it != v_lend_target.end() ; it++ )
83  {
84  (*it).lend->freeTarget( it->target );
85  }
86 
87 // deleting lend
88  for ( std::map < G4ParticleDefinition* , G4GIDI* >::iterator
89  it = proj_lend_map.begin() ; it != proj_lend_map.end() ; it++ )
90  {
91  delete it->second;
92  }
93 
94  delete ionTable;
95  delete nistElementBuilder;
96 
97 }
98 
99 
100 
102 {
103 
104  G4GIDI_target* anLENDTarget = NULL;
105 
106  G4int iTarg = ionTable->GetNucleusEncoding( iZ , iA );
107  // G4double E=0.0, G4int J=0);
108 
109  for ( std::vector < lend_target >::iterator
110  it = v_lend_target.begin() ; it != v_lend_target.end() ; it++ )
111  {
112 // find the target
113  if ( it->proj == proj && it->target_code == iTarg && it->evaluation == evaluation )
114  {
115  return it->target;
116  }
117  }
118 
119  if ( proj_lend_map.find ( proj ) == proj_lend_map.end() )
120  {
121  G4cout << proj->GetParticleName() << " is not supported by this LEND." << G4endl;
122  return anLENDTarget; // return NULL
123  }
124 
125  G4GIDI* xlend = proj_lend_map.find ( proj ) -> second;
126 
127  if ( xlend->isThisDataAvailable( evaluation, iZ, iA , iM ) )
128  {
129 
130  if ( verboseLevel > 1 )
131  G4cout << evaluation << " for " << ionTable->GetIonName( iZ , iA , 0 ) << " is exist in this LEND." << G4endl;
132 
133  anLENDTarget = xlend->readTarget( evaluation , iZ , iA , iM );
134 
135  lend_target new_target;
136  new_target.lend = xlend;
137  new_target.target = anLENDTarget;
138  new_target.proj = proj;
139  new_target.evaluation = evaluation;
140  new_target.target_code = iTarg;
141 
142  v_lend_target.push_back( new_target );
143 
144 // found EXACT
145  return anLENDTarget;
146 
147  }
148  else
149  {
150 // NO EXACT DATA (Evaluatino & Z,A,M)
151  // This is for ground state
152  if ( verboseLevel > 1 )
153  G4cout << evaluation << " for " << ionTable->GetIonName( iZ , iA , 0 ) << " is not exist in this LEND." << G4endl;
154 
155  std::vector< std::string >* available = xlend->getNamesOfAvailableLibraries( iZ, iA , iM );
156  if ( available->size() > 0 )
157  {
158 // EXACT Z,A,M but Evaluation is different
159  if ( verboseLevel > 1 )
160  {
161  G4cout << " However you can use following evaluation(s) for the target. " << G4endl;
162 
163  std::vector< std::string >::iterator its;
164  for ( its = available->begin() ; its != available->end() ; its++ )
165  G4cout << *its << G4endl;
166 
167  G4cout << G4endl;
168  }
169  }
170 //
171 // checking natural abundance data for Z
172 //
173  else if ( xlend->isThisDataAvailable( evaluation, iZ, 0 , iM ) )
174  {
175 // EXACT natural abundance data for the evaluation
176  if ( verboseLevel > 1 )
177  G4cout << " However you can use natural abundance data for the target. " << G4endl;
178  }
179  else
180  {
181  std::vector< std::string >* available_nat = xlend->getNamesOfAvailableLibraries( iZ, 0 , iM );
182 //
183  if ( available_nat->size() > 0 )
184  {
185 // EXACT natural abundance data for Z but differnet evaluation
186  if ( verboseLevel > 1 )
187  {
188  G4cout << " However you can use following evaluation(s) for natural abundace of the target. " << G4endl;
189 
190  std::vector< std::string >::iterator its;
191  for ( its = available_nat->begin() ; its != available_nat->end() ; its++ )
192  G4cout << *its << G4endl;
193  G4cout << G4endl;
194  }
195  }
196  }
197 
198 // return NULL if exact data is not available
199  return anLENDTarget; // return NULL
200  }
201 
202  return anLENDTarget;
203 }
204 
205 
206 
207 std::vector< G4String > G4LENDManager::IsLENDTargetAvailable ( G4ParticleDefinition* proj , G4int iZ , G4int iA , G4int iM )
208 {
209 
210  std::vector< G4String > answer;
211  if ( proj_lend_map.find ( proj ) == proj_lend_map.end() )
212  {
213  G4cout << proj->GetParticleName() << " is not supported by this LEND." << G4endl;
214  return answer; // return NULL
215  }
216 
217  G4GIDI* xlend = proj_lend_map.find ( proj ) -> second;
218  std::vector< std::string >* available = xlend->getNamesOfAvailableLibraries( iZ, iA , iM );
219 
220  if ( available->size() > 0 )
221  {
222  std::vector< std::string >::iterator its;
223  for ( its = available->begin() ; its != available->end() ; its++ )
224  answer.push_back ( *its );
225  }
226 
227  return answer;
228 }
229 
230 
231 
232 void G4LENDManager::printBanner()
233 {
234  G4cout << " <<BEGIN-copyright>> " << G4endl;
235  G4cout << " Copyright (c) 2010, Lawrence Livermore National Security, LLC. " << G4endl;
236  G4cout << " Produced at the Lawrence Livermore National Laboratory " << G4endl;
237  G4cout << " Written by Bret R. Beck, beck6@llnl.gov. " << G4endl;
238  G4cout << " CODE-461393 " << G4endl;
239  G4cout << " All rights reserved. " << G4endl;
240  G4cout << " " << G4endl;
241  G4cout << " This file is part of GIDI. For details, see nuclear.llnl.gov. " << G4endl;
242  G4cout << " Please also read the \"Additional BSD Notice\" at nuclear.llnl.gov. " << G4endl;
243  G4cout << " " << G4endl;
244  G4cout << " Redistribution and use in source and binary forms, with or without modification, " << G4endl;
245  G4cout << " are permitted provided that the following conditions are met: " << G4endl;
246  G4cout << " " << G4endl;
247  G4cout << " 1) Redistributions of source code must retain the above copyright notice, " << G4endl;
248  G4cout << " this list of conditions and the disclaimer below. " << G4endl;
249  G4cout << " 2) Redistributions in binary form must reproduce the above copyright notice, " << G4endl;
250  G4cout << " this list of conditions and the disclaimer (as noted below) in the " << G4endl;
251  G4cout << " documentation and/or other materials provided with the distribution. " << G4endl;
252  G4cout << " 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be " << G4endl;
253  G4cout << " used to endorse or promote products derived from this software without " << G4endl;
254  G4cout << " specific prior written permission. " << G4endl;
255  G4cout << " " << G4endl;
256  G4cout << " THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY " << G4endl;
257  G4cout << " EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES " << G4endl;
258  G4cout << " OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT " << G4endl;
259  G4cout << " SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR " << G4endl;
260  G4cout << " CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR " << G4endl;
261  G4cout << " CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS " << G4endl;
262  G4cout << " OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED " << G4endl;
263  G4cout << " AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT " << G4endl;
264  G4cout << " (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, " << G4endl;
265  G4cout << " EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. " << G4endl;
266  G4cout << " <<END-copyright>> " << G4endl;
267 }
268 
269 
271 {
272  G4bool result=false;
273  if ( newValue >= verboseLevel)
274  {
275  verboseLevel = newValue;
276  result=true;
277  }
278  else
279  {
280  G4cout << "Since other LEND model or cross section have set the higher verbose level (" << verboseLevel << ") in LENDManager, you cannot change the value now." << G4endl;
281  }
282 
283  return result;
284 }