How to make a scorer 100% aborbent

I have a photosensor of bialcali material .
Here is the properties
density = 2.00 * g/cm3;
G4Material* K2CsSb = new G4Material(name = “K2CsSb”, density, ncomponents = 3);
K2CsSb->AddElement(K, natoms = 2);
K2CsSb->AddElement(Cs, natoms = 1);
K2CsSb->AddElement(Sb, natoms = 1);

// K2CsSb (Bialkali Photocathode)
G4double K2CsSbAbsorptionCoefficient = 1.0E+9 / m; // Set a large absorption coefficient
G4MaterialPropertiesTable* K2CsSbMPT = new G4MaterialPropertiesTable();
K2CsSbMPT->AddConstProperty(“ABSLENGTH”, K2CsSbAbsorptionCoefficient);
K2CsSb->SetMaterialPropertiesTable(K2CsSbMPT);

I want the surface to be 100% absorbent, in order that the optical
photons that arrive to the Scorer, are not reflected and therefore do not count them more
than once. After making this 100% absorbent optical photons will not pass through
the Scorer, so its width must not be the important.

But When I varying its width I see the counts also changing . How can I make its surface 100% absorbent?

Does this code run without warnings? ABSLENGTH is an energy-dependent property and so needs an array of energy/value pairs, and added to the material property table with AddProperty(…).

It’s also not clear what you would like to make absorbent. Your code is trying to make the bulk of the material absorbent, but you ask to make the surface absorbent. For that, define an optical surface, give it a material properties table, and add the property REFLECTIVITY which is 1-(surface absorption). See e.g. example OpNovice.

1 Like

Thnak you @dsawkey sir! for the reply. I like UV photon to be absorbed in the photocathode surface.
Now I have modified the code :
// Photocathode Material
// (Bialkali K2CsSb, Density=?, Thickness=25.nm?)
density = 2.00
g/cm3;
G4Material* K2CsSb = new G4Material(name=“K2CsSb”, density, ncomponents=3);
K2CsSb->AddElement(K, natoms=2);
K2CsSb->AddElement(Cs, natoms=1);
K2CsSb->AddElement(Sb, natoms=1);

  const G4int nEntries = 2;	
G4double PhotonEnergy[nEntries] = {1.0*eV,7.0*eV};
// K2CsSb (Bialcali Photocathode)

G4double K2CsSbRefractionIndex[nEntries] = {1.47,1.47};

G4double K2CsSbAbsorptionLength[nEntries] = {0.0*m, 0.0*m};

   G4MaterialPropertiesTable* K2CsSbMPT = new G4MaterialPropertiesTable();

   K2CsSbMPT->AddProperty("RINDEX", PhotonEnergy, K2CsSbRefractionIndex, nEntries);
   K2CsSbMPT->AddProperty("ABSLENGTH", PhotonEnergy, K2CsSbAbsorptionLength, nEntries);
   K2CsSb->SetMaterialPropertiesTable(K2CsSbMPT);
   
   // Define the surface properties
  G4OpticalSurface* photocathodeSurface = new G4OpticalSurface("PhotocathodeSurface");
  photocathodeSurface->SetType(dielectric_metal);
  photocathodeSurface->SetModel(unified);
  photocathodeSurface->SetFinish(polished);
  photocathodeSurface->SetPolish(0.0); // Set the surface polish to 0 for perfect absorption

 // Define the material properties of the surface
  G4MaterialPropertiesTable* photocathodeSurfaceMPT = new G4MaterialPropertiesTable();
  
  // Calculate the reflectivity for each entry

G4double reflectivity[nEntries];
for (int i = 0; i < nEntries; ++i) {
reflectivity[i] = 1.0 - K2CsSbAbsorptionLength[i];
}
photocathodeSurfaceMPT->AddProperty(“REFLECTIVITY”, PhotonEnergy, reflectivity, nEntries);

 // Set the material properties table to the optical surface
 photocathodeSurface->SetMaterialPropertiesTable(photocathodeSurfaceMPT);

 // Create a logical surface to assign the optical surface to the photocathode material
 G4LogicalSkinSurface* photocathodeLogicalSurface;

Here is the construction of the scorer :
// Photocathode

G4Tubs* solidCathode = new G4Tubs("Cathode",0.*cm,0.5*photo_dia,CathodeHalfLength,0.*deg, 360.*deg);									  
 logicCathode = new G4LogicalVolume(solidCathode,K2CsSb,"Cathode");

