Use of reflectivity and transmittance when defining surfaces

Hi All,

These are probably some very simple questions, but alas I present them here.

I have a geometry that goes something like this:


I have defined these materials in the following, generic way:


void MyMaterial::DefineMaterials() {


  fmat = new G4Material(name="material",density,ncomponents=3,kStateSolid);

//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);



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), 
  fLogicReflector->SetVisAttributes( G4VisAttributes(myGreen) );;



  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 );



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:

  1. 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?

  2. When defining the properties REFLECTIVITY and TRANSMITTANCE, 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.

  3. 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 a dielectric_metal?

Thank you all in advance for your help and guidance!


EDIT: I am using the physic lists as suggested by the “OpNovice” examples included during installation:

In my main function:

  G4VModularPhysicsList* physicsList = new FTFP_BERT;
  physicsList->ReplacePhysics(new G4EmLivermorePhysics());
  G4OpticalPhysics* opticalPhysics = new G4OpticalPhysics();
  runManager-> SetUserInitialization(physicsList);

This is answered in the “Getting Started” forum.