Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
CCalAMaterial.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 // File: CCalAMaterial.cc
28 // Description: Specialised class to store information to make G4Material
29 // from atomic proportion
30 ///////////////////////////////////////////////////////////////////////////////
31 #include "CCalAMaterial.hh"
32 
34  CCalAMaterial** constituents, G4double* weights) {
35  name=mat;
36  nElem=0;
37  int i=0;
38  for (i=0; i<nconst; i++)
39  nElem += (constituents[i]->NElements());
40 
41  theElements = new G4String[nElem];
42  theWeights = new double[nElem];
43 
44  double factor;
45  int nelem=0;
46  for (i=0; i<nconst; i++) {
47  factor=constituents[i]->Aeff();
48  for (int j=0; j<constituents[i]->NElements(); j++) {
49  theElements[nelem] = constituents[i]->Element(j);
50  theWeights[nelem] = constituents[i]->Weight(j)* weights[i] * factor;
51  nelem++;
52  }
53  }
54 
55  if (dens>0)
56  density=dens;
57  else //Let's compute density
58  computeDensity(nconst,(CCalMaterial**)constituents, weights, FTVolume);
59 
60  computeAeff(nconst, constituents, weights);
61  closeMaterial();
62 }
63 
64 CCalAMaterial::CCalAMaterial(G4String elemat, double eff, double dens) {
65  name=elemat;
66  density=dens;
67  nElem=1;
68  theElements = new G4String[nElem];
69  theWeights = new double[nElem];
70 
71  theElements[0] = elemat;
72  theWeights[0] = 1;
73 
74  aEff=eff;
75 }
76 
78  //The base class destructor is called?
79 }
80 
82  : CCalMaterial( mat ) {
83  name = mat.name;
84  density = mat.density;
85  nElem = mat.nElem;
86  theElements = new G4String[nElem];
87  theWeights = new double[nElem];
88  for (int i=0; i<nElem; i++){
89  theElements[i]=mat.theElements[i];
90  theWeights[i]=mat.theWeights[i];
91  }
92 }
93 
95  if(theElements)
96  delete[] theElements;
97  if(theWeights)
98  delete[] theWeights;
99 
100  name=mat.name;
101  density=mat.density;
102  nElem=mat.nElem;
103  aEff=mat.aEff;
104 
105  theElements = new G4String[nElem];
106  theWeights = new double[nElem];
107  for (int i=0; i<nElem; i++){
108  theElements[i]=mat.theElements[i];
109  theWeights[i]=mat.theWeights[i];
110  }
111  return *this;
112 }
113 
114 void CCalAMaterial::computeAeff(int nconst,
115  CCalAMaterial** constituents,
116  double* weights){
117  aEff=0;
118  for (int i=0; i<nconst; i++)
119  aEff += weights[i] * constituents[i]->Aeff();
120 }
121 
122 std::ostream& operator<<(std::ostream& os, const CCalAMaterial& mat) {
123  os << mat.name << G4endl;
124  os << "Density= " << mat.density << " g/cm3. Number of Elements: "
125  << mat.nElem
126  << ". Aeff= " << mat.aEff << G4endl;
127  for (int i=0; i<mat.nElem; i++)
128  os << '\t' << mat.theElements[i] << '\t' << mat.theWeights[i] << G4endl;
129  return os;
130 }
int NElements() const
Definition: CCalMaterial.hh:53
virtual ~CCalAMaterial()
double Weight(int i) const
Definition: CCalMaterial.hh:55
void computeAeff(G4int nconst, CCalAMaterial **constituents, double *weights)
CCalAMaterial & operator=(const CCalAMaterial &)
G4String name
Definition: CCalMaterial.hh:70
const XML_Char * name
G4String * theElements
Definition: CCalMaterial.hh:73
void computeDensity(int nconst, CCalMaterial **constituents, double *weights, FractionType ft)
Definition: CCalMaterial.cc:84
CCalAMaterial(G4String mat, double dens, int nelem, CCalAMaterial **constituents, double *weights)
G4String Element(int i) const
Definition: CCalMaterial.hh:54
G4double Aeff() const
std::ostream & operator<<(std::ostream &, const BasicVector3D< float > &)
void closeMaterial()
#define G4endl
Definition: G4ios.hh:61
double density
Definition: CCalMaterial.hh:71
double G4double
Definition: G4Types.hh:76
double * theWeights
Definition: CCalMaterial.hh:74