source: trunk/source/g3tog4/src/G4gsmate.cc @ 1202

Last change on this file since 1202 was 965, checked in by garnier, 15 years ago

update g3tog4

File size: 5.1 KB
Line 
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: G4gsmate.cc,v 1.12 2006/06/29 18:14:10 gunter Exp $
28// GEANT4 tag $Name: geant4-09-02-ref-02 $
29//
30// by I.Hrivnacova, 27 Sep 99
31
32#include <cmath>
33
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
41void 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
64G4Element* 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
104void 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 a[2], z[2], wmat[2];
120    a[0] = 14.01*g/mole;
121    a[1] = 16.00*g/mole;
122    z[0] = 7;
123    z[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    int n=2;
129    G4gsmixt(imate, sname, a, z, 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
Note: See TracBrowser for help on using the repository browser.