00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include "G4tgbMaterialMixtureByWeight.hh"
00037
00038 #include "G4SystemOfUnits.hh"
00039 #include "G4tgbMaterial.hh"
00040 #include "G4tgbMaterialMgr.hh"
00041 #include "G4tgrMessenger.hh"
00042
00043
00044 G4tgbMaterialMixtureByWeight::G4tgbMaterialMixtureByWeight()
00045 {
00046 }
00047
00048
00049
00050 G4tgbMaterialMixtureByWeight::~G4tgbMaterialMixtureByWeight()
00051 {
00052 }
00053
00054
00055
00056 G4tgbMaterialMixtureByWeight::G4tgbMaterialMixtureByWeight( G4tgrMaterial* hg )
00057 {
00058 theTgrMate = hg;
00059 }
00060
00061
00062
00063 G4Material* G4tgbMaterialMixtureByWeight::BuildG4Material()
00064 {
00065
00066 G4Material* mate = new G4Material( theTgrMate->GetName(),
00067 theTgrMate->GetDensity(),
00068 theTgrMate->GetNumberOfComponents(),
00069 theTgrMate->GetState(),
00070 theTgrMate->GetTemperature(),
00071 theTgrMate->GetPressure() );
00072 #ifdef G4VERBOSE
00073 if( G4tgrMessenger::GetVerboseLevel() >= 2 )
00074 {
00075 G4cout << " G4tgbMaterialMixtureByWeight::BuildG4Material() -"
00076 << " Constructing new G4Material:"
00077 << " " << theTgrMate->GetName()
00078 << " " << theTgrMate->GetDensity()/g*cm3
00079 << " " << theTgrMate->GetNumberOfComponents()
00080 << " " << theTgrMate->GetState()
00081 << " " << theTgrMate->GetTemperature()
00082 << " " << theTgrMate->GetPressure() << G4endl;
00083 }
00084 #endif
00085
00086
00087 G4Element* compElem;
00088 G4Material* compMate;
00089 G4tgbMaterialMgr* mf = G4tgbMaterialMgr::GetInstance();
00090
00091 for( G4int ii = 0; ii < theTgrMate->GetNumberOfComponents(); ii++)
00092 {
00093
00094 compElem = mf->FindOrBuildG4Element( GetComponent(ii), false );
00095 if( compElem != 0 )
00096 {
00097 mate->AddElement( compElem, GetFraction( ii ) );
00098 }
00099 else
00100 {
00101 compMate = mf->FindOrBuildG4Material( GetComponent(ii) );
00102 if( compMate != 0 )
00103 {
00104
00105 mate->AddMaterial( compMate, GetFraction( ii ) );
00106 }
00107 else
00108 {
00109 G4String ErrMessage = "Component " + GetComponent(ii)
00110 + " of material " + theTgrMate->GetName()
00111 + "\n" + "is not an element nor a material !";
00112 G4Exception("G4tgbMaterialMixtureByWeight::BuildG4Material()",
00113 "InvalidSetup", FatalException, ErrMessage);
00114 }
00115 }
00116 }
00117
00118 #ifdef G4VERBOSE
00119 if( G4tgrMessenger::GetVerboseLevel() >= 1 )
00120 {
00121 G4cout << " Constructing new G4Material by weight: " << *mate << G4endl;
00122 G4cout << " TEMPERATURE " << mate->GetTemperature()/kelvin
00123 << " kelvin " << G4endl;
00124 }
00125 #endif
00126
00127 return mate;
00128 }