Table Of Contents

This Page

SURFACE_ABSORB

dbgseqhis

tlaser-t --dbgseqhis 8cccc6d

Boundary 37 (with os:RSOilSurface) : wrong way around ? inner not outer surf ?

Wrong way around ?

  • Perhaps black Acrylic radial shield is mounted in the MO ? So it has MO both inside it and outside it
  • inner not outer surf, so outgoing photons feel it
( 32) om:               MineralOil os:                                is:                                im:                   Vacuum ( 3,-1,-1,12)
( 33) om:                   Vacuum os:                                is:                                im:                    Pyrex (12,-1,-1,13)
( 34) om:                   Vacuum os:lvHeadonPmtCathodeSensorSurface is:                                im:                 Bialkali (12, 7,-1, 4)
( 35) om:                   Vacuum os:                                is:                                im:                      PVC (12,-1,-1,23)
( 36) om:               MineralOil os:                                is:                                im:           StainlessSteel ( 3,-1,-1,36)
( 37) om:               MineralOil os:                   RSOilSurface is:                                im:                  Acrylic ( 3, 8,-1, 2)
( 38) om:                  Acrylic os:                                is:                                im:                      Air ( 2,-1,-1,14)
( 39) om:                      Air os:               ESRAirSurfaceTop is:                                im:                      ESR (14, 9,-1, 9)
( 40) om:                      Air os:               ESRAirSurfaceBot is:                                im:                      ESR (14,10,-1, 9)
( 41) om:               MineralOil os:                                is:                                im:                   Teflon ( 3,-1,-1,28)
( 42) om:               MineralOil os:                                is:                                im:       LiquidScintillator ( 3,-1,-1, 1)

Concentric test

Compare with tdefault where photons distributed randomly from point source

Note that “8cccc6d” is matching better when average over all directions as compared to tlaser which picks one. This supports the cause being triangulation.

/Users/blyth/opticks/ana/tdefault.py
[2016-10-31 15:13:16,021] p6238 {/Users/blyth/opticks/ana/tdefault.py:24} INFO - tag 1 src torch det default c2max 2.0
[2016-10-31 15:13:16,588] p6238 {/Users/blyth/opticks/ana/cf.py:36} INFO - CF a default/torch/  1 :  20161031-1330 /tmp/blyth/opticks/evt/default/torch/1/fdom.npy
[2016-10-31 15:13:16,588] p6238 {/Users/blyth/opticks/ana/cf.py:37} INFO - CF b default/torch/ -1 :  20161031-1330 /tmp/blyth/opticks/evt/default/torch/-1/fdom.npy
          seqhis_ana   1:default   -1:default           c2           ab           ba
              8ccccd         46457        46236             0.53         1.00 +- 0.00         1.00 +- 0.00  [6 ] TO BT BT BT BT SA
          ccaccccccd          9547         8240            96.04         1.16 +- 0.01         0.86 +- 0.01  [10] TO BT BT BT BT BT BT SR BT BT
          cccacccccd          1194         6627          3774.13         0.18 +- 0.01         5.55 +- 0.07  [10] TO BT BT BT BT BT SR BT BT BT
             4cccccd          6611          527          5185.63        12.54 +- 0.15         0.08 +- 0.00  [7 ] TO BT BT BT BT BT AB
                  4d          5008         5021             0.02         1.00 +- 0.01         1.00 +- 0.01  [2 ] TO AB
             8cccccd          3231         4623           246.71         0.70 +- 0.01         1.43 +- 0.02  [7 ] TO BT BT BT BT BT SA
          cccbcccccd          4098         4548            23.42         0.90 +- 0.01         1.11 +- 0.02  [10] TO BT BT BT BT BT BR BT BT BT
           8cbcccccd          2728         2394            21.78         1.14 +- 0.02         0.88 +- 0.02  [9 ] TO BT BT BT BT BT BR BT SA

             8cccc6d          2084         1939             5.23         1.07 +- 0.02         0.93 +- 0.02  [7 ] TO SC BT BT BT BT SA

            8ccccccd          1677         1107           116.70         1.51 +- 0.04         0.66 +- 0.02  [8 ] TO BT BT BT BT BT BT SA
          cacccccccd           279         1591           920.50         0.18 +- 0.01         5.70 +- 0.14  [10] TO BT BT BT BT BT BT BT SR BT
          cccc9ccccd          1455         1431             0.20         1.02 +- 0.03         0.98 +- 0.03  [10] TO BT BT BT BT DR BT BT BT BT
                4ccd          1168         1277             4.86         0.91 +- 0.03         1.09 +- 0.03  [4 ] TO BT BT AB
             7cccccd           657         1116           118.83         0.59 +- 0.02         1.70 +- 0.05  [7 ] TO BT BT BT BT BT SD
          accccccccd           896           19           840.58        47.16 +- 1.58         0.02 +- 0.00  [10] TO BT BT BT BT BT BT BT BT SR
             8cccc5d           863          850             0.10         1.02 +- 0.03         0.98 +- 0.03  [7 ] TO RE BT BT BT BT SA
          abaccccccd           314          797           209.98         0.39 +- 0.02         2.54 +- 0.09  [10] TO BT BT BT BT BT BT SR BR SR
              4ccccd           736          773             0.91         0.95 +- 0.04         1.05 +- 0.04  [6 ] TO BT BT BT BT AB
           4cccccccd           586           10           556.67        58.60 +- 2.42         0.02 +- 0.01  [9 ] TO BT BT BT BT BT BT BT AB
          ccccbccccd           136          481           192.91         0.28 +- 0.02         3.54 +- 0.16  [10] TO BT BT BT BT BR BT BT BT BT
                          100000       100000       101.27