new G4LogicalSkinSurface("PhotocathodeLogicalSurface", logicCathode, photocathodeSurface);

I am not sure whether I must keep AbsorptionLength to be zero. But still I am getting that counts depending upon the length of the photocathode.
I have coupled this photocathode with my scintillator detector . And I want the interface to be dielectric-metal, dielectric by scintillator and metal for the scorer.

This is setting reflectivity to be 1, so surface absorption is 0. Try:

G4double reflectivity[nEntries] = {0., 0.};

Hello Sir! @dsawkey I am facing few problem. I made the scintillation detector of material LaBr3 and added all its optical properties. Now As I can see few photons are coming out of the detector. Now to keep all the photon inside the detector I added a mirror surface around it. But still the problem remains.
Here is the mirror coating part :
//mirror surface
mirrorSurface = new G4OpticalSurface(“mirrorSurface”);
mirrorSurface->SetType(dielectric_metal);
mirrorSurface->SetFinish(ground);
mirrorSurface->SetModel(unified);
G4double reflectivity[1] = {1.0};
G4MaterialPropertiesTable *mptMirror = new G4MaterialPropertiesTable();
mptMirror->AddProperty(“REFLECTIVITY”, energy, reflectivity, 1);
mirrorSurface->SetMaterialPropertiesTable(mptMirror);

And I included with the detector :

// Detector construction
G4ThreeVector  positionLaBr3 = G4ThreeVector(0, 0, LaBr3_PosZ);

G4Tubs* solidDetector = new G4Tubs("solidLaBr3", 0., 0.5*LaBr3Face, 0.5*LaBr3Thickness, 0.*deg, 360.*deg);
logicDetector = new G4LogicalVolume(solidDetector, LaBr3, "logicDetector");    
G4LogicalSkinSurface *skin = new G4LogicalSkinSurface("skin",logicDetector, mirrorSurface);    
G4ThreeVector position_LaBr3 = G4ThreeVector(0.*cm,0.*cm,LaBr3_PosZ);    

G4VPhysicalVolume *physLaBr3 = new G4PVPlacement(0, position_LaBr3,logicDetector,“LaBr3_crystal”,logicWorld,false,0);

So basically there are two boundary condition I want to impose .

Scintillator-environment: Here I want 100% efficiency in reflection from the scintillator
to environment surface. So the surface I want to be polished. Finally, the
interface I want dielectric-metal. As I am not interested in the optical photons
that come out of the scintillator. Can you tell me how to do it?
• Scintillator-Scorer: This surfaceI want 100% absorbent, in order that the optical
photons that arrive to the Scorer, are not reflected and therefore do not count them more
than once. Since here the interface is not relevant so I want to consider it dielectric-metal,
dielectric by scintillator and metal for the scorer.

Energy-dependent properties need to be defined over the range of relevant energies. Thus the “energy” and “reflectivity” arrays need to have at least two values, e.g. with energy below and above the energy of interest.

Admittedly the code shouldn’t allow one to call AddProperty() with nEntries = 1.

Dear @dsawkey I changed the line as you said :
//mirror surface
G4double energy_world[2] = {3eV, 140eV};

 mirrorSurface = new G4OpticalSurface("mirrorSurface");
mirrorSurface->SetType(dielectric_metal);
mirrorSurface->SetFinish(ground);
mirrorSurface->SetModel(unified);
G4double reflectivity_2[2] = {1.0,1.0};
G4MaterialPropertiesTable *mptMirror = new G4MaterialPropertiesTable();
mptMirror->AddProperty("REFLECTIVITY", energy_world, reflectivity_2, 2);
mirrorSurface->SetMaterialPropertiesTable(mptMirror);

G4Tubs* solidDetector = new G4Tubs("solidLaBr3", 0., 0.5*LaBr3Face, 0.5*LaBr3Thickness, 0.*deg, 360.*deg);

logicDetector = new G4LogicalVolume(solidDetector, LaBr3, "logicDetector");

G4LogicalSkinSurface *skin = new G4LogicalSkinSurface("skin",logicDetector, mirrorSurface);

But still the problem remains.

Could you please try to enter these parameters into the extended/optical example OpNovice2, e.g. by modifying the macro boundary.mac, and post the results.