Not able to use EFFICIENCY with G4LogicalBorderSurface

I want to simulate optical photons moving from one volume (physiTarget1) to other (physiPhoton) with some efficiency of being scored.
I have tried with following lines:

G4int numEntries = 2;
G4double CsIPMT_Energy[numEntries] = {1.38eV, 6.20eV};
G4double efficiency2[numEntries] = {0.05,0.05};
G4OpticalSurface* OpSurface2 = new G4OpticalSurface(“opSurface2”);
new G4LogicalBorderSurface(“opSurface2”, physiTarget1, physiPhoton, OpSurface2);
s2MPT->AddProperty(“EFFICIENCY”,CsIPMT_Energy,efficiency2,numEntries); //“EFFICIENCY”

The program runs well without any errors but the effect of efficiency is not observed. Please guide me what needs to be done.
Version of geant4 is 10.07.p03

What is the result of your program, and what do you expect to happen?

See this thread with a similar issue.

There might be a mis-match between what this efficiency does, and how you are detecting optical photons

I am using sensitive detector, physiPhoton is the detector with very very small absorption length in physiPhoton’s material, .
I expect the number of photons in it to change with efficiency but it doesn’t. My interest is to see variation in optical photons’ number with efficiency.
If I add reflectivity as line below, I find the number of photons scored in detector to be max if reflectivity2=1.0 and minimum if reflectivity2=0.0 opposite to my expectation.

I would have to see your detector construction code to diagnose what is wrong. Are you visualizing your simulation? Does everything look right? Are you sure you are generating optical photons in your target material and not your photon material?

I checked that the photons are produced in target as scintillation yield is defined for it only (kept zero for photon). Further the refractive index has been kept same for both target and photon.
Using trackid and particle name, I found opticalphoton track starts from target only and not from photon region.
Number of optical photons reaching photon region increases if reflectivity is increased and max if reflectivity is 1 but numbers are unchanged if efficiency is changed (to even 0.0 or 1.0). Whenever it reaches photon region, OpAbsorption occurs (almost 100%) and track ends.
If G4LogicalBorderSurface is removed, the numbers are similar to reflectivity=1.0 case (except fluctuations due to resolution scale). I expected G4LogicalBorderSurface with efficiency 0.05 will make it about 5% .
Does it require some modifications in hits or SD file?

Are the two objects touching?

Are you visualizing the simulation?

Are you expecting efficiency to change the number of photons that transmit vs reflect? That is better controlled with reflection.

I think the issue is, what does “efficiency” of a surface mean? If you want the detector to have a 5% efficiency, that is something else that is not defined by the border surface between the two objects. The border surface simply determines if and how a photon reflects/transmits/scatters at a border between two touching materials with defined indices of refraction.

See the answer to this question

I believe it depends on what model you are using, and I am not sure from your code snippet what model you are using

Yes, I want to score 5% of the optical photons reaching physiphoton to be scored. Actually 5% is a mean value and I want it to vary with the photon energy. Please suggest a way for it.
The movement is from CsI to bialkali photocathode. After going through some literature available and developers’ manual, I tried surface type as dielectric_electric, both unified and glisur models, with all possible finishes but none of them seem to be giving a desired result. Yes the surfaces are touching.

You can see on line 289 of the Boundary process header file:

That the efficiency value is the probability of absorption at the surface of the material.

My next guess as to what is happening is this:

If your efficiency is at 100%, all of the photons are absorbed. But if your efficiency is at 0, the photons transmit into your detector material, which has a very small absorption length, and they are also absorbed. That is why getting rid of the border does not change anything.

You need to use your stepping action to specify if the absorption happens at the surface (boundary process) or at the bulk. If it happens at the surface (5% of the time, or whatever your specify) then you can keep it, and if it happens in the bulk ignore it. Then you should see a change in detection based on your efficiency value. Also, to specify efficiency with energy, youl’ll have to come up with two vectors that describe the trend, the photon energy and the efficiency, and feed them into AddProperty

You’ll need the surface to have REFLECTIVITY less than 1. Assuming TRANSMITTANCE is 0, then the fraction absorbed by the surface is 1-REFLECTIVITY. Of those absorbed, the fraction detected is EFFICIENCY.

Also, make sure to set

/process/optical/boundary/setInvokeSD true