Effect of efficiency in optical photon

Dear All,
I am trying to simulate plastic scintillator based application. Which looks as follow.

Scintillator attached to light guide (on both short end side). Successively, optical glue, quartz, bialkali photo cathode.

Surface between quartz- photo cathode is dielectric_metal. Property as follow.

G4OpticalSurface* PCsurf=  new G4OpticalSurface("RefPC1_gre",glisur,polished ,dielectric_metal,1.0); 

new G4LogicalBorderSurface(“RefPC1_gre”,physQuartz_L,physPhotocathod_L,PCsurf);
new G4LogicalBorderSurface(“RefPC2_gre”,physQuartz_R,physPhotocathod_R,PCsurf);

G4MaterialPropertiesTable* OpRefPCGr1= new G4MaterialPropertiesTable();
G4double PC_QE[num] = {0.03 ,0.03 ,0.04 ,0.05 ,0.06 ,0.07 ,0.08 ,0.09 ,0.11 ,0.12 ,0.14 ,0.15 ,0.17 ,
0.19 ,0.21 ,0.22 ,0.24 ,0.26 ,0.27 ,0.28 ,0.28 ,0.28 ,0.28 ,0.28 ,0.27 ,0.25 };

// G4double PC_QE[num] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 };

 G4double PC_RI_R[num] ={2.987, 3.002, 3.015, 3.047, 3.080, 3.127, 3.201, 3.246, 3.247, 3.102, 3.014, 3.000, 3.000,
                        3.009, 2.948, 2.819, 2.714, 2.617, 2.484, 2.332, 2.208, 2.025, 2.020, 2.020, 2.020, 2.020};                 	 

G4double PC_RI_C[num] ={0.391, 0.410, 0.427, 0.455, 0.485, 0.538, 0.615, 0.747, 0.876, 1.047, 1.066, 1.073, 1.102,
1.247, 1.409, 1.465, 1.493, 1.538, 1.642, 1.714, 1.687, 1.681, 1.680, 1.680, 1.680, 1.680};
G4double PC_reflecta[num]={0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,
0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
/{0.22, 0.22, 0.22, 0.23, 0.24, 0.25, 0.25, 0.26, 0.25, 0.22, 0.21, 0.21, 0.21,
0.22, 0.21, 0.20, 0.19, 0.19, 0.18, 0.18, 0.17, 0.16, 0.15, 0.15, 0.15, 0.14};
/
// G4double PC_SPECULARSPIKECONSTANT[num] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
OpRefPCGr1->AddProperty(“REALRINDEX”, pp,PC_RI_R, num);
OpRefPCGr1->AddProperty(“IMAGINARYRINDEX”,pp,PC_RI_C, num);
OpRefPCGr1->AddProperty(“EFFICIENCY”,pp,PC_QE,num);
OpRefPCGr1->AddProperty(“REFLECTIVITY”,pp,PC_reflecta,num);
// OpRefPCGr1->AddProperty(“SPECULARSPIKECONSTANT”, pp, PC_SPECULARSPIKECONSTANT,num);
PCsurf->SetMaterialPropertiesTable(OpRefPCGr1);

But Problem is i am not able to see effect of "Efficiency"

Do I need to define “absorption length” for Photocathode material as well?

PS: Physics list as follow
G4VModularPhysicsList* physicsList = new FTFP_BERT;
physicsList->ReplacePhysics(new G4EmStandardPhysics_option4());
physicsList->RegisterPhysics(new G4DecayPhysics());
physicsList->RegisterPhysics(new G4RadioactiveDecayPhysics());
G4OpticalPhysics* opticalPhysics = new G4OpticalPhysics();
opticalPhysics->SetTrackSecondariesFirst(kScintillation, true);
physicsList->RegisterPhysics(opticalPhysics);

1 Like

How are you trying to see detection (EFFICIENCY)? All that happens is the particle energy is deposited, the sensitive detector may be triggered, and the boundary process status is set to Detect.

Your code looks like it should work.

You can modify the macro boundary.mac with example OpNovice2 to have the same material properties as your code. The example reports the number of each type of boundary process status.


filling event by event number of photons detected at any of photo cathode.

I think, peak position should shift depending upon efficiency but I am getting same position irrespective of efficiency.

If a photon is absorbed at the surface, a random number in the interval [0,1) is chosen. If this random number is less than EFFICIENCY, the photon is detected. So, changing EFFICIENCY should change the fraction of the absorbed photons that are detected, but not anything else.

So, this fraction should be significant.
Like if I am using photon energy dependent efficiency which peak around ~30%,

While other constant 100 % for all photon energy.
this should have significant dependence.
Am I correct or still I am missing something?

There’s a lot that can go wrong with material properties. I don’t see anything obviously wrong though. If I were troubleshooting I’d try setting EFFICIENCY to all 0, and you shouldn’t see any detection. Or try to reproduce with OpNovice2.

1 Like

Hi,
I’ve been struggling with similar issues in the past.
You’d indeed expect the total hits to go down for lower efficiencies, so the peak should move.
Could it be that you create your G4LogicalBorderSurface before adding material properties to your G4OpticalSurface?
The rest of the code seems fine to me indeed.
Cheers,
Koen

Hi Koen!!
Thank you for reply
Yes, I think detector construction as whole itself one class, so it shouldn’t matter.
I can be wrong.
but even I tried keeping G4LogicalBorderSurface at the end of Material properties. I doesn’t gave any effect.

How are you defining detection?

For instance, if you are histogramming a photon hit when there is an interaction on the surface of the detector, there still may be a stepping interaction on the surface, even if it reflects or is not absorbed.

I am storing only when optical photon absorbed in photocathode. Like-> if (volume== “photocathode”&& process ==“ OpAbroption”).

Is there a process for photons to be absorbed or “lost” elsewhere? If not, is it possible that they reflect in the scintillator until they are absorbed at a photocathode?

Are you using a sensitive detector or user stepping action? This code looks like user stepping action, in which case you’ll need to check the boundary process status manually.

I am using stepping action, Okay
I am sorry, it is not very clear to me.
can you help me to understand?

Optical photons may be absorbed either

  1. in the bulk, with the process G4OpAbsorption. For this, set the material property ABSLENGTH
    or
  2. at a boundary, by the G4OpBoundaryProcess. Set the material property REFLECTIVITY of the surface to not equal 1. (REFLECTIVITY is 1 minus the absorption coefficient of the surface; see the diagram: https://geant4-userdoc.web.cern.ch/UsersGuides/ForApplicationDeveloper/html/_images/UNIFIED_model_diagram.png) So, EFFICIENCY has nothing to do with bulk absorption (G4OpAbsorption).

The material property EFFICIENCY is a property of G4OpBoundaryProcess. It is used to trigger a sensitive detector. It also sets the boundary process status to Detection. In order to see if photons are detected with a SteppingAction, you’ll need to query the boundary process to see if the photon was detected or not. See example code here, also in other optical examples:

https://geant4.kek.jp/lxr/source/examples/extended/optical/OpNovice2/src/SteppingAction.cc#L180