ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
G4gsmixt.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4gsmixt.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 <iomanip>
31
#include <iomanip>
32
33
#include "
globals.hh
"
34
#include "
G4SystemOfUnits.hh
"
35
36
#include "
G3toG4.hh
"
37
#include "
G3EleTable.hh
"
38
#include "
G3MatTable.hh
"
39
#include "
G4Material.hh
"
40
#include "
G4Isotope.hh
"
41
42
void
PG4gsmixt
(
G4String
*tokens)
43
{
44
// fill the parameter containers
45
G3fillParams
(tokens,
PTgsmixt
);
46
47
// interpret the parameters
48
G4String
name
=
Spar
[0].
data
();
49
G4int
imate =
Ipar
[0];
50
G4int
nlmat =
Ipar
[1];
51
//G4double dens = Rpar[0]*g/cm3;
52
G4double
dens =
Rpar
[0];
53
G4double
*
a
=
Rpar
+ 1;
54
G4double
*
z
=
Rpar
+ 1+
std::abs
(nlmat);
55
G4double
*wmat =
Rpar
+ 1 + 2*
std::abs
(nlmat);
56
/*
57
for (int i=0; i<std::abs(nlmat); i++){
58
//Rpar[i]=Rpar[i]*g/mole;
59
Rpar[i]=Rpar[i];
60
};
61
*/
62
G4gsmixt
(imate,name,a,z,dens,nlmat,wmat);
63
}
64
65
// replaced with G3EleTable
66
// only used G4Elements are created;
67
// !! no checking of given A of the element;
68
//
69
// extern G4Element* CreateElement(G4double zeff, G4double aeff, G4String matName);
70
71
72
void
G4gsmixt
(
G4int
imate,
G4String
name
,
G4double
*
a
,
G4double
*
z
,
73
G4double
dens,
G4int
nlmat,
G4double
* wmat)
74
{
75
// in Geant3:
76
// After a call with ratios by number (negative number of elements),
77
// the ratio array is changed to the ratio by weight, so all successive
78
// calls with the same array must specify the number of elements as
79
// positive
80
G4int
i=0;
81
if
(nlmat<0) {
82
// in case of proportions given in atom counts (nlmat<0),
83
// the wmat[i] are converted to weight fractions
84
G4double
aMol = 0.;
85
for
(i=0; i<
std::abs
(nlmat); i++) {
86
// total molecular weight
87
aMol += wmat[i]*a[i];
88
}
89
if
(aMol == 0.) {
90
G4String
text =
"G4mixt: Total molecular weight in "
+ name +
" = 0."
;
91
G4Exception
(
"G4gsmixt()"
,
"G3toG40016"
,
FatalException
, text);
92
return
;
93
}
94
for
(i=0; i<
std::abs
(nlmat); i++) {
95
// weight fractions
96
wmat[i] = wmat[i]*a[i]/aMol;
97
}
98
}
99
100
// create material with given number of components
101
// (elements)
102
103
G4Material
*
material
104
=
new
G4Material
(name, dens*
g
/
cm3
,
std::abs
(nlmat));
105
for
(i=0; i<
std::abs
(nlmat); i++) {
106
// add units
107
// G4Element* element = G4Element(z[i], a[i]*g/mole, name);
108
G4Element
* element =
G3Ele
.
GetEle
(z[i]);
109
material->
AddElement
(element, wmat[i]);
110
}
111
112
// add the material to the List
113
G3Mat
.
put
(imate, material);
114
}
115
116
/*
117
void G4gsmixt(G4int imate, G4String name, G4double a[], G4double z[],
118
G4double dens, G4int nlmat, G4double wmat[]){
119
G4int nmate = std::abs(nlmat);
120
G4String sname = name.strip(G4String::both);
121
G4double theDensity = dens*g/cm3;
122
123
G4Material* theMixture = new G4Material(name, dens, nmate);
124
G4bool ok=true;
125
for (int i=0; i< nmate; i++){
126
G4Element* theElement = G3Ele.GetEle(z[i]);
127
if (nlmat>0) {
128
G4double fractionmass = wmat[i];
129
ok = ok && std::abs(fractionmass)<=1.;
130
theMixture->AddElement(theElement, fractionmass);
131
} else if (nlmat<0) {
132
G4int natoms = wmat[i];
133
ok = ok && wmat[i] == natoms;
134
theMixture->AddElement(theElement, natoms);
135
} else {
136
ok=false;
137
}
138
}
139
if (ok) {
140
G3Mat.put(imate, theMixture);
141
} else {
142
if (nlmat>0) {
143
G4cerr << "G4gsmixt: for mixture '" << name
144
<< "' some |weights|>1 : " << G4endl;
145
for (G4int i=0;i<nlmat; i++) {
146
G4cerr << "Component " << std::setw(3) << i+1 << " fraction: "
147
<< std::setw(10) << wmat[i] << G4endl;
148
}
149
} else if (nlmat<0) {
150
G4cerr << "G4gsmixt: for mixture '" << name
151
<< "' some #natoms are non-integer: " << G4endl;
152
for (G4int i=0;i<nlmat; i++) {
153
G4cerr << "Component " << std::setw(3) << i+1 << " #atoms "
154
<< std::setw(10) << wmat[i] << G4endl;
155
}
156
} else {
157
G4cerr << "G4gsmixt: Number of components for mixture '"
158
<< name << "' (" << nlmat << ") not allowed." << G4endl;
159
}
160
}
161
}
162
*/
163
164
165
geant4
tree
geant4-10.6-release
source
g3tog4
src
G4gsmixt.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:15
using
1.8.2 with
ECCE GitHub integration