Complement checks...

Using new ana dbgseqhis option, can see the totals for the complement to a sequence. The Opticks shortfall in SA is made up with more BT. From this it seems plausible that the difference could be the result of triangulated vs analytic geometry, due to different angle at which the scatter from the laser beam impinges on triangulated vs analytic surfaces.

Easiest way to verify is to construct a concentric sphere test geometry, bounded by RSOilSurface.

So aiming for a test geometry that has all the features of the real one other than the complicated geometry.

simon:ana blyth$ tlaser.py --dbgseqhis cccc6d
/Users/blyth/opticks/ana/tlaser.py --dbgseqhis cccc6d
[2016-10-31 12:46:11,821] p5110 {/Users/blyth/opticks/ana/tlaser.py:25} INFO - tag 1 src torch det laser c2max 2.0
[2016-10-31 12:46:12,272] p5110 {/Users/blyth/opticks/ana/tlaser.py:48} INFO -  a : laser/torch/  1 :  20161031-1151 /tmp/blyth/opticks/evt/laser/torch/1/fdom.npy
[2016-10-31 12:46:12,272] p5110 {/Users/blyth/opticks/ana/tlaser.py:49} INFO -  b : laser/torch/ -1 :  20161031-1151 /tmp/blyth/opticks/evt/laser/torch/-1/fdom.npy
          seqhis_ana     1:laser     -1:laser           c2           ab           ba
             8cccc6d          1570         1846            22.30         0.85 +- 0.02         1.18 +- 0.03  [7 ] TO SC BT BT BT BT SA
          cacccccc6d           312          247             7.56         1.26 +- 0.07         0.79 +- 0.05  [10] TO SC BT BT BT BT BT BT SR BT
            4ccccc6d           257            4           245.25        64.25 +- 4.01         0.02 +- 0.01  [8 ] TO SC BT BT BT BT BT AB
            8ccccc6d           100          223            46.84         0.45 +- 0.04         2.23 +- 0.15  [8 ] TO SC BT BT BT BT BT SA
          ccbccccc6d           148          124             2.12         1.19 +- 0.10         0.84 +- 0.08  [10] TO SC BT BT BT BT BT BR BT BT
          ccaccccc6d            24          131            73.86         0.18 +- 0.04         5.46 +- 0.48  [10] TO SC BT BT BT BT BT SR BT BT
          8cbccccc6d            84           80             0.10         1.05 +- 0.11         0.95 +- 0.11  [10] TO SC BT BT BT BT BT BR BT SA
          cccccccc6d            73           32            16.01         2.28 +- 0.27         0.44 +- 0.08  [10] TO SC BT BT BT BT BT BT BT BT
           8cccccc6d            66           33            11.00         2.00 +- 0.25         0.50 +- 0.09  [9 ] TO SC BT BT BT BT BT BT SA
          ccc9cccc6d            50           55             0.24         0.91 +- 0.13         1.10 +- 0.15  [10] TO SC BT BT BT BT DR BT BT BT
            7ccccc6d            19           55            17.51         0.35 +- 0.08         2.89 +- 0.39  [8 ] TO SC BT BT BT BT BT SD
          accccccc6d            52           34             3.77         1.53 +- 0.21         0.65 +- 0.11  [10] TO SC BT BT BT BT BT BT BT SR
          cccbcccc6d            51           15            19.64         3.40 +- 0.48         0.29 +- 0.08  [10] TO SC BT BT BT BT BR BT BT BT
           4cccccc6d            43            2            37.36        21.50 +- 3.28         0.05 +- 0.03  [9 ] TO SC BT BT BT BT BT BT AB
             4cccc6d            35           27             1.03         1.30 +- 0.22         0.77 +- 0.15  [7 ] TO SC BT BT BT BT AB
          cbcccccc6d            29           31             0.07         0.94 +- 0.17         1.07 +- 0.19  [10] TO SC BT BT BT BT BT BT BR BT
          bccccccc6d            29           22             0.96         1.32 +- 0.24         0.76 +- 0.16  [10] TO SC BT BT BT BT BT BT BT BR
          4ccccccc6d            28            0             0.00         0.00 +- 0.00         0.00 +- 0.00  [10] TO SC BT BT BT BT BT BT BT AB
          bacccccc6d            24           25             0.02         0.96 +- 0.20         1.04 +- 0.21  [10] TO SC BT BT BT BT BT BT SR BR
          abaccccc6d            13            8             0.00         1.62 +- 0.45         0.62 +- 0.22  [10] TO SC BT BT BT BT BT SR BR SR
            89cccc6d            11            6             0.00         1.83 +- 0.55         0.55 +- 0.22  [8 ] TO SC BT BT BT BT DR SA
            8bcccc6d             6           10             0.00         0.60 +- 0.24         1.67 +- 0.53  [8 ] TO SC BT BT BT BT BR SA
            86cccc6d             9            7             0.00         1.29 +- 0.43         0.78 +- 0.29  [8 ] TO SC BT BT BT BT SC SA
          9cbccccc6d             3            8             0.00         0.38 +- 0.22         2.67 +- 0.94  [10] TO SC BT BT BT BT BT BR BT DR
          ccc6cccc6d             4            7             0.00         0.57 +- 0.29         1.75 +- 0.66  [10] TO SC BT BT BT BT SC BT BT BT

