ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4INCLHFB.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4INCLHFB.cc
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 // INCL++ intra-nuclear cascade model
27 // Alain Boudard, CEA-Saclay, France
28 // Joseph Cugnon, University of Liege, Belgium
29 // Jean-Christophe David, CEA-Saclay, France
30 // Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland
31 // Sylvie Leray, CEA-Saclay, France
32 // Davide Mancusi, CEA-Saclay, France
33 //
34 #define INCLXX_IN_GEANT4_MODE 1
35 
36 #include "globals.hh"
37 
38 /*
39  * HFB.cc
40  *
41  * \date Oct 25, 2017
42  * \author Jose Luis Rodriguez Sanchez
43  */
44 
45 #include "G4INCLHFB.hh"
46 #include "G4INCLParticleTable.hh"
47 #include "G4INCLGlobals.hh"
48 #include "G4Threading.hh"
49 #include <algorithm>
50 #include <istream>
51 
52 namespace G4INCL {
53 
54  namespace {
59 
60  void cleanTable(){
61  for(G4int i=0;i<TableZSize;++i)
62  for(G4int j=0;j<TableASize;++j){
63  radiusP[i][j]=-1.;
64  radiusN[i][j]=-1.;
65  diffusenessP[i][j]=-1.;
66  diffusenessN[i][j]=-1.;
67  }
68  }
69  }
70 
71  namespace HFB {
72 
73 #ifdef INCLXX_IN_GEANT4_MODE
74  void initialize() {
75 #else
76  void initialize(const std::string &path) {
77 #endif
78 
79  // Clear the existing tables, if any
80  cleanTable();
81 
82 #ifdef INCLXX_IN_GEANT4_MODE
83  if(!std::getenv("G4INCLDATA")) {
85  ed << " Data missing: set environment variable G4INCLDATA\n"
86  << " to point to the directory containing data files needed\n"
87  << " by the INCL++ model" << G4endl;
88  G4Exception("G4INCLDataFile::readData()","table_radius_hfb.dat",
89  FatalException, ed);
90  }
91  G4String dataPath0(std::getenv("G4INCLDATA"));
92  G4String dataPath(dataPath0 + "/table_radius_hfb.dat");
93 #else
94  // File name
95  std::string dataPath(path + "/table_radius_hfb.dat");
96  INCL_DEBUG("Reading radius and diffuseness parameters from file " << dataPath << '\n');
97 #endif
98 
99  // Open the file stream
100  std::ifstream hfbTableIn(dataPath.c_str());
101  if(!hfbTableIn.good()) {
102  std::cerr << "Cannot open " << dataPath << " data file." << '\n';
103  std::abort();
104  return;
105  }
106 
107  // read the file
108  G4int z, a, nbnuclei=0;
109  G4double rp, rn, dp, dn;
110  while(hfbTableIn.good()) { /* Loop checking, 22.01.2018, J.L. Rodriguez */
111  hfbTableIn >> z >> a >> rp >> rn >> dp >> dn;
112  radiusP[z][a] = rp;
113  radiusN[z][a] = rn;
114  diffusenessP[z][a] = dp;
115  diffusenessN[z][a] = dn;
116  nbnuclei++;
117  }
118  hfbTableIn.close();
119  INCL_DEBUG("Read " << nbnuclei << " nuclei" << '\n');
120 
121  }
122 
124  // HFB calculations
125  G4double r0=0.;
126  if(t==Neutron)
127  if(radiusN[Z][A]>0.)r0=radiusN[Z][A];
128  if(t==Proton)
129  if(radiusP[Z][A]>0.)r0=radiusP[Z][A];
130  return r0;
131  }
132 
134  // HFB calculations
135  G4double a=0.;
136  if(t==Neutron)
137  if(diffusenessN[Z][A]>0.)a=diffusenessN[Z][A];
138  if(t==Proton)
139  if(diffusenessP[Z][A]>0.)a=diffusenessP[Z][A];
140  return a;
141  }
142  }
143 }