ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4gsmate.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4gsmate.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 //
27 //
28 // by I.Hrivnacova, 27 Sep 99
29 
30 #include <cmath>
31 
32 #include "G4PhysicalConstants.hh"
33 #include "G4SystemOfUnits.hh"
34 #include "G3toG4.hh"
35 #include "G3MatTable.hh"
36 #include "G3EleTable.hh"
37 #include "G4Material.hh"
38 #include "G4Isotope.hh"
39 #include "G4UnitsTable.hh"
40 
41 void PG4gsmate(G4String *tokens)
42 {
43  // fill the parameter containers
44  G3fillParams(tokens,PTgsmate);
45  G4String name = Spar[0];
46  G4int imate = Ipar[0];
47  G4int nwbf = Ipar[1];
48  G4double a = Rpar[0];
49  G4double z = Rpar[1];
50  G4double dens = Rpar[2];
51  G4double radl = Rpar[3];
52  // G4double absl = Rpar[4];
53  G4double *ubuf = &Rpar[5];
54 
55  G4gsmate(imate, name, a, z, dens, radl, nwbf, ubuf);
56 }
57 
58 /*
59 // replaced with G3EleTable
60 // only used G4Elements are created;
61 // !! no checking of given A of the element;
62 //
63 
64 G4Element* CreateElement(G4double zeff, G4double aeff, G4String matName)
65 {
66  // tolerance in Z, A for element definition
67  const G4double tolerance = 0.001;
68 
69  // define the symbol Z%A% of element
70  // !! symbol is not unambiguous element identifier
71  char symbol[20];
72  sprintf(symbol,"Z%dA%d",int(zeff),int(aeff/(g/mole)));
73  G4String elSymbol = symbol;
74 
75  // search element table for the element with given (Z,A)
76  //
77  G4int index = 0;
78  const G4ElementTable* table = G4Element::GetElementTable();
79  for (G4int i=0; i<table->entries(); i++) {
80  G4Element* entry = (*table)[i];
81  if (elSymbol == entry->GetSymbol()) index++;
82  if ( std::abs(zeff - entry->GetZ()) < tolerance &&
83  (std::abs(aeff - entry->GetA())/(g/mole)) < tolerance ){
84  return entry;
85  }
86  }
87 
88  // define a unique name En-Z%A%
89  // (n - index of elements with the same int(Z), int(A))
90  char chIndex[4];
91  sprintf(chIndex,"%d",index);
92  G4String elName = "E";
93  elName = elName + chIndex + "-";
94  elName = elName + elSymbol;
95 
96  // create new element if it was not found in element table
97  G4Element* element = new G4Element(elName, elSymbol, zeff, aeff);
98  G4cout << "New element: " << element->GetName()
99  << " for " << matName << " material has been created." << G4endl;
100  return element;
101 }
102 */
103 
104 void G4gsmate(G4int imate, G4String name, G4double ain, G4double zin,
105  G4double densin, G4double, G4int, G4double*)
106 {
107  G4double G3_minimum_density = 1.e-10*g/cm3;
108 
109  // add units
110  G4double z = zin;
111  G4double a = ain*g/mole;
112  G4double dens = densin*g/cm3;
113 
114  G4Material* material=0;
115 
116  G4String sname = name.strip(G4String::both);
117  if (sname == "AIR") {
118  // handle the built in AIR mixture
119  G4double aa[2], zz[2], wmat[2];
120  aa[0] = 14.01*g/mole;
121  aa[1] = 16.00*g/mole;
122  zz[0] = 7;
123  zz[1] = 8;
124  wmat[0] = 0.7;
125  wmat[1] = 0.3;
126  // G4double theDensity = 1.2931*mg/cm3;
127  G4double theDensity = 0.0012931;
128  G4int n=2;
129  G4gsmixt(imate, sname, aa, zz, theDensity, n, wmat);
130  }
131  else if ( z<1 || dens < G3_minimum_density ) {
132  // define vacuum according to definition from N03 example
133  G4double density = universe_mean_density; //from PhysicalConstants.h
134  G4double pressure = 3.e-18*pascal;
135  G4double temperature = 2.73*kelvin;
136  material = new G4Material(name, z=1., a=1.01*g/mole, density,
137  kStateGas,temperature,pressure);
138  }
139  else {
140  //G4Element* element = CreateElement(z, a, name);
141  G4Element* element = G3Ele.GetEle(z);
142  material = new G4Material(name, dens, 1);
143  material->AddElement(element, 1.);
144  }
145 
146  // add the material to the List
147  G3Mat.put(imate, material);
148 }
149 
150 
151 
152 
153 
154 
155