Hi All,
I have a geometry that goes something like this:
reflector->scintillator->glass->photocathode
I have defined these materials in the following, generic way:
In MyMaterial.cc:
void MyMaterial::DefineMaterials() {
...
//Material
density=x*g/cm3;
fmat = new G4Material(name="material",density,ncomponents=3,kStateSolid);
fmat->AddElement(A,y*perCent);
fmat->AddElement(B,z*perCent);
fmat->AddElement(C,w*perCent);
//where x,y,z,w are numbers, and y+z+w = 100
}
void MyMaterial::DefineProperties() {
...
//---------------------------------------------------------------------------------
// Material
//---------------------------------------------------------------------------------
G4MaterialPropertiesTable *myMat = new G4MaterialPropertiesTable();
G4double myMatRI[2], myMatAbs[2];
myMatAbs[0] = a*mm;
myMatAbs[1] = a*mm;
myMatRI[0] = b ;
myMatRI[1] = b ;
G4double myMatEne[2] = {c*eV , d*eV} ;
myMat->AddProperty("RINDEX", myMatEne , myMatRI, 2);
myMat->AddProperty("ABSLENGTH", myMatEne, myMatAbs, 2);
fMat->SetMaterialPropertiesTable(myMat);
...
}
In DetectorConstruction.cc:
...
G4VPhysicalVolume* GHDetectorConstruction::Construct()
{
...
//---------------------------------------------------------------------------------
// Reflector Material
//---------------------------------------------------------------------------------
fSolidReflector = new G4Tubs("SolidReflector", innerRadius, outerRadius, h, startAngle, spanningAngle) ;
fLogicReflector = new G4LogicalVolume(fSolidReflector, MyMaterial::Get()->GetMyMat() , "LogicReflector");
fPhysicReflector = new G4PVPlacement(yRot,
G4ThreeVector(x*cm, y*cm, z*cm),
"ReflectorLayer",
fLogicReflector,
fPhysicWorld,
false,
0,
myCheckOverlap);
fLogicReflector->SetVisAttributes( G4VisAttributes(myGreen) );;
...
DefineSurfaces();
return fPhysicWorld;
}
void DetectorConstruction::DefineSurfaces(){
G4double energy[2] = {e*eV, f*eV};
G4double ref[2] = {0.g, 0.g};
G4double tran[2] = {0.j, 0.j};
//---------------------------------------------------------------------------------
// Reflector-Air surface
//---------------------------------------------------------------------------------
G4OpticalSurface *fOpAirReflectorSurface = new G4OpticalSurface("OpAirReflectorSurface", glisur, ground, dielectric_metal, 0.1);
new G4LogicalBorderSurface("AirReflectorSurface",fPhysicWorld , fPhysicReflector, fOpAirReflectorSurface);
G4MaterialPropertiesTable *fAirReflectorSurfProp = new G4MaterialPropertiesTable();
fAirReflectorSurfProp->AddProperty("REFLECTIVITY", energy, ref, 2);
fAirReflectorSurfProp->AddProperty("TRANSMITTANCE", energy, tran, 2);
fOpAirReflectorSurface->SetMaterialPropertiesTable( fAirReflectorSurfProp );
//---------------------------------------------------------------------------------
// YAP-Reflector surface
//---------------------------------------------------------------------------------
G4OpticalSurface *fOpScintReflectorSurface = new G4OpticalSurface("OpScintReflectorSurface", glisur, polished, dielectric_metal, 1);
new G4LogicalBorderSurface("ScintReflectorSurface", fPhysicScintCell, fPhysicReflector, fOpScintReflectorSurface);
G4MaterialPropertiesTable *fScintReflectorSurfProp = new G4MaterialPropertiesTable();
fScintReflectorSurfProp->AddProperty("REFLECTIVITY", energy, ref, 2);
fScintReflectorSurfProp->AddProperty("TRANSMITTANCE", energy, tran, 2);
fOpScintReflectorSurface->SetMaterialPropertiesTable( fScintReflectorSurfProp );
...
}
I am using the physics list as suggested by the “OpNovice” example included during installation:
In my main function:
G4VModularPhysicsList* physicsList = new FTFP_BERT;
physicsList->ReplacePhysics(new G4EmLivermorePhysics());
G4OpticalPhysics* opticalPhysics = new G4OpticalPhysics();
physicsList->RegisterPhysics(opticalPhysics);
runManager-> SetUserInitialization(physicsList);
With the rest of the material definitions defined in the ellipsis areas of the above script.
For clarity, I intend to shoot a gamma toward the reflector material, where it will next move into the scintillator, generate optical photons, which then propagate toward the photocathode.
My questions are:
-
When defining the surfaces, and using a
G4LogicalBorderSurface
, is it necessary to define a surface going both ways? For example, in the case of the surface between the reflector and the scintillator, does one need to define the border with photons headed from the scintillator->reflector (dielectric_metal
) and then another reflector->scintillator (not sure what this would be), or is it sufficient to only define one of these border surfaces? -
When defining the properties
REFLECTIVITY
andTRANSMITTANCE
, does one need to define both, or is one sufficient, given that T = 100% - R (R = 100% - T)? I have read (Peculiarities in the Simulation of Optical Physics with Geant4) that when dealing with surfaces between dielectrics and metals, it is suggested to define the reflectivity, and when using dielectric to dielectric surfaces, that one should use the transmittance property. -
Also, if one were to use a dielectric as a reflector, example: a sheet of white paper, should the surface be defined as a
dielectric_dielectric
or adielectric_metal
?
Thank you all in advance for your help and guidance!
I am sorry if I previously posted this in the wrong section. Hopefully this is now posted under a more appropriate section.
-Frank