Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Surface Properties and Probabilities

G4CMPSurfaceProperty supports both simple probabilities and frequency-dependent probabilities for phonon absorption, reflection and anharmonic decay.  The simple probablities are assigned as arguments to the G4CMPSurfaceProperty constructor:

Code Block
languagec++
  G4CMPSurfaceProperty(const G4String& name,
                       G4double qAbsProb,         // Prob. to absorb charge carrier
                       G4double qReflProb,        // If not absorbed, prob to reflect
                       G4double eMinK,            // Min wave number to absorb electron
                       G4double hMinK,            // Min wave number to absorb hole
                       G4double pAbsProb,         // Prob. to absorb phonon
                       G4double pReflProb,        // If not absorbed, prob to reflect
                       G4double pSpecProb,        // Prob. of specular reflection
                       G4double pMinK,            // Min wave number to absorb phonon
                       G4double qpAbsProb = 0.0,  // Prob. to absorb a bogoliubov QP
                       G4double qpReflProb = 1.0, // Prob to reflect a bogoliubov QP
                       //(Note 1-qpAbsProb-qpReflProb is the probability for the QP to transport)
                       G4SurfaceType stype = dielectric_dielectric);

There are also mutator functions to set the phonon, charge, and QP simple probabilities separately:

Code Block
languagec++
  void FillChargeMaterialPropertiesTable(G4double qAbsProb, G4double qReflProb,
                                         G4double eMinK,    G4double hMinK);

  void FillPhononMaterialPropertiesTable(G4double pAbsProb,  G4double pReflProb,
                                         G4double pSpecProb, G4double pMinK);
    
  void FillQPMaterialPropertiesTable(G4double qpAbsProb,  G4double qpReflProb);


The frequency-dependent probability functions are implemented as simple polynomials, which can be of arbitrary order.  The user can set any of them with pairs of mutator functions (see G4CMPSurfaceProperty.hh for the names of the other functions):

Code Block
languagec++
  void AddSurfaceAnharmonicCutoff(G4double freqMax) { anharmonicMaxFreq = freqMax; }
  void AddSurfaceAnharmonicCoeffs(const std::vector<G4double>& coeff,
                                  G4double freqUnits=0.)

The "cutoff" is the maximum frequency for which the polynomial function is valid; above that frequency, the value evaluated at the cutoff is used.  The polynomial coefficients are supplied as a vector of simple numbers, coeff[0], coeff[1], ... coeff[N-1], along with a Geant4 unit (hertz, GHz, whatever).  The unit is used to rescale the user's input appropriately so that when a dimensionful frequency value is used in the polynomial, the result comes out sensible.  A very simple list of coefficients, like {1,0,0,0,0}, would correspond to a constant probability of 1 (coeff[0]), with no actual frequency dependence.

The surface probabilities are applied as a series of conditional probabilities, as follows:

  • When a track reaches the surface, *AbsProb, between 0 and 1 (pAbsProb for phonons, qAbsProb for charges, qpAbsProb for Bogoliubov quasiparticles) is used to decide whether the track is absorbed or not.
  • If absorption fails, *ReflProb between 0 and 1 is used to decide whether the track is reflected or not.
    • If *ReflProb succeeds, then *SpecProb between 0 and 1 is used top decide whether the reflection is specular; if it fails, the reflection is diffuse, according to a Lambertian (cosθ) distribution about the local surface normal.
  • If reflection fails, then transmission is invoked, which must be properly implemented in the relevant G4CMP*BoundaryProcess class.

If the user has assigned any of the frequency-dependent probabilitity functions, those are applied in place of the simple probabilities in the outline above.

Generic "Electrode" Sensors

...

Useful Additional Discussion about Phonon Interfacial Properties

The following italicized is part of an email discussing phonon absorption and how to understand the interplay between KaplanQP and the current (7/16/25) "simple/dumb" phonon absorption at a given superconducting surface. 

The primary relevant block of code for this discussion is here:

 Image Modified

Boundary actions for phonons follow a particular logic:

  1. After checking that materials are defined...
  2. ...check to see if we're "near an electrode." For phonon electrodes, it looks like all this does is draw a random number in [0,1], and if it's below filmAbsorption, then proceed with running the KaplanQP implementation of absorption with all of the fancy film physics.
  3. Otherwise, draw a random number in [0,1] and check to see if we do "naive" absorption with the absProb parameter. 
  4. If we don't absorb with either KaplanQP or "naive" absorption, then check to see if we've hit our reflection limit. If not, then draw a random number in [0,1] to calculate the probability of reflection. (This is why reflection != 1-absorption, btw. At this point I don't see a reason NOT to have pReflProb = 1)
  5. Lastly, if we don't reflect, then we do "transmission." But this code block just kills the track. 

At this point I see the following two scenarios as being potentially sensible:

  1. Set  filmAbsorption  to 0,  pAbsProb  to >0, and pReflProb to 1:  Here, we completely ignore the KaplanQP class logic block and do "naive" absorption, where the probability of absorption is just pAbsProb. You don't get KaplanQP's nice physics, but we get a bit more manual control over absorption, of which an upside is the simplicity.
  2. Set   filmAbsorption   to <1,   pAbsProb   to 0, and pReflProb to 1: This seems like another workable scenario with good flexibility. Here it seems like filmAbsorption acts as a probability of transmission through the interface, enabling KaplanQP to run some fraction of the time, and enabling pure reflection at the interface (i.e. before energy passes into the SC film) to happen otherwise. One potential caveat here is that depending on your phonon energy, the probability of phonon "reflection" (insofar as Geant4 is concerned) could very well be much higher than just (1-filmAbsorption). One of the things KaplanQP does is to check to see if the phonon bounces off of the opposite side of the film and travels back to the superconducting-substrate border prior to being absorbed. If the phonon mean free path is much longer than your film thickness, you may end up with most of them reflecting back out of your film, inflating the probability of "reflection" to a value higher than the actual interface reflection coefficient (in this case, 1-filmAbsorption). So depending on how you want to define reflection, this may be a thing you care about?  Despite small things like this,  this option seems like it may be the most general (and/or best) way to go while also getting KaplanQP's good physics. 


Other combinations seem either insufficiently general/flexible (like filmAbsorption = 1), or physically confusing (like filmAbsorption somewhere <1 and >0, and pAbsProb >0). 

As an aside: thinking a bit more about KaplanQP, I'm wondering about some of its potential shortfalls (or put more positively, ways to upgrade it?). For example, it doesn't seem to do reflection of phonons trying to leave the SC at the SC-substrate interface. Why not? I guess I don't know enough about phonon reflection at interfaces here, but it kind of seems like turning that process on should be an option as well? Maybe this is in the works, though? Not sure. 

...