Why processName of opticalphoton are all transportation?

I recently use Geant4 to do some simulation about Cherenkov radiation.And I set PMT to detect the photon.In the tracking information,I found out that every step’s processsName of opticalPhoton is transportation.But they all killed by absorption or detection(so in the last step,it shouldn’t be transportation).I want to know how the opticalphoton dead.
How can I solve this problem?

The output information are as follow:


  • G4Track Information: Particle = opticalphoton, Track ID = 288, Parent ID = 2

Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName
0 831 -0.241 -8.78e+03 1.07e-05 0 0 0 InnerWater initStep
1 1.13e+03 -1.55e+03 -9.95e+03 1.07e-05 0 1.96e+03 1.96e+03 bottom_reflector2 Transportation
2 1.13e+03 -1.55e+03 -9.95e+03 1.07e-05 0 0 1.96e+03 InnerWater Transportation
3 1.18e+03 -1.7e+03 -9.91e+03 1.07e-05 0 160 2.12e+03 reflector2 Transportation
4 1.18e+03 -1.7e+03 -9.91e+03 1.07e-05 0 0 2.12e+03 InnerWater Transportation
5 1.36e+03 -1.41e+03 -9.95e+03 1.07e-05 0 346 2.47e+03 bottom_reflector2 Transportation
6 1.36e+03 -1.41e+03 -9.95e+03 1.07e-05 0 0 2.47e+03 InnerWater Transportation
7 1.21e+03 -1.68e+03 -9.34e+03 1.07e-05 0 687 3.16e+03 reflector2 Transportation
8 1.21e+03 -1.68e+03 -9.34e+03 1.07e-05 0 0 3.16e+03 InnerWater Transportation
9 1.21e+03 -1.6e+03 -9.42e+03 1.07e-05 0 114 3.27e+03 pmt Transportation
10 1.21e+03 -1.6e+03 -9.42e+03 1.07e-05 0 0.000154 3.27e+03 pmtbase Transportation
11 1.21e+03 -1.6e+03 -9.42e+03 1.07e-05 0 0 3.27e+03 pmt Transportation
12 1.21e+03 -1.6e+03 -9.42e+03 1.07e-05 0 0.000154 3.27e+03 InnerWater Transportation
13 1.28e+03 -1.62e+03 -9.51e+03 1.07e-05 0 111 3.38e+03 reflector2 Transportation
14 1.28e+03 -1.62e+03 -9.51e+03 1.07e-05 0 0 3.38e+03 InnerWater Transportation
15 -235 138 -9.95e+03 1.07e-05 0 2.36e+03 5.75e+03 bottom_reflector2 Transportation
16 -235 138 -9.95e+03 1.07e-05 0 0 5.75e+03 InnerWater Transportation
17 1.93e+03 738 -8.62e+03 1.07e-05 0 2.61e+03 8.36e+03 reflector2 Transportation
18 1.93e+03 738 -8.62e+03 1.07e-05 0 0 8.36e+03 InnerWater Transportation
19 1.59e+03 1.18e+03 -9.95e+03 1.07e-05 0 1.44e+03 9.8e+03 bottom_reflector2 Transportation
20 1.59e+03 1.18e+03 -9.95e+03 1.07e-05 0 0 9.8e+03 InnerWater Transportation
21 1.16e+03 1.71e+03 -9.82e+03 1.07e-05 0 692 1.05e+04 reflector2 Transportation
22 1.16e+03 1.71e+03 -9.82e+03 1.07e-05 0 0 1.05e+04 InnerWater Transportation
23 1.14e+03 1.66e+03 -9.95e+03 1.07e-05 0 141 1.06e+04 bottom_reflector2 Transportation

The process is almost always Transportation, because optical photons generally don’t do anything except reflect :slight_smile: They mostly interact at boundaries, and the BoundaryProcess itself is not the “step limiting process” – that’s Transportation.

You have to interrogate G4OpBoundaryProcess itself to find out what it decided to do with the optical photon it was given. See examples/extended/optical/OpNovice/OpNoviceSteppingAction.cc for an example of how to do this.

Thank you so much for replying. I check the last step’s processName,but I found that when the optical photons die in those volume without optical surface set,the process is OpAbsorption.It’s strange why OpAbsorption here,because when optical photons die in volume with optical surface they have the boundaryStatus named “absorption” or “detection” but the processName is transportation.

Do you have an optical absorption length set for your material? That will trigger G4OpAbsorption.

The Optical Photon Processes documentation is fairly detailed, including the Boundary Process subsection, but I didn’t see an explicit discussion of dealing with the BoundaryStatus.

I’m sorry that maybe I don’t very understand.In the example,it seems that there are other processName of optical photons:
if(particleDef == opticalphoton)
{
G4StepPoint* endPoint = step->GetPostStepPoint();
const G4VProcess* pds = endPoint->GetProcessDefinedStep();
G4String procname = pds->GetProcessName();
if(procname.compare(“OpRayleigh”) == 0)
fEventAction->AddRayleigh();
else if(procname.compare(“OpAbsorption”) == 0)
fEventAction->AddAbsorption();
else if(procname.compare(“OpMieHG”) == 0)
fEventAction->AddMie();

Those are all discussed in the documentation. I’m going to edit my original reply, it was oversimplified and misleading. The more precise statement would have been

The process is almost always Transportation because optical photons don’t generally do anything except reflect. They mostly interact at boundaries, …

Thank you very much for your reply! :heart: :
Yes.The volume that optical photons die in,with a process called OpAbsorption ,has absorption length(glass_mt->AddProperty(“ABSLENGTH”, energy, glass_AbsLength, num);).In other volumes without absorption length,the process is transportation.
When set the photocathode ,I set EFFICIENCY ,REALRINDEX and IMAGINARYRINDEX, and I only get the transportation process,but I can get the boudary interaction by boundary->GetStatus().(This will output a number which means absorption or detection).Maybe it is not able to output a process like “absorption” or others,because I dindn’t set the property related?
And in the documentation,there is Boundary scattering (class G4OpBoundary),it seems that boundary interaction should be output in process as “OpBoudary” :thinking:.

A status is not the same as a process. The boundaryProcess status is an enum (look at G4OpBoundaryProcess.hh right at the top, after the #includes).

When you query the step for the “process” that never tells you all the processes that affected the particle. It only tells which one of those many processes was the one which limited the step. In the case of a particle reaching the boundary of a volume, it is always Transportation which limits the step. Then other processes (OpBoundaryProcess, maybe decays, etc.) get their own opportunity to affect the particle.

Thank you so much!I think i got a deeper comprehension of this concept. :star_struck:

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