Optical Photon at Boundary (LUT,Unified)

Hello Geant4’users,

I have some problems that I don’t really understand with the optical photon. I have created my scintillator, I can see all of my optical photon and the properties look good. Now I want to use a light guide which will allows my optical photon to “join” my PMT at the end of my detector. Scintillator = G4_PLASTIC_SC_VINYLTOLUENE & Light guide = G4_PLEXIGLASS.

I see there is a lot of model (glisur, unified, lut, lut_davis). After many tries, I used LUT which seems to be easier to begin. My optical photons seems to be correctly deviated and transmitted to my PMT. What disturbs me at this point is that I didn’t set anything else than RINDEX and ABSLENGTH. Just the model and “polishedlumirrorglue”, all of the other models need another variable.
But if this work with LUT, then I could possibly do it with the unified model? At this point, I tried a lot of things, follow the optical model and the user’s guide but my photon don’t want to go through my Luminar Guide …

I tried to se RINDEX, SPECULARLOBECONSTANT, SPECULARSPIKECONSTANT, BACKSCATTERCONSTANT, REFLECTIVITY, EFFICIENCY. Just to set REFLECTIVITY, EFFICIENCY, TRANSMITTANCE. And of course for each of these try, RINDEX & ABSLENGTH are set.

Everytime I have an error while add some verbose like “NoRindex” between my luminor and my scintillator…


G4WT0 > * G4Track Information: Particle = opticalphoton, Track ID = 76, Parent ID = 1
G4WT0 > *********************************************************************************************************
G4WT0 >
G4WT0 > Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName
G4WT0 > 0 0.000649 -0.000133 1.05 2.83e-06 0 0 0 scintillateur_ph initStep
G4WT0 > G4VDiscreteProcess::PostStepGetPhysicalInteractionLength() - [ OpBoundary]
G4WT0 > Particle type - opticalphoton
G4WT0 > mass: 0[GeV]
G4WT0 > charge: 0[e]
G4WT0 > Direction x: 0.05746772430517991, y: 0.5230285983919432, z: 0.8503755322957871
G4WT0 > Total Momentum = 2.82523155954983e-09[GeV]
G4WT0 > Momentum: 1.623596283625031e-10[GeV], y: 1.477676902724031e-09[GeV], z: 2.402507791311043e-09[GeV]
G4WT0 > Total Energy = 2.82523155954983e-09[GeV]
G4WT0 > Kinetic Energy = 2.82523155954983e-09[GeV]
G4WT0 > MagneticMoment [MeV/T]: 0
G4WT0 > ProperTime = 0[ns]
G4WT0 > in Material G4_PLASTIC_SC_VINYLTOLUENE
G4WT0 > InteractionLength= 1.797693134862316e+307[cm]
G4WT0 > G4VDiscreteProcess::PostStepGetPhysicalInteractionLength() - [ OpAbsorption]
G4WT0 > Particle type - opticalphoton
G4WT0 > mass: 0[GeV]
G4WT0 > charge: 0[e]
G4WT0 > Direction x: 0.05746772430517991, y: 0.5230285983919432, z: 0.8503755322957871
G4WT0 > Total Momentum = 2.82523155954983e-09[GeV]
G4WT0 > Momentum: 1.623596283625031e-10[GeV], y: 1.477676902724031e-09[GeV], z: 2.402507791311043e-09[GeV]
G4WT0 > Total Energy = 2.82523155954983e-09[GeV]
G4WT0 > Kinetic Energy = 2.82523155954983e-09[GeV]
G4WT0 > MagneticMoment [MeV/T]: 0
G4WT0 > ProperTime = 0[ns]
G4WT0 > in Material G4_PLASTIC_SC_VINYLTOLUENE
G4WT0 > InteractionLength= 264.3301313730995[cm]
G4WT0 > Photon at Boundary!
G4WT0 > thePrePV: scintillateur_ph
G4WT0 > thePostPV: luminor_ph
G4WT0 > Old Momentum Direction: (0.05746772430517991,0.5230285983919432,0.8503755322957871)
G4WT0 > Old Polarization: (-0.01533844301675322,0.8521452419907701,-0.5230805088304419)
G4WT0 > *** NoRINDEX ***
G4WT0 > 1 0.673 6.12 11 2.83e-06 2.83e-06 11.7 11.7 luminor_ph Transportation
G4WT0 >

I have see that LUT model is based on measures made in another kind of scintillator than plastic. What could be the problem if I use LUT contrary to unified model and why LUT works correctly and not Unified?
If anyone has any ideas or clarifications, I’d love to hear them!

For example, my list try:

scPlastic = nistManager->FindOrBuildMaterial(“G4_PLASTIC_SC_VINYLTOLUENE”);

