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