Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4LENDUsedTarget.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 // Container 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 "G4LENDUsedTarget.hh"
41 #include "G4LENDManager.hh"
42 
43 void G4LENDUsedTarget::searchTarget()
44 {
45 
46  G4LENDManager* lend_manager = G4LENDManager::GetInstance();
47 
48  target = NULL;
49  target = lend_manager->GetLENDTarget( proj , wanted_Evaluation , wanted_Z , wanted_A , wanted_M );
50 
51  if ( target != NULL )
52  {
53  actual_Z = wanted_Z;
54  actual_A = wanted_A;
55  actual_M = wanted_M;
56  actual_Evaluation = wanted_Evaluation;
57 
58  return;
59  }
60 
61  if ( allow_nat == true || allow_anything == true )
62  {
63  target = lend_manager->GetLENDTarget( proj , wanted_Evaluation , wanted_Z , 0 , wanted_M );
64  if ( target != NULL )
65  {
66  actual_Z = wanted_Z;
67  actual_A = 0;
68  actual_M = wanted_M;
69  actual_Evaluation = wanted_Evaluation;
70 
71  return;
72  }
73  }
74 
75  G4int iZ;
76  G4int iA;
77  G4int iM;
78 
79  if ( allow_anything == true )
80  {
81 
82  // Loop Z
83  G4int dZ = 0;
84  G4int pZ = 1;
85  while ( dZ < max_Z - min_Z )
86  {
87  iZ = wanted_Z + pZ*dZ;
88 
89  // Loop A
90  G4int dA = 0;
91  G4int pA = 1;
92  while ( dA < max_A - min_A )
93  {
94  iA = wanted_A + pA*dA;
95 
96  // Loop M
97  G4int pM = 1;
98  G4int dM = 0;
99  while ( dM < max_M - min_M )
100  {
101 
102  iM = wanted_M + pM*dM;
103 
104  if ( iZ < min_Z ) iZ = min_Z;
105  if ( iA < min_A ) iA = 0;
106  if ( iM < min_M ) iM = min_M;
107 
108  if ( iZ > max_Z ) iZ = max_Z;
109  if ( iA > max_A ) iA = max_A;
110  if ( iM > max_M ) iM = max_M;
111 
112  //Loop Evaluations choice the first available
113 
114  if ( lend_manager->IsLENDTargetAvailable( proj , iZ , iA , iM ).size() > 0 )
115  {
116  //Choice the first available
117  actual_Evaluation = lend_manager->IsLENDTargetAvailable( proj , iZ , iA , iM ).front();
118 
119  actual_Z = iZ;
120  actual_A = iA;
121  actual_M = iM;
122  target = lend_manager->GetLENDTarget( proj , actual_Evaluation , iZ , iA , iM );
123  return;
124  }
125 
126  if ( pM > 0 )
127  pM = -1;
128  else
129  dM++;
130  }
131 
132  if ( pA > 0 )
133  pA = -1;
134  else
135  dA++;
136  }
137 
138  if ( pZ > 0 )
139  pZ = -1;
140  else
141  dZ++;
142  }
143 
144  }
145 
146 }
const XML_Char * target
int G4int
Definition: G4Types.hh:78
G4GIDI_target * GetLENDTarget(G4ParticleDefinition *, G4String, G4int iZ, G4int iA, G4int iM=0)
std::vector< G4String > IsLENDTargetAvailable(G4ParticleDefinition *, G4int iZ, G4int iA, G4int iM=0)
static G4LENDManager * GetInstance()