std::vector EnergyOptical = { 3.046eV, 3.024eV, 2.966eV, 2.95eV, 2.917eV, 2.831eV, 2.774eV, 2.6724eV, 2.5995eV };
std::vector ScintillationEfficiency = { 0.2, 0.4, 0.6, 0.8, 1.0,0.8, 0.6, 0.4, 0.2 };
std::vector RefractionIndex = { 1.58, 1.58,1.58, 1.58,1.58,1.58, 1.58,1.58, 1.58 };
std::vector AbsorptionLength = { 3.80
cm, 3.80m, 3.80m, 3.80m, 3.80m, 3.80m, 3.80m, 3.80m, 3.80m};
G4MaterialPropertiesTable* boxProperty = new G4MaterialPropertiesTable();
boxProperty->AddProperty(“SCINTILLATIONCOMPONENT1”, EnergyOptical, ScintillationEfficiency);
boxProperty->AddConstProperty(“RINDEX”, 1.58);
boxProperty->AddProperty(“ABSLENGTH”, EnergyOptical, AbsorptionLength);
std::vector RangeEnergy = {0.1*MeV, 1.*MeV };
std::vector RangeScintillation = {1000. /MeV, 10000. /MeV };
boxProperty->AddProperty(“ELECTRONSCINTILLATIONYIELD”, RangeEnergy,RangeScintillation);
boxProperty->AddConstProperty(“ELECTRONSCINTILLATIONYIELD1”,1.0);
boxProperty->AddConstProperty(“RESOLUTIONSCALE”, 1.0);
boxProperty->AddConstProperty(“SCINTILLATIONTIMECONSTANT1”, 2.1 * ns);
boxProperty->AddConstProperty(“SCINTILLATIONRISETIME1”, 0.9 * ns);
scPlastic->SetMaterialPropertiesTable(boxProperty);

//Material Helium
G4MaterialPropertiesTable* worldProperty = new G4MaterialPropertiesTable();
worldProperty->AddConstProperty(“RINDEX”, 1.18);
worldProperty->AddConstProperty(“ABSLENGTH”, 500.*cm);

mHe->SetMaterialPropertiesTable(worldProperty);

//Material for Luminance guid
mPlexy = nistManager->FindOrBuildMaterial(“G4_PLEXIGLASS”);
G4MaterialPropertiesTable* mPlexy_MT = new G4MaterialPropertiesTable();
std::vector RangeGuide = { 2.00eV, 4.0eV };
std::vector RefractiveGuide = { 1.492, 1.502 };
mPlexy_MT->AddProperty(“RINDEX”, RangeGuide, RefractiveGuide);
mPlexy_MT->AddConstProperty(“ABSLENGTH”, 500.*cm);

mPlexy->SetMaterialPropertiesTable(mPlexy_MT);

G4OpticalSurface* scPlasPlex = new G4OpticalSurface(“Surface-Optique-PlexyScint”);
scPlasPlex->SetType(dielectric_dielectric);
scPlasPlex->SetFinish(polished);
scPlasPlex->SetModel(glisur);
std::vector RangeGuide = { 2.00eV, 3.00eV, 4.00eV };
std::vector Reflectivity = { 0.0, 0.0, 0.0 };
std::vector Transmittance = { 1.0, 1.0, 1.0 };
auto opm = new G4MaterialPropertiesTable();
opm->AddProperty(“REFLECTIVITY”, RangeGuide, Reflectivity);
opm->AddProperty(“EFFICIENCY”, RangeGuide, Reflectivity);
opm->AddProperty(“TRANSMITTANCE”, RangeGuide, Transmittance);
scPlasPlex->SetMaterialPropertiesTable(opm);
G4LogicalBorderSurface
PlasPlex = new G4LogicalBorderSurface(“Surface-Between-Plastic-LightGuide”, scPlastic_phys, guid_phys, scPlasPlex);
G4LogicalBorderSurface* PlexPlas = new G4LogicalBorderSurface(“Surface-Between-Plastic-LightGuide”, guid_phys, scPlastic_phys, scPlasPlex);

Thank you in advance,
Nsapsap.

RINDEX needs to be added with AddProperty() and specified over a range of energies. Double check all the AddConstProperty statements–ABSLENGTH is also wrong. (In Geant4 version 11 this will result in an error).

The vector of energies should be increasing.

Hello dsawkey,

I do like you say. Inverting photon energy, replace AddConstProperty by AddProperty and it is working well!

One question, we add a RINDEX during the material declaration (think that it is property of the material). For example Mat1Rindex + Mat2Rindex and after the declaration of our Optical Surface we add another Rindex? It is like the BoundaryRindex between Mat1 & Mat2?

For my scintillator I use datasheet of the EJ-200 to set so this part should be good? For the plexiglass I don’t find in the datasheet so… How do you determine them precisely? Same for REFLECTIVITY, TRANSMISSION, SPECULAR & BACKSCATTER Constant? Would it be more precise to use unified or LUT?

Edit: One more question, when they say “Reflectivity = 1 minus the absorption coefficient”, absorption coefficient comes from?

Anyway, once again, thank you for your help!

Great!

Some surfaces (like ‘groundbackpainted’) are actually two materials, and hence two surfaces. The materials are the dielectric, and the paint. The refractive index for the dielectric needs to be specified.

There’s not a good way. If it’s not in the literature you’ll have to be creative.

In principle, if the LUT is for the materials you need, you don’t need to guess at all the values.

You have to find it somehow. Once you do, specify reflectivity accordingly.

Ok, big thanks for your precision!

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.