Message: Re: Total internal reflection canceled by sensitive detector Not Logged In (login)
 Next-in-Thread Next-in-Thread
 Next-in-Forum Next-in-Forum

Question Re: Total internal reflection canceled by sensitive detector 

Forum: Processes Involving Optical Photons
Re: Question Total internal reflection canceled by sensitive detector (Mario)
Re: Feedback Re: Total internal reflection canceled by sensitive detector (Gumplinger Peter)
Date: 12 Apr, 2013
From: Erik Dietz-Laursonn <Erik Dietz-Laursonn>

Hallo Peter.

I have a similar problem as Mario had. I have a dielectrical volume (with a sensitive detector), that should show normal reflection/transmission behavior to optical photons, i.e. the photons are not killed. Now I want to know:
1. How many photons hit the surface of this volume?
2. With which incidence angles?
3. How many photons traverse the volume and after how many internal reflections?

The first question is no problem, as either the "reflection step" (reallocation step) or the first step after the refraction fulfill PreStepPoint = SD.

The third question seems to be at least a bit complicated, as the reallocation steps inside the SD only fulfill POSTStepPoint = SD and thous the SD is not activated, no matter what happens with the photon at this surface. But this problem is solvable.

But the second question seems to be unsolvable to me. The problem is, that when the SD is activated for the first time, the photon has already been reflected or refracted. Therefore, i see no possibility to access the photon's original momentum (or any information about the step before).

To solve the problems of optical photons and sensitive detectors, wouldn't it be the easiest thing, to insert something like the following code into G4SteppingManager.cc (not tested yet!)? This would result in a higher flexibility of the sensitive detectors for optical photons and at the same time it would be easy to maintain the current behavior by just adding something like

if(   theStep->GetPreStepPoint()->GetSensitiveDetector() == 0
   || theStep->GetPreStepPoint()->GetSensitiveDetector() != this   ) return true;

to the beginning of the users' sensitive detector's ProcessHits().



// Send G4Step information to Hit/Dig if the volume is sensitive
   fCurrentVolume = fStep->GetPreStepPoint()->GetPhysicalVolume();
   StepControlFlag =  fStep->GetControlFlag();
   if( fCurrentVolume != 0 && StepControlFlag != AvoidHitInvocation) {
      fSensitive = fStep->GetPreStepPoint()->
                                   GetSensitiveDetector();
      if( fSensitive != 0 ) {
        fSensitive->Hit(fStep);
      }

// new code >>>
      // *** comment on the different boundary behavior of opticall photons ***
      if( fTrack->GetDefinition() == G4OpticalPhoton::OpticalPhotonDefinition() ) {
         G4VPhysicalVolume * fNextVolume = fStep->GetPostStepPoint()->GetPhysicalVolume();
         if( fNextVolume != 0 && fNextVolume != fCurrentVolume && StepControlFlag != AvoidHitInvocation ) {
            fSensitive = fStep->GetPostStepPoint()->
                                         GetSensitiveDetector();
            if( fSensitive != 0 ) {
              fSensitive->Hit(fStep);
            }
         }
      }
// new code <<<

   }

Best regards,
Erik

Inline Depth:
 1 1
 All All
Outline Depth:
 1 1
 2 2
 All All
Add message: (add)

1 Feedback: Re: Total internal reflection canceled by sensitive detector   (Gumplinger Peter - 12 Apr, 2013)
 Add Message Add Message
to: "Re: Total internal reflection canceled by sensitive detector"

 Subscribe Subscribe

This site runs SLAC HyperNews version 1.11-slac-98, derived from the original HyperNews