Visual inspection of photon termination points

  • comparing distrib of photon termination points using photon flag interface between tlaser-v and tlaser-vg4 shows no large discrep

Surface info comparison with CInterpolationTest and OInterpolationTest

  • no smoking guns

Commenting out ESRAir reflectivity diddle doesnt fix the 20%

335               if (PropertyPointer)
336               {
337
338 #if ( G4VERSION_NUMBER > 1000 )
339                  theReflectivity = PropertyPointer->Value(thePhotonMomentum);
340 #else
341                  theReflectivity = PropertyPointer->GetProperty(thePhotonMomentum);
342 #endif
343
344                  if(OpticalSurface->GetName().contains("ESRAir"))
345                  {
346                       G4double inciAngle = GetIncidentAngle();
347                       //ESR in air
348                       if(inciAngle*180./pi > 40)
349                       {
350                           theReflectivity = (theReflectivity - 0.993) + 0.973572 + 9.53233e-04*(inciAngle*180./pi) - 1.22184e-05*((inciAngle*180./pi))*((inciAngle*180./pi));
351                       }

1M 2016 Oct 28 seqhis

In general the progressive mask totals show good step-by-step agreement, discrepancies coming in only at last step (AB or SA).

[2016-10-28 11:16:32,771] p43831 {/Users/blyth/opticks/ana/tlaser.py:48} INFO -  a : laser/torch/  1 :  20161028-1116 /tmp/blyth/opticks/evt/laser/torch/1/fdom.npy
[2016-10-28 11:16:32,772] p43831 {/Users/blyth/opticks/ana/tlaser.py:49} INFO -  b : laser/torch/ -1 :  20161028-1116 /tmp/blyth/opticks/evt/laser/torch/-1/fdom.npy
          seqhis_ana     1:laser     -1:laser           c2           ab           ba
              8ccccd        813163       813761             0.22         1.00 +- 0.00         1.00 +- 0.00  [6 ] TO BT BT BT BT SA
                  4d         45622        45617             0.00         1.00 +- 0.00         1.00 +- 0.00  [2 ] TO AB
          cccc9ccccd         27443        27012             3.41         1.02 +- 0.01         0.98 +- 0.01  [10] TO BT BT BT BT DR BT BT BT BT
             8cccc6d         15516        18592           277.41         0.83 +- 0.01         1.20 +- 0.01  [7 ] TO SC BT BT BT BT SA               ## ~20% final SA
                4ccd         10975        11210             2.49         0.98 +- 0.01         1.02 +- 0.01  [4 ] TO BT BT AB
              4ccccd          9002         8820             1.86         1.02 +- 0.01         0.98 +- 0.01  [6 ] TO BT BT BT BT AB
             8cccc5d          8433         8284             1.33         1.02 +- 0.01         0.98 +- 0.01  [7 ] TO RE BT BT BT BT SA
             8cc6ccd          3370         3943            44.90         0.85 +- 0.01         1.17 +- 0.02  [7 ] TO BT BT SC BT BT SA               ## ~20% final SA
          cacccccc6d          3345         2435           143.27         1.37 +- 0.02         0.73 +- 0.01  [10] TO SC BT BT BT BT BT BT SR BT      ## trunc
          cccccc6ccd          2930         2396            53.54         1.22 +- 0.02         0.82 +- 0.02  [10] TO BT BT SC BT BT BT BT BT BT      ## trunc
             86ccccd          2554         2707             4.45         0.94 +- 0.02         1.06 +- 0.02  [7 ] TO BT BT BT BT SC SA               ## ~20% final SA
                 45d          2436         2490             0.59         0.98 +- 0.02         1.02 +- 0.02  [3 ] TO RE AB
            4ccccc6d          2431           78          2206.70        31.17 +- 0.63         0.03 +- 0.00  [8 ] TO SC BT BT BT BT BT AB            ## drastic AB discrep

               tlaser-v    shows the discrepant AB to be associated with specific geometry in viscinity of bottom reflector
               tlaser-vg4  cannot show the 78 as does not make it into the top chart

            8cccc55d          2180         2119             0.87         1.03 +- 0.02         0.97 +- 0.02  [8 ] TO RE RE BT BT BT BT SA
             89ccccd          2011         2152             4.78         0.93 +- 0.02         1.07 +- 0.02  [7 ] TO BT BT BT BT DR SA               ## final SA
          cccc6ccccd          2068         1750            26.49         1.18 +- 0.03         0.85 +- 0.02  [10] TO BT BT BT BT SC BT BT BT BT      ## trunc
               4cccd          2065         1990             1.39         1.04 +- 0.02         0.96 +- 0.02  [5 ] TO BT BT BT AB
            8ccccc6d           991         1985           332.00         0.50 +- 0.02         2.00 +- 0.04  [8 ] TO SC BT BT BT BT BT SA            ## final SA (OK is half of G4)
             8cc5ccd          1898         1964             1.13         0.97 +- 0.02         1.03 +- 0.02  [7 ] TO BT BT RE BT BT SA
          ccbccccc6d          1621         1309            33.22         1.24 +- 0.03         0.81 +- 0.02  [10] TO SC BT BT BT BT BT BR BT BT      ## trunc
                         1000000      1000000        37.28


 Progressive mask development of the 20% discrepant 8cccc6d  shows problem to be
 all in final SURFACE_ABSORB SA step, with G4 absorbing 20% more than OK.
 Note that top line SA is in agreement, but 2nd step SC means are going in a
 random direction, indicating an issue with the "average" absorbing surface
 that is not present with the direct surface pointed at by the laser.

 tlaser-v shows no focus on any specific geometry.


                  6d         36156        35863             1.19         1.01 +- 0.01         0.99 +- 0.01  [2 ] TO SC
                 c6d         32422        32101             1.60         1.01 +- 0.01         0.99 +- 0.01  [3 ] TO SC BT
                cc6d         32333        32014             1.58         1.01 +- 0.01         0.99 +- 0.01  [4 ] TO SC BT BT
               ccc6d         31049        30857             0.60         1.01 +- 0.01         0.99 +- 0.01  [5 ] TO SC BT BT BT
              cccc6d         30884        30721             0.43         1.01 +- 0.01         0.99 +- 0.01  [6 ] TO SC BT BT BT BT
             8cccc6d         15516        18592           277.41         0.83 +- 0.01         1.20 +- 0.01  [7 ] TO SC BT BT BT BT SA

 Same again issue with final SA.

                  cd        892640       893243             0.20         1.00 +- 0.00         1.00 +- 0.00  [2 ] TO BT
                 ccd        891267       891910             0.23         1.00 +- 0.00         1.00 +- 0.00  [3 ] TO BT BT
                6ccd          9025         9035             0.01         1.00 +- 0.01         1.00 +- 0.01  [4 ] TO BT BT SC
               c6ccd          8675         8640             0.07         1.00 +- 0.01         1.00 +- 0.01  [5 ] TO BT BT SC BT
              cc6ccd          8446         8392             0.17         1.01 +- 0.01         0.99 +- 0.01  [6 ] TO BT BT SC BT BT
             8cc6ccd          3370         3943            44.90         0.85 +- 0.01         1.17 +- 0.02  [7 ] TO BT BT SC BT BT SA

SA Opticks

410
411
412         command = propagate_to_boundary( p, s, rng );
413         if(command == BREAK)    break ;           // BULK_ABSORB
414         if(command == CONTINUE) continue ;        // BULK_REEMIT/BULK_SCATTER
415         // PASS : survivors will go on to pick up one of the below flags,
416
417
418         if(s.optical.x > 0 )       // x/y/z/w:index/type/finish/value
419         {
420             command = propagate_at_surface(p, s, rng);
421             if(command == BREAK)    break ;       // SURFACE_DETECT/SURFACE_ABSORB
422             if(command == CONTINUE) continue ;    // SURFACE_DREFLECT/SURFACE_SREFLECT
423         }
424         else
425         {
426             //propagate_at_boundary(p, s, rng);     // BOUNDARY_RELECT/BOUNDARY_TRANSMIT
427             propagate_at_boundary_geant4_style(p, s, rng);     // BOUNDARY_RELECT/BOUNDARY_TRANSMIT
428             // tacit CONTINUE
429         }


486 __device__ int
487 propagate_at_surface(Photon &p, State &s, curandState &rng)
488 {
489
490     float u = curand_uniform(&rng);
491
492     if( u < s.surface.y )   // absorb
493     {
494         s.flag = SURFACE_ABSORB ;
495         s.index.x = s.index.y ;   // kludge to get m2 into seqmat for BREAKERs
496         return BREAK ;
///
///         G4 doing this 20% more than Opticks
///
497     }
498     else if ( u < s.surface.y + s.surface.x )  // absorb + detect
499     {
500         s.flag = SURFACE_DETECT ;
501         s.index.x = s.index.y ;   // kludge to get m2 into seqmat for BREAKERs
502         return BREAK ;
503     }
504     else if (u  < s.surface.y + s.surface.x + s.surface.w )  // absorb + detect + reflect_diffuse
505     {
506         s.flag = SURFACE_DREFLECT ;
507         propagate_at_diffuse_reflector(p, s, rng);
508         return CONTINUE;
509     }
510     else
511     {
512         s.flag = SURFACE_SREFLECT ;
513         propagate_at_specular_reflector(p, s, rng );
514         return CONTINUE;
515     }
516 }
20 enum {
21     OMAT,
22     OSUR,
23     ISUR,
24     IMAT
25 };
26
27 __device__ void fill_state( State& s, int boundary, uint4 identity, float wavelength )
28 {
29     // boundary : 1 based code, signed by cos_theta of photon direction to outward geometric normal
30     // >0 outward going photon
31     // <0 inward going photon
32     //
33     // NB the line is above the details of the payload (ie how many float4 per matsur)
34     //    it is just
35     //                boundaryIndex*4  + 0/1/2/3     for OMAT/OSUR/ISUR/IMAT
36     //
37
38     int line = boundary > 0 ? (boundary - 1)*BOUNDARY_NUM_MATSUR : (-boundary - 1)*BOUNDARY_NUM_MATSUR  ;
39
40     // pick relevant lines depening on boundary sign, ie photon direction relative to normal
41     //
42     int m1_line = boundary > 0 ? line + IMAT : line + OMAT ;
43     int m2_line = boundary > 0 ? line + OMAT : line + IMAT ;
44     int su_line = boundary > 0 ? line + ISUR : line + OSUR ;
45
46     //  consider photons arriving at PMT cathode surface
47     //  geometry normals are expected to be out of the PMT
48     //
49     //  boundary sign will be -ve : so line+3 outer-surface is the relevant one
50
51     s.material1 = boundary_lookup( wavelength, m1_line, 0);
52     s.material2 = boundary_lookup( wavelength, m2_line, 0);
53     s.surface   = boundary_lookup( wavelength, su_line, 0);
54
55     s.optical = optical_buffer[su_line] ;   // index/type/finish/value
56
57     s.index.x = optical_buffer[m1_line].x ; // m1 index
58     s.index.y = optical_buffer[m2_line].x ; // m2 index
59     s.index.z = optical_buffer[su_line].x ; // su index
60     s.index.w = identity.w   ;
61
62     s.identity = identity ;
63
64 }

Check s.optical:

ipython -i proplib.py

In [1]: op.shape
Out[1]: (123, 4, 4)

In [2]: op
Out[2]:
array([[[ 13,   0,   0,   0],
        [  #0,   0,   0,   0],     # no OSUR
        [  #0,   0,   0,   0],     # no ISUR
        [ 13,   0,   0,   0]],

       [[ 13,   0,   0,   0],
        [  0,   0,   0,   0],
        [  0,   0,   0,   0],
        [ 12,   0,   0,   0]],

       [[ 12,   0,   0,   0],
        [  0,   0,   0,   0],
        [  0,   0,   0,   0],
        [ 15,   0,   0,   0]],

       ...,
       [[  9,   0,   0,   0],
        [ 43,   0,   3, 100],     # has OSUR
        [  0,   0,   0,   0],
        [ 24,   0,   0,   0]],

       [[  8,   0,   0,   0],
        [ 44,   0,   3, 100],
        [  0,   0,   0,   0],
        [ 19,   0,   0,   0]],

       [[ 12,   0,   0,   0],
        [  0,   0,   0,   0],
        [  0,   0,   0,   0],
        [ 36,   0,   0,   0]]], dtype=uint32)

OMAT/IMAT lines just contain 1-based material indices:

In [3]: op[:,0]
Out[3]:
array([[13,  0,  0,  0],
       [13,  0,  0,  0],
       [12,  0,  0,  0],
       [15,  0,  0,  0],
       [15,  0,  0,  0],
       [18,  0,  0,  0],
       [20,  0,  0,  0],
       ...

In [4]: op[:,3]
Out[4]:
array([[13,  0,  0,  0],
       [12,  0,  0,  0],
       [15,  0,  0,  0],
       [17,  0,  0,  0],
       [18,  0,  0,  0],
       [20,  0,  0,  0],
       [26,  0,  0,  0],
       [15,  0,  0,  0],

OSUR/ISUR lines contain surface info:

In [5]: op[:,1]
Out[5]:
array([[  0,   0,   0,   0],
       [  0,   0,   0,   0],
       [  0,   0,   0,   0],
       [  1,   0,   3, 100],
       [  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,   0],
       [ 12,   0,   3, 100],
       [  0,   0,   0,   0],
       [  0,   0,   0,   0],
       [  0,   0,   0,   0],
       [ 13,   0,   3, 100],
       [  0,   0,   0,   0],
       [ 14,   0,   3, 100],
       [ 15,   0,   3, 100],
       [ 16,   0,   3, 100],
       [  0,   0,   0,   0],
       [ 17,   0,   3, 100],
       [ 18,   0,   3, 100],
op --bnd

2016-10-28 12:30:12.396 INFO  [347098] [GBndLib::dump@787] GBndLib::dump ni 123
 (  0) om:                   Vacuum os:                          is:                          im:                   Vacuum
 (  1) om:                   Vacuum os:                          is:                          im:                     Rock
 (  2) om:                     Rock os:                          is:                          im:                      Air
 (  3) om:                      Air os:     NearPoolCoverSurface is:                          im:                      PPE
 (  4) om:                      Air os:                          is:                          im:                Aluminium
 (  5) om:                Aluminium os:                          is:                          im:                     Foam
 (  6) om:                     Foam os:                          is:                          im:                 Bakelite
 (  7) om:                 Bakelite os:                          is:                          im:                      Air
 (  8) om:                      Air os:                          is:                          im:                   MixGas
 (  9) om:                      Air os:                          is:                          im:                      Air
 ( 10) om:                      Air os:                          is:                          im:                     Iron
 ( 11) om:                     Rock os:                          is:                          im:                     Rock
 ( 12) om:                     Rock os:                          is:                          im:                DeadWater
 ( 13) om:                DeadWater os:     NearDeadLinerSurface is:                          im:                    Tyvek
 ( 14) om:                    Tyvek os:                          is:      NearOWSLinerSurface im:                 OwsWater
 ( 15) om:                 OwsWater os:                          is:                          im:                    Tyvek
 ( 16) om:                    Tyvek os:                          is:    NearIWSCurtainSurface im:                 IwsWater
 ( 17) om:                 IwsWater os:                          is:                          im:                 IwsWater
 ( 18) om:                 IwsWater os:     SSTWaterSurfaceNear1 is:                          im:           StainlessSteel
 ( 19) om:           StainlessSteel os:                          is:            SSTOilSurface im:               MineralOil
 ( 20) om:               MineralOil os:                          is:                          im:                  Acrylic
 ( 21) om:                  Acrylic os:                          is:                          im:       LiquidScintillator
 ( 22) om:       LiquidScintillator os:                          is:                          im:                  Acrylic
 ( 23) om:                  Acrylic os:                          is:                          im:                GdDopedLS

G4 SA

232 #ifdef USE_CUSTOM_BOUNDARY
233 unsigned int OpPointFlag(const G4StepPoint* point, const DsG4OpBoundaryProcessStatus bst, CStage::CStage_t stage)
234 #else
235 unsigned int OpPointFlag(const G4StepPoint* point, const G4OpBoundaryProcessStatus bst, CStage::CStage_t stage)
236 #endif
237 {
238     G4StepStatus status = point->GetStepStatus()  ;
239     // TODO: cache the relevant process objects, so can just compare pointers ?
240     const G4VProcess* process = point->GetProcessDefinedStep() ;
241     const G4String& processName = process ? process->GetProcessName() : "NoProc" ;
242
243     bool transportation = strcmp(processName,"Transportation") == 0 ;
244     bool scatter = strcmp(processName, "OpRayleigh") == 0 ;
245     bool absorption = strcmp(processName, "OpAbsorption") == 0 ;
246
247     unsigned flag(0);
248
249     if(absorption && status == fPostStepDoItProc )
250     {
251         flag = BULK_ABSORB ;
252     }
253     else if(scatter && status == fPostStepDoItProc )
254     {
255         flag = BULK_SCATTER ;
256     }
257     else if(transportation && status == fWorldBoundary )
258     {
259         flag = SURFACE_ABSORB ;   // kludge for fWorldBoundary - no surface handling yet
260     }
261     else if(transportation && status == fGeomBoundary )
262     {
263         flag = OpBoundaryFlag(bst) ; // BOUNDARY_TRANSMIT/BOUNDARY_REFLECT/NAN_ABORT/SURFACE_ABSORB/SURFACE_DETECT/SURFACE_DREFLECT/SURFACE_SREFLECT
264     }
265     else if( stage == CStage::REJOIN )
266     {
267         flag = BULK_REEMIT ;
268     }
269     else
270     {
271         LOG(warning) << " OpPointFlag ZERO  "
272                      << " proceesDefinedStep? " << processName
273                      << " stage " << CStage::Label(stage)
274                      ;
275     }
276     return flag ;
277 }



158 #ifdef USE_CUSTOM_BOUNDARY
159 unsigned int OpBoundaryFlag(const DsG4OpBoundaryProcessStatus status)
160 #else
161 unsigned int OpBoundaryFlag(const G4OpBoundaryProcessStatus status)
162 #endif
163 {
164     unsigned flag = 0 ;
165     switch(status)
166     {
167         case FresnelRefraction:
168         case SameMaterial:
169                                flag=BOUNDARY_TRANSMIT;
170                                break;
171         case TotalInternalReflection:
172         case       FresnelReflection:
173                                flag=BOUNDARY_REFLECT;
174                                break;
175         case StepTooSmall:
176                                flag=NAN_ABORT;
177                                break;
178         case Absorption:
179                                flag=SURFACE_ABSORB ;
180                                break;
181         case Detection:
182                                flag=SURFACE_DETECT ;
183                                break;
184         case SpikeReflection:
185                                flag=SURFACE_SREFLECT ;
186                                break;
187         case LobeReflection:
188         case LambertianReflection:
189                                flag=SURFACE_DREFLECT ;
190                                break;
191         case Undefined:
192         case BackScattering:
193         case NotAtBoundary:
194         case NoRINDEX:
1093 void DsG4OpBoundaryProcess::DoAbsorption()
1094 {
1095     //LOG(info) << "DsG4OpBoundaryProcess::DoAbsorption"
1096     //          << " theEfficiency " << theEfficiency
1097     //          ;
1098
1099     theStatus = Absorption;
1100
1101     if ( G4BooleanRand(theEfficiency) )
1102     {
1103         // EnergyDeposited =/= 0 means: photon has been detected
1104         theStatus = Detection;
1105         aParticleChange.ProposeLocalEnergyDeposit(thePhotonMomentum);
1106     }
1107     else
1108     {
1109         aParticleChange.ProposeLocalEnergyDeposit(0.0);
1110     }
1111
1112     NewMomentum = OldMomentum;
1113     NewPolarization = OldPolarization;
1114
1115 //  aParticleChange.ProposeEnergy(0.0);
1116     aParticleChange.ProposeTrackStatus(fStopAndKill);
1117 }
704 void DsG4OpBoundaryProcess::DielectricMetal()
705 {
706         G4int n = 0;
707
708     do {
709
710            n++;
711
712            if( !G4BooleanRand(theReflectivity) && n == 1 ) {
713
714              // Comment out DoAbsorption and uncomment theStatus = Absorption;
715              // if you wish to have Transmission instead of Absorption
716
717              DoAbsorption();
718              // theStatus = Absorption;
719              break;
720
721            }
722            else {