tconcentric pflags mismatch from_truncation handling ====================================================== Status -------- Dumping indicates a mismatch in handling of truncation following the move from live to canned recording. Suspect issue is from RecordStepPoint being developed for live running where records are written until truncation is hit and the method returns done = true to indicate truncation. That works OK in canned mode for a single G4 track, but with rejoining of reemtracks the CRecorder::CannedWriteSteps gets called for each of the rejoin attempts and then it is incorrect to plough ahead with the RecordStepPoint when already in truncation. So need to know the "done" status before, not after in canned running. :: 828 #ifdef USE_CUSTOM_BOUNDARY 829 bool CRecorder::RecordStepPoint(const G4StepPoint* point, unsigned int flag, unsigned int material, DsG4OpBoundaryProcessStatus boundary_status, const char* label) 830 #else 831 bool CRecorder::RecordStepPoint(const G4StepPoint* point, unsigned int flag, unsigned int material, G4OpBoundaryProcessStatus boundary_status, const char* label) 832 #endif Issue ------- pflags obtained from seqhis and direct pflags obtained from photon buffer are mismatched for 2 out of 1M photons : probably a truncation difference FIXED BY ENFORCING HARD_TRUNCATE IN CANNED RUNNING -------------------------------------------------------- :: + bool hard_truncate = (m_step_action & HARD_TRUNCATE) != 0 ; + + if(done && !hard_truncate) + { + RecordPhoton(post); + } + Internal CFG4 Opticks event inconsistency --------------------------------------------- This is an internal inconsistency within the CFG4 opticks event buffers. Sequence buffer /tmp/blyth/opticks/evt/concentric/torch/-1/ph.npy contains the seqhis and seqmat 64bit uints, with the point by point flags. Photon buffer /tmp/blyth/opticks/evt/concentric/torch/-1/ox.npy contains uncompressed final photon parametrs including the pflags mask. The pflags can be derived from the seqhis, this check is done on evt loading. ana/evt.py:: 314 def init_photons(self): 319 ox = A.load_("ox",self.src,self.tag, self.det, optional=True ) 320 self.ox = ox 321 self.desc['ox'] = "(photons) final photon step" 325 self.check_ox_fdom() ... 327 wl = ox[:,2,W] 328 c4 = ox[:,3,2].copy().view(dtype=[('x',np.uint8),('y',np.uint8),('z',np.uint8),('w',np.uint8)]).view(np.recarray) ... 332 self.wl = wl 333 self.post = ox[:,0] 334 self.dirw = ox[:,1] 335 self.polw = ox[:,2] 336 self.pflags = ox.view(np.uint32)[:,3,3] ... 437 def init_sequence(self, tag, src, det, dbg): 438 """ 439 Sequence values seqhis and seqmat for each photon:: 440 441 In [8]: a.ph.shape 442 Out[8]: (100, 1, 2) 443 444 In [9]: np.set_printoptions(formatter={'int':hex}) 445 446 In [10]: a.ph 447 Out[10]: 448 A(torch,1,laser)- 449 A([[[0x8ccccdL, 0x343231L]], 450 [[0x8ccccdL, 0x343231L]], 451 [[0x8cccc6dL, 0x3432311L]], 452 [[0x8ccccdL, 0x343231L]], 453 [[0x8ccccdL, 0x343231L]], 454 [[0xbcbccccc6dL, 0x3333342311L]], 455 456 """ ... 459 ph = A.load_("ph",src,tag,det,dbg, optional=True) 460 self.ph = ph 461 self.desc['ph'] = "(records) photon history flag/material sequence" ... 466 seqhis = ph[:,0,0] 467 seqmat = ph[:,0,1] ... 474 self.seqhis = seqhis 475 self.pflags2 = seq2msk(seqhis) 476 477 self.msk_mismatch = self.pflags != self.pflags2 478 self.num_msk_mismatch = np.count_nonzero(self.msk_mismatch) 479 480 if self.num_msk_mismatch == 0: 481 log.debug("pflags2(=seq2msk(seqhis)) and pflags match") 482 else: 483 log.info("pflags2(=seq2msk(seqhis)) and pflags MISMATCH num_msk_mismatch: %d " % self.num_msk_mismatch ) 484 pass CRecorder::RecordPhoton -------------------------- Writes both m_mskhis into photon buffer and m_seqhis m_seqmat into sequence/history buffer. Rerunning will overwrite prior m_record_id writes with current values of m_mskhis,m_seqhis,m_seqmat. :: 1123 void CRecorder::RecordPhoton(const G4StepPoint* point) 1124 { 1125 // gets called at last step (eg absorption) or when truncated 1126 // for reemission have to rely on downstream overwrites 1127 // via rerunning with a target_record_id to scrub old values .... .... 1139 NPY* target = m_dynamic ? m_dynamic_photons : m_photons ; 1140 unsigned int target_record_id = m_dynamic ? 0 : m_record_id ; 1141 1142 1143 target->setQuad(target_record_id, 0, 0, pos.x()/mm, pos.y()/mm, pos.z()/mm, time/ns ); 1144 target->setQuad(target_record_id, 1, 0, dir.x(), dir.y(), dir.z(), weight ); 1145 target->setQuad(target_record_id, 2, 0, pol.x(), pol.y(), pol.z(), wavelength/nm ); 1146 1147 target->setUInt(target_record_id, 3, 0, 0, m_slot ); 1148 target->setUInt(target_record_id, 3, 0, 1, 0u ); 1149 target->setUInt(target_record_id, 3, 0, 2, m_c4.u ); 1150 target->setUInt(target_record_id, 3, 0, 3, m_mskhis ); .... .... 1169 NPY* h_target = m_dynamic ? m_dynamic_history : m_history ; 1170 1171 unsigned long long* history = h_target->getValues() + 2*target_record_id ; 1172 *(history+0) = m_seqhis ; 1173 *(history+1) = m_seqmat ; 1174 1175 if(m_dynamic) 1176 { 1177 m_history->add(m_dynamic_history); 1178 } 1179 } Where these are invoked:: 564 bool CRecorder::LiveRecordStep() ... 637 if(done) 638 { 639 RecordPhoton(post); // m_seqhis/m_seqmat here written, REJOIN overwrites into record_id recs 640 } 641 642 m_crec->add(m_step, m_step_id, m_boundary_status, m_premat, m_postmat, preFlag, postFlag, m_stage, m_step_action ); 643 644 return done ; 645 } Low verbosity dump:: 2016-11-23 15:54:11.943 INFO [1819418] [CRunAction::BeginOfRunAction@19] CRunAction::BeginOfRunAction count 1 2016-11-23 15:54:27.694 INFO [1819418] [CTrackingAction::dump@185] . 2016-11-23 15:54:27.694 INFO [1819418] [CTrackingAction::dump@186] CTrackingAction::setPhotonId --dindex record_id 430603 event_id 43 track_id 603 photon_id 603 parent_id -1 primary_id -2 reemtrack 0 2016-11-23 15:54:27.694 INFO [1819418] [CRecorder::dump_brief@1252] CRecorder::RecordPhoton m_record_id 430603 m_badflag 0 --dindex POST_SAVE POST_DONE RECORD_TRUNCATE BOUNCE_TRUNCATE 2016-11-23 15:54:27.694 INFO [1819418] [CRecorder::dump_brief@1261] seqhis c9cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT DR BT 2016-11-23 15:54:27.694 INFO [1819418] [CRecorder::dump_brief@1266] mskhis 1920 SC|DR|BT|TO 2016-11-23 15:54:27.694 INFO [1819418] [CRecorder::dump_brief@1271] seqmat 3443231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO MO Ac 2016-11-23 15:54:27.694 INFO [1819418] [CRecorder::dump@1237] CRecorder::posttrack 2016-11-23 15:54:27.694 INFO [1819418] [CTrackingAction::dump@185] . 2016-11-23 15:54:27.694 INFO [1819418] [CTrackingAction::dump@186] CTrackingAction::setPhotonId --dindex record_id 430603 event_id 43 track_id 10893 photon_id 603 parent_id 603 primary_id -2 reemtrack 1 2016-11-23 15:54:27.694 INFO [1819418] [CRecorder::RecordStepPoint@879] TOPSLOT_REWRITE topslot_rewrite 1 prior_flag -> flag BT -> RE prior_mat -> mat Ac -> Gd 2016-11-23 15:54:27.694 INFO [1819418] [CRecorder::dump_brief@1252] CRecorder::RecordPhoton m_record_id 430603 m_badflag 0 --dindex PRE_SAVE PRE_DONE LAST_POST STEP_REJOIN RECORD_TRUNCATE HARD_TRUNCATE 2016-11-23 15:54:27.694 INFO [1819418] [CRecorder::dump_brief@1261] seqhis c9cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT DR BT 2016-11-23 15:54:27.694 INFO [1819418] [CRecorder::dump_brief@1266] mskhis 1920 SC|DR|BT|TO 2016-11-23 15:54:27.694 INFO [1819418] [CRecorder::dump_brief@1271] seqmat 3443231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO MO Ac 2016-11-23 15:54:27.694 INFO [1819418] [CRecorder::dump@1237] CRecorder::posttrack 2016-11-23 15:54:27.694 INFO [1819418] [CTrackingAction::dump@185] . 2016-11-23 15:54:27.694 INFO [1819418] [CTrackingAction::dump@186] CTrackingAction::setPhotonId --dindex record_id 430603 event_id 43 track_id 10894 photon_id 603 parent_id 10893 primary_id 603 reemtrack 1 2016-11-23 15:54:27.694 INFO [1819418] [CRecorder::RecordStepPoint@879] HARD_TRUNCATE topslot_rewrite 2 prior_flag -> flag BT -> AB prior_mat -> mat Ac -> Gd 2016-11-23 15:54:27.694 INFO [1819418] [CRecorder::dump_brief@1252] CRecorder::RecordPhoton m_record_id 430603 m_badflag 0 --dindex PRE_SAVE POST_SAVE POST_DONE LAST_POST STEP_REJOIN RECORD_TRUNCATE HARD_TRUNCATE 2016-11-23 15:54:27.694 INFO [1819418] [CRecorder::dump_brief@1261] seqhis c5cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT RE BT 2016-11-23 15:54:27.694 INFO [1819418] [CRecorder::dump_brief@1266] mskhis 1930 RE|SC|DR|BT|TO 2016-11-23 15:54:27.694 INFO [1819418] [CRecorder::dump_brief@1271] seqmat 3143231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO Gd Ac 2016-11-23 15:54:27.695 INFO [1819418] [CRecorder::dump@1237] CRecorder::posttrack 2016-11-23 15:54:27.695 INFO [1819418] [CTrackingAction::dump@185] . 2016-11-23 15:54:27.695 INFO [1819418] [CTrackingAction::dump@186] CTrackingAction::setPhotonId --dindex record_id 430603 event_id 43 track_id 10895 photon_id 603 parent_id 10894 primary_id 603 reemtrack 1 2016-11-23 15:54:27.695 INFO [1819418] [CRecorder::RecordStepPoint@879] HARD_TRUNCATE topslot_rewrite 3 prior_flag -> flag BT -> BT prior_mat -> mat Ac -> Ac 2016-11-23 15:54:27.695 INFO [1819418] [CRecorder::dump_brief@1252] CRecorder::RecordPhoton m_record_id 430603 m_badflag 0 --dindex PRE_SAVE POST_SAVE POST_DONE STEP_REJOIN RECORD_TRUNCATE HARD_TRUNCATE 2016-11-23 15:54:27.695 INFO [1819418] [CRecorder::dump_brief@1261] seqhis c5cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT RE BT 2016-11-23 15:54:27.695 INFO [1819418] [CRecorder::dump_brief@1266] mskhis 1930 RE|SC|DR|BT|TO 2016-11-23 15:54:27.695 INFO [1819418] [CRecorder::dump_brief@1271] seqmat 3143231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO Gd Ac 2016-11-23 15:54:27.695 INFO [1819418] [CRecorder::dump@1237] CRecorder::posttrack 2016-11-23 15:54:48.878 INFO [1819418] [CRunAction::EndOfRunAction@23] CRunAction::EndOfRunAction count 1 After fix of special casing the RecordPhoton:: 2016-11-23 16:00:43.958 INFO [1821647] [CRunAction::BeginOfRunAction@19] CRunAction::BeginOfRunAction count 1 2016-11-23 16:01:00.069 INFO [1821647] [CTrackingAction::dump@185] . 2016-11-23 16:01:00.069 INFO [1821647] [CTrackingAction::dump@186] CTrackingAction::setPhotonId --dindex record_id 430603 event_id 43 track_id 603 photon_id 603 parent_id -1 primary_id -2 reemtrack 0 2016-11-23 16:01:00.070 INFO [1821647] [CRecorder::dump_brief@1254] CRecorder::RecordPhoton m_record_id 430603 m_badflag 0 --dindex POST_SAVE POST_DONE RECORD_TRUNCATE BOUNCE_TRUNCATE 2016-11-23 16:01:00.070 INFO [1821647] [CRecorder::dump_brief@1263] seqhis c9cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT DR BT 2016-11-23 16:01:00.070 INFO [1821647] [CRecorder::dump_brief@1268] mskhis 1920 SC|DR|BT|TO 2016-11-23 16:01:00.070 INFO [1821647] [CRecorder::dump_brief@1273] seqmat 3443231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO MO Ac 2016-11-23 16:01:00.070 INFO [1821647] [CRecorder::dump@1239] CRecorder::posttrack 2016-11-23 16:01:00.070 INFO [1821647] [CTrackingAction::dump@185] . 2016-11-23 16:01:00.070 INFO [1821647] [CTrackingAction::dump@186] CTrackingAction::setPhotonId --dindex record_id 430603 event_id 43 track_id 10893 photon_id 603 parent_id 603 primary_id -2 reemtrack 1 2016-11-23 16:01:00.070 INFO [1821647] [CRecorder::RecordStepPoint@881] TOPSLOT_REWRITE topslot_rewrite 1 prior_flag -> flag BT -> RE prior_mat -> mat Ac -> Gd 2016-11-23 16:01:00.070 INFO [1821647] [CRecorder::dump@1239] CRecorder::posttrack 2016-11-23 16:01:00.070 INFO [1821647] [CTrackingAction::dump@185] . 2016-11-23 16:01:00.070 INFO [1821647] [CTrackingAction::dump@186] CTrackingAction::setPhotonId --dindex record_id 430603 event_id 43 track_id 10894 photon_id 603 parent_id 10893 primary_id 603 reemtrack 1 2016-11-23 16:01:00.070 INFO [1821647] [CRecorder::RecordStepPoint@881] HARD_TRUNCATE topslot_rewrite 2 prior_flag -> flag BT -> AB prior_mat -> mat Ac -> Gd 2016-11-23 16:01:00.070 INFO [1821647] [CRecorder::dump@1239] CRecorder::posttrack 2016-11-23 16:01:00.070 INFO [1821647] [CTrackingAction::dump@185] . 2016-11-23 16:01:00.070 INFO [1821647] [CTrackingAction::dump@186] CTrackingAction::setPhotonId --dindex record_id 430603 event_id 43 track_id 10895 photon_id 603 parent_id 10894 primary_id 603 reemtrack 1 2016-11-23 16:01:00.070 INFO [1821647] [CRecorder::RecordStepPoint@881] HARD_TRUNCATE topslot_rewrite 3 prior_flag -> flag BT -> BT prior_mat -> mat Ac -> Ac 2016-11-23 16:01:00.070 INFO [1821647] [CRecorder::dump@1239] CRecorder::posttrack 2016-11-23 16:01:22.156 INFO [1821647] [CRunAction::EndOfRunAction@23] CRunAction::EndOfRunAction count 1 2016-11-23 16:01:22.157 INFO [1821647] [CG4::postpropagate@355] CG4::postpropagate(0) tconcentric.py ---------------- :: simon:opticks blyth$ tconcentric-i ... /Users/blyth/opticks/ana/tconcentric.py --tag 1 --det concentric --src torch [2016-11-22 11:46:40,190] p97491 {/Users/blyth/opticks/ana/evt.py:431} INFO - pflags2(=seq2msk(seqhis)) and pflags MISMATCH (msk_mismatch) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AB(1,torch,concentric) None 0 A concentric/torch/ 1 : 20161122-1111 maxbounce:15 maxrec:16 maxrng:3000000 /tmp/blyth/opticks/evt/concentric/torch/1/fdom.npy B concentric/torch/ -1 : 20161122-1111 maxbounce:15 maxrec:16 maxrng:3000000 /tmp/blyth/opticks/evt/concentric/torch/-1/fdom.npy . seqhis_ana noname noname c2 ab ba . 1000000 1000000 371.33/355 = 1.05 (pval:0.265 prob:0.735) 0 8ccccd 669843 670001 0.02 1.000 +- 0.001 1.000 +- 0.001 [6 ] TO BT BT BT BT SA 1 4d 83950 84149 0.24 0.998 +- 0.003 1.002 +- 0.003 [2 ] TO AB 2 8cccc6d 45490 44770 5.74 1.016 +- 0.005 0.984 +- 0.005 [7 ] TO SC BT BT BT BT SA 3 4ccccd 28955 28718 0.97 1.008 +- 0.006 0.992 +- 0.006 [6 ] TO BT BT BT BT AB 4 4ccd 23187 23170 0.01 1.001 +- 0.007 0.999 +- 0.007 [4 ] TO BT BT AB 5 8cccc5d 20238 20140 0.24 1.005 +- 0.007 0.995 +- 0.007 [7 ] TO RE BT BT BT BT SA 6 8cc6ccd 10214 10357 0.99 0.986 +- 0.010 1.014 +- 0.010 [7 ] TO BT BT SC BT BT SA 7 86ccccd 10176 10318 0.98 0.986 +- 0.010 1.014 +- 0.010 [7 ] TO BT BT BT BT SC SA 8 89ccccd 7540 7710 1.90 0.978 +- 0.011 1.023 +- 0.012 [7 ] TO BT BT BT BT DR SA 9 8cccc55d 5976 5934 0.15 1.007 +- 0.013 0.993 +- 0.013 [8 ] TO RE RE BT BT BT BT SA 10 45d 5779 5766 0.01 1.002 +- 0.013 0.998 +- 0.013 [3 ] TO RE AB 11 8cccccccc9ccccd 5339 5269 0.46 1.013 +- 0.014 0.987 +- 0.014 [15] TO BT BT BT BT DR BT BT BT BT BT BT BT BT SA 12 8cc5ccd 5111 4940 2.91 1.035 +- 0.014 0.967 +- 0.014 [7 ] TO BT BT RE BT BT SA 13 46d 4797 4886 0.82 0.982 +- 0.014 1.019 +- 0.015 [3 ] TO SC AB 14 8cccc9ccccd 4494 4469 0.07 1.006 +- 0.015 0.994 +- 0.015 [11] TO BT BT BT BT DR BT BT BT BT SA 15 8cccccc6ccd 3317 3302 0.03 1.005 +- 0.017 0.995 +- 0.017 [11] TO BT BT SC BT BT BT BT BT BT SA 16 8cccc66d 2670 2675 0.00 0.998 +- 0.019 1.002 +- 0.019 [8 ] TO SC SC BT BT BT BT SA 17 49ccccd 2432 2383 0.50 1.021 +- 0.021 0.980 +- 0.020 [7 ] TO BT BT BT BT DR AB 18 4cccc6d 2043 1991 0.67 1.026 +- 0.023 0.975 +- 0.022 [7 ] TO SC BT BT BT BT AB 19 4cc6d 1755 1826 1.41 0.961 +- 0.023 1.040 +- 0.024 [5 ] TO SC BT BT AB . 1000000 1000000 371.33/355 = 1.05 (pval:0.265 prob:0.735) . pflags_ana 1:concentric -1:concentric c2 ab ba . 1000000 1000000 42.43/42 = 1.01 (pval:0.453 prob:0.547) 0 1880 669843 670001 0.02 1.000 +- 0.001 1.000 +- 0.001 [3 ] TO|BT|SA 1 1008 83950 84149 0.24 0.998 +- 0.003 1.002 +- 0.003 [2 ] TO|AB 2 18a0 79906 79434 1.40 1.006 +- 0.004 0.994 +- 0.004 [4 ] TO|BT|SA|SC 3 1808 54172 53846 0.98 1.006 +- 0.004 0.994 +- 0.004 [3 ] TO|BT|AB 4 1890 38515 38398 0.18 1.003 +- 0.005 0.997 +- 0.005 [4 ] TO|BT|SA|RE 5 1980 17710 17792 0.19 0.995 +- 0.007 1.005 +- 0.008 [4 ] TO|BT|DR|SA 6 1828 8788 9082 4.84 0.968 +- 0.010 1.033 +- 0.011 [4 ] TO|BT|SC|AB 7 1018 8200 8120 0.39 1.010 +- 0.011 0.990 +- 0.011 [3 ] TO|RE|AB 8 18b0 7902 7957 0.19 0.993 +- 0.011 1.007 +- 0.011 [5 ] TO|BT|SA|SC|RE 9 1818 6027 6157 1.39 0.979 +- 0.013 1.022 +- 0.013 [4 ] TO|BT|RE|AB 10 1908 5531 5410 1.34 1.022 +- 0.014 0.978 +- 0.013 [4 ] TO|BT|DR|AB 11 1028 5089 5208 1.38 0.977 +- 0.014 1.023 +- 0.014 [3 ] TO|SC|AB 12 19a0 4931 4972 0.17 0.992 +- 0.014 1.008 +- 0.014 [5 ] TO|BT|DR|SA|SC 13 1990 1482 1556 1.80 0.952 +- 0.025 1.050 +- 0.027 [5 ] TO|BT|DR|SA|RE 14 1838 1541 1550 0.03 0.994 +- 0.025 1.006 +- 0.026 [5 ] TO|BT|SC|RE|AB 15 1928 1056 1086 0.42 0.972 +- 0.030 1.028 +- 0.031 [5 ] TO|BT|DR|SC|AB 16 1920 789 744 1.32 1.060 +- 0.038 0.943 +- 0.035 [4 ] TO|BT|DR|SC 17 1038 769 785 0.16 0.980 +- 0.035 1.021 +- 0.036 [4 ] TO|SC|RE|AB 18 1918 628 599 0.69 1.048 +- 0.042 0.954 +- 0.039 [5 ] TO|BT|DR|RE|AB 19 1910 493 433 3.89 1.139 +- 0.051 0.878 +- 0.042 [4 ] TO|BT|DR|RE . 1000000 1000000 42.43/42 = 1.01 (pval:0.453 prob:0.547) Selecting mismatch using PFLAGS_DEBUG ------------------------------------------ The mask has a DR that does not appear in seqhis:: simon:ana blyth$ evt.py /Users/blyth/opticks/ana/evt.py [2016-11-23 15:28:36,111] p16560 {/Users/blyth/opticks/ana/evt.py:380} WARNING - t : 0.000 132.000 : tot 1000000 over 8 0.000 under 0 0.000 : mi 0.100 mx 192.303 [2016-11-23 15:28:36,647] p16560 {/Users/blyth/opticks/ana/evt.py:483} INFO - pflags2(=seq2msk(seqhis)) and pflags MISMATCH num_msk_mismatch: 2 . -1:concentric . 1000000 1.00 0 8ccccd 0.670 670001 [6 ] TO BT BT BT BT SA 1 4d 0.084 84149 [2 ] TO AB 2 8cccc6d 0.045 44770 [7 ] TO SC BT BT BT BT SA 3 4ccccd 0.029 28718 [6 ] TO BT BT BT BT AB 4 4ccd 0.023 23170 [4 ] TO BT BT AB 5 8cccc5d 0.020 20140 [7 ] TO RE BT BT BT BT SA 6 8cc6ccd 0.010 10357 [7 ] TO BT BT SC BT BT SA 7 86ccccd 0.010 10318 [7 ] TO BT BT BT BT SC SA 8 89ccccd 0.008 7710 [7 ] TO BT BT BT BT DR SA 9 8cccc55d 0.006 5934 [8 ] TO RE RE BT BT BT BT SA 10 45d 0.006 5766 [3 ] TO RE AB 11 8cccccccc9ccccd 0.005 5269 [15] TO BT BT BT BT DR BT BT BT BT BT BT BT BT SA 12 8cc5ccd 0.005 4940 [7 ] TO BT BT RE BT BT SA 13 46d 0.005 4886 [3 ] TO SC AB 14 8cccc9ccccd 0.004 4469 [11] TO BT BT BT BT DR BT BT BT BT SA 15 8cccccc6ccd 0.003 3302 [11] TO BT BT SC BT BT BT BT BT BT SA 16 8cccc66d 0.003 2675 [8 ] TO SC SC BT BT BT BT SA 17 49ccccd 0.002 2383 [7 ] TO BT BT BT BT DR AB 18 4cccc6d 0.002 1991 [7 ] TO SC BT BT BT BT AB 19 4cc6d 0.002 1826 [5 ] TO SC BT BT AB . 1000000 1.00 . -1:concentric . 2 1.00 0 c5cccccccc6ccccd 1.000 2 [16] TO BT BT BT BT SC BT BT BT BT BT BT BT BT RE BT . 2 1.00 . -1:concentric . 2 1.00 0 3243231323443231 0.500 1 [16] Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO LS Ac 1 3143231323443231 0.500 1 [16] Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO Gd Ac . 2 1.00 . -1:concentric . 2 1.00 0 1930 1.000 2 [5 ] TO|BT|DR|SC|RE . 2 1.00 --dindex=430603,521493 simon:ana blyth$ In [3]: b.sel = "PFLAGS_DEBUG" ; print b.his, b.mat, b.flg . -1:concentric . 2 1.00 0 c5cccccccc6ccccd 1.000 2 [16] TO BT BT BT BT SC BT BT BT BT BT BT BT BT RE BT . 2 1.00 . -1:concentric . 2 1.00 0 3243231323443231 0.500 1 [16] Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO LS Ac 1 3143231323443231 0.500 1 [16] Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO Gd Ac . 2 1.00 . -1:concentric . 2 1.00 0 1930 1.000 2 [5 ] TO|BT|DR|SC|RE . 2 1.00 In [4]: b.psel_dindex() Out[4]: '--dindex=430603,521493' Look at seqhis and seqmat within that mask, note that all are truncated and rejoined. Actually they must be truncated as no absorption in the mask AB/SA/SD, and as RE they must be rejoined. :: In [6]: b.selflg = "TO|BT|DR|SC|RE" ; print b.his[:10] ; print b.mat[:10] ; print b.flg . -1:concentric . 424 1.00 0 cccc65cccc9ccccd 0.050 21 [16] TO BT BT BT BT DR BT BT BT BT RE SC BT BT BT BT 1 cccc6cccc9cccc5d 0.040 17 [16] TO RE BT BT BT BT DR BT BT BT BT SC BT BT BT BT 2 cccc56cccc9ccccd 0.031 13 [16] TO BT BT BT BT DR BT BT BT BT SC RE BT BT BT BT 3 cccc5cccc9cccc6d 0.031 13 [16] TO SC BT BT BT BT DR BT BT BT BT RE BT BT BT BT 4 cccccccc9cccc65d 0.031 13 [16] TO RE SC BT BT BT BT DR BT BT BT BT BT BT BT BT 5 6cccc5cccc9ccccd 0.021 9 [16] TO BT BT BT BT DR BT BT BT BT RE BT BT BT BT SC 6 cccccccc9cccc56d 0.021 9 [16] TO SC RE BT BT BT BT DR BT BT BT BT BT BT BT BT 7 cc5cccccc9cccc6d 0.019 8 [16] TO SC BT BT BT BT DR BT BT BT BT BT BT RE BT BT 8 cccc5cccc96ccccd 0.019 8 [16] TO BT BT BT BT SC DR BT BT BT BT RE BT BT BT BT 9 cccc5cc6cc9ccccd 0.019 8 [16] TO BT BT BT BT DR BT BT SC BT BT RE BT BT BT BT . 424 1.00 . -1:concentric . 424 1.00 0 4323111323443231 0.080 34 [16] Gd Ac LS Ac MO MO Ac LS Ac Gd Gd Gd Ac LS Ac MO 1 4323113234432311 0.068 29 [16] Gd Gd Ac LS Ac MO MO Ac LS Ac Gd Gd Ac LS Ac MO 2 4323132344323111 0.052 22 [16] Gd Gd Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO 3 4432311323443231 0.028 12 [16] Gd Ac LS Ac MO MO Ac LS Ac Gd Gd Ac LS Ac MO MO 4 4322313234432311 0.026 11 [16] Gd Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS LS Ac MO 5 4323113223443231 0.026 11 [16] Gd Ac LS Ac MO MO Ac LS LS Ac Gd Gd Ac LS Ac MO 6 4323113234443231 0.026 11 [16] Gd Ac LS Ac MO MO MO Ac LS Ac Gd Gd Ac LS Ac MO 7 4322311323443231 0.024 10 [16] Gd Ac LS Ac MO MO Ac LS Ac Gd Gd Ac LS LS Ac MO 8 4323113234432231 0.019 8 [16] Gd Ac LS LS Ac MO MO Ac LS Ac Gd Gd Ac LS Ac MO 9 3231111323443231 0.019 8 [16] Gd Ac LS Ac MO MO Ac LS Ac Gd Gd Gd Gd Ac LS Ac . 424 1.00 . -1:concentric . 424 1.00 0 1930 1.000 424 [5 ] TO|BT|DR|SC|RE . 424 1.00 Dump first mismatch photon ---------------------------- :: tconcentric-;tconcentric-tt --dindex=430603 Note that there are multiple reemtracks but all past truncation. The seqhis and mask starts out correct from the first G4 track.. except there is no RE of course. :: 2016-11-23 12:45:18.488 INFO [1772513] [CTrackingAction::dump@186] CTrackingAction::setPhotonId --dindex record_id 430603 event_id 43 track_id 603 photon_id 603 parent_id -1 primary_id -2 reemtrack 0 2016-11-23 12:45:18.489 INFO [1772513] [CRecorder::dump@1218] CRecorder::posttrack 2016-11-23 12:45:18.489 INFO [1772513] [CRecorder::dump_brief@1230] CRecorder::dump_brief m_record_id 430603 m_badflag 0 --dindex 2016-11-23 12:45:18.489 INFO [1772513] [CRecorder::dump_brief@1238] seqhis c9cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT DR BT 2016-11-23 12:45:18.489 INFO [1772513] [CRecorder::dump_brief@1243] mskhis 1920 SC|DR|BT|TO 2016-11-23 12:45:18.489 INFO [1772513] [CRecorder::dump_brief@1248] seqmat 3443231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO MO Ac 2016-11-23 12:45:18.490 INFO [1772513] [CRecorder::dump_sequence@1257] CRecorder::dump_sequence 0 d TO 1 cd TO BT 2 ccd TO BT BT 3 cccd TO BT BT BT 4 ccccd TO BT BT BT BT 5 6ccccd TO BT BT BT BT SC 6 c6ccccd TO BT BT BT BT SC BT 7 cc6ccccd TO BT BT BT BT SC BT BT 8 ccc6ccccd TO BT BT BT BT SC BT BT BT 9 cccc6ccccd TO BT BT BT BT SC BT BT BT BT 10 ccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT 11 cccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT 12 ccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT 13 cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT 14 9cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT DR 15 c9cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT DR BT 0 1000 TO 1 1800 BT|TO 2 1800 BT|TO 3 1800 BT|TO 4 1800 BT|TO 5 1820 SC|BT|TO 6 1820 SC|BT|TO 7 1820 SC|BT|TO 8 1820 SC|BT|TO 9 1820 SC|BT|TO 10 1820 SC|BT|TO 11 1820 SC|BT|TO 12 1820 SC|BT|TO 13 1820 SC|BT|TO 14 1920 SC|DR|BT|TO 15 1920 SC|DR|BT|TO 0 1 Gd - - - - - - - - - - - - - - - 1 31 Gd Ac - - - - - - - - - - - - - - 2 231 Gd Ac LS - - - - - - - - - - - - - 3 3231 Gd Ac LS Ac - - - - - - - - - - - - 4 43231 Gd Ac LS Ac MO - - - - - - - - - - - 5 443231 Gd Ac LS Ac MO MO - - - - - - - - - - 6 3443231 Gd Ac LS Ac MO MO Ac - - - - - - - - - 7 23443231 Gd Ac LS Ac MO MO Ac LS - - - - - - - - 8 323443231 Gd Ac LS Ac MO MO Ac LS Ac - - - - - - - 9 1323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd - - - - - - 10 31323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac - - - - - 11 231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS - - - - 12 3231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac - - - 13 43231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO - - 14 443231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO MO - 15 3443231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO MO Ac Despite already being past truncation from the first track:: (12) BT/BT FrT [ 12](Stp ;opticalphoton stepNum 20(tk ;opticalphoton tid 604 pid 0 nm 430 mm ori[ 0.000 0.000 0.000] pos[ -1017.584-2339.954 666.007] ) pre sphere_phys Acrylic Transportation GeomBoundary pos[ -101.728 -3515.686 -1894.632] dir[ -0.741 -0.591 -0.318] pol[ 0.541 -0.807 0.237] ns 53.164 nm 430.000 mm/ns 192.780 post sphere_phys MineralOil Transportation GeomBoundary pos[ -112.461 -3524.239 -1899.241] dir[ -0.755 -0.577 -0.311] pol[ 0.529 -0.817 0.231] ns 53.239 nm 430.000 mm/ns 197.134 ) (13) BT/DR LaR MAT_SWAP [ 13](Stp ;opticalphoton stepNum 20(tk ;opticalphoton tid 604 pid 0 nm 430 mm ori[ 0.000 0.000 0.000] pos[ -1017.584-2339.954 666.007] ) pre sphere_phys MineralOil Transportation GeomBoundary pos[ -112.461 -3524.239 -1899.241] dir[ -0.755 -0.577 -0.311] pol[ 0.529 -0.817 0.231] ns 53.239 nm 430.000 mm/ns 197.134 post sphere_phys Acrylic Transportation GeomBoundary pos[ -1111.371 -4286.912 -2310.252] dir[ 0.023 0.541 0.841] pol[ -0.644 0.651 -0.401] ns 59.946 nm 430.000 mm/ns 197.134 ) (14) DR/NA STS POST_SKIP [ 14](Stp ;opticalphoton stepNum 20(tk ;opticalphoton tid 604 pid 0 nm 430 mm ori[ 0.000 0.000 0.000] pos[ -1017.584-2339.954 666.007] ) pre sphere_phys Acrylic Transportation GeomBoundary pos[ -1111.371 -4286.912 -2310.252] dir[ 0.023 0.541 0.841] pol[ -0.644 0.651 -0.401] ns 59.946 nm 430.000 mm/ns 197.134 post sphere_phys MineralOil Transportation GeomBoundary pos[ -1111.371 -4286.912 -2310.252] dir[ 0.023 0.541 0.841] pol[ -0.644 0.651 -0.401] ns 59.946 nm 430.000 mm/ns 197.134 ) (15) NA/BT FrT RECORD_TRUNCATE BOUNCE_TRUNCATE [ 15](Stp ;opticalphoton stepNum 20(tk ;opticalphoton tid 604 pid 0 nm 430 mm ori[ 0.000 0.000 0.000] pos[ -1017.584-2339.954 666.007] ) pre sphere_phys MineralOil Transportation GeomBoundary pos[ -1111.371 -4286.912 -2310.252] dir[ 0.023 0.541 0.841] pol[ -0.644 0.651 -0.401] ns 59.946 nm 430.000 mm/ns 197.134 post sphere_phys Acrylic Transportation GeomBoundary pos[ -1083.436 -3632.430 -1292.920] dir[ 0.030 0.553 0.832] pol[ -0.644 0.648 -0.408] ns 66.084 nm 430.000 mm/ns 192.780 ) (16) BT/BT FrT RECORD_TRUNCATE HARD_TRUNCATE [ 16](Stp ;opticalphoton stepNum 20(tk ;opticalphoton tid 604 pid 0 nm 430 mm ori[ 0.000 0.000 0.000] pos[ -1017.584-2339.954 666.007] ) pre sphere_phys Acrylic Transportation GeomBoundary pos[ -1083.436 -3632.430 -1292.920] dir[ 0.030 0.553 0.832] pol[ -0.644 0.648 -0.408] ns 66.084 nm 430.000 mm/ns 192.780 post sphere_phys uidScintillator Transportation GeomBoundary pos[ -1083.056 -3625.318 -1282.220] dir[ 0.028 0.550 0.834] pol[ -0.644 0.648 -0.406] ns 66.151 nm 430.000 mm/ns 194.519 ) (17) BT/BT FrT RECORD_TRUNCATE HARD_TRUNCATE [ 17](Stp ;opticalphoton stepNum 20(tk ;opticalphoton tid 604 pid 0 nm 430 mm ori[ 0.000 0.000 0.000] pos[ -1017.584-2339.954 666.007] ) pre sphere_phys uidScintillator Transportation GeomBoundary pos[ -1083.056 -3625.318 -1282.220] dir[ 0.028 0.550 0.834] pol[ -0.644 0.648 -0.406] ns 66.151 nm 430.000 mm/ns 194.519 post sphere_phys Acrylic Transportation GeomBoundary pos[ -1041.946 -2817.970 -58.457] dir[ 0.031 0.556 0.831] pol[ -0.644 0.647 -0.409] ns 73.691 nm 430.000 mm/ns 192.780 ) First reemtrack doesnt change anything as already in truncation (that is the policy ?):: 2016-11-23 12:45:18.494 INFO [1772513] [CTrackingAction::dump@186] CTrackingAction::setPhotonId --dindex record_id 430603 event_id 43 track_id 10893 photon_id 603 parent_id 603 primary_id -2 reemtrack 1 2016-11-23 12:45:18.494 INFO [1772513] [CRecorder::dump@1218] CRecorder::posttrack 2016-11-23 12:45:18.494 INFO [1772513] [CRecorder::dump_brief@1230] CRecorder::dump_brief m_record_id 430603 m_badflag 0 --dindex 2016-11-23 12:45:18.494 INFO [1772513] [CRecorder::dump_brief@1238] seqhis c9cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT DR BT 2016-11-23 12:45:18.494 INFO [1772513] [CRecorder::dump_brief@1243] mskhis 1920 SC|DR|BT|TO 2016-11-23 12:45:18.494 INFO [1772513] [CRecorder::dump_brief@1248] seqmat 3443231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO MO Ac 2016-11-23 12:45:18.494 INFO [1772513] [CRecorder::dump_sequence@1257] CRecorder::dump_sequence 0 d TO 1 cd TO BT 2 ccd TO BT BT 3 cccd TO BT BT BT 4 ccccd TO BT BT BT BT 5 6ccccd TO BT BT BT BT SC 6 c6ccccd TO BT BT BT BT SC BT 7 cc6ccccd TO BT BT BT BT SC BT BT 8 ccc6ccccd TO BT BT BT BT SC BT BT BT 9 cccc6ccccd TO BT BT BT BT SC BT BT BT BT 10 ccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT 11 cccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT 12 ccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT 13 cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT 14 9cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT DR 15 c9cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT DR BT 0 1000 TO 1 1800 BT|TO 2 1800 BT|TO 3 1800 BT|TO 4 1800 BT|TO 5 1820 SC|BT|TO 6 1820 SC|BT|TO 7 1820 SC|BT|TO 8 1820 SC|BT|TO 9 1820 SC|BT|TO 10 1820 SC|BT|TO 11 1820 SC|BT|TO 12 1820 SC|BT|TO 13 1820 SC|BT|TO 14 1920 SC|DR|BT|TO 15 1920 SC|DR|BT|TO Second reemtrack somehow manages to replace the DR BT with RE BT:: 2016-11-23 12:45:18.495 INFO [1772513] [CTrackingAction::dump@186] CTrackingAction::setPhotonId --dindex record_id 430603 event_id 43 track_id 10894 photon_id 603 parent_id 10893 primary_id 603 reemtrack 1 2016-11-23 12:45:18.495 INFO [1772513] [CRecorder::dump@1218] CRecorder::posttrack 2016-11-23 12:45:18.495 INFO [1772513] [CRecorder::dump_brief@1230] CRecorder::dump_brief m_record_id 430603 m_badflag 0 --dindex 2016-11-23 12:45:18.495 INFO [1772513] [CRecorder::dump_brief@1238] seqhis c5cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT RE BT 2016-11-23 12:45:18.495 INFO [1772513] [CRecorder::dump_brief@1243] mskhis 1930 RE|SC|DR|BT|TO 2016-11-23 12:45:18.496 INFO [1772513] [CRecorder::dump_brief@1248] seqmat 3143231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO Gd Ac 2016-11-23 12:45:18.496 INFO [1772513] [CRecorder::dump_sequence@1257] CRecorder::dump_sequence 0 d TO 1 cd TO BT 2 ccd TO BT BT 3 cccd TO BT BT BT 4 ccccd TO BT BT BT BT 5 6ccccd TO BT BT BT BT SC 6 c6ccccd TO BT BT BT BT SC BT 7 cc6ccccd TO BT BT BT BT SC BT BT 8 ccc6ccccd TO BT BT BT BT SC BT BT BT 9 cccc6ccccd TO BT BT BT BT SC BT BT BT BT 10 ccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT 11 cccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT 12 ccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT 13 cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT 14 9cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT DR 15 c9cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT DR BT 16 c5cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT RE BT 0 1000 TO 1 1800 BT|TO 2 1800 BT|TO 3 1800 BT|TO 4 1800 BT|TO 5 1820 SC|BT|TO 6 1820 SC|BT|TO 7 1820 SC|BT|TO 8 1820 SC|BT|TO 9 1820 SC|BT|TO 10 1820 SC|BT|TO 11 1820 SC|BT|TO 12 1820 SC|BT|TO 13 1820 SC|BT|TO 14 1920 SC|DR|BT|TO 15 1920 SC|DR|BT|TO 16 1930 RE|SC|DR|BT|TO Hmm vague recollection of some special casing to match rejoined flags.. Dump 2nd mismatch ------------------ Same story: * primary track already pushes to truncation * 1st reemtrack fails to change this but 2nd reemtrack manages to chane ending "DR BT" to "RE BT" :: tconcentric-tt --dindex=521493 2016-11-23 13:05:07.228 INFO [1776602] [CTrackingAction::dump@186] CTrackingAction::setPhotonId --dindex record_id 521493 event_id 52 track_id 1493 photon_id 1493 parent_id -1 primary_id -2 reemtrack 0 2016-11-23 13:05:07.228 INFO [1776602] [CRecorder::dump@1218] CRecorder::posttrack 2016-11-23 13:05:07.228 INFO [1776602] [CRecorder::dump_brief@1230] CRecorder::dump_brief m_record_id 521493 m_badflag 0 --dindex 2016-11-23 13:05:07.228 INFO [1776602] [CRecorder::dump_brief@1238] seqhis c9cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT DR BT 2016-11-23 13:05:07.228 INFO [1776602] [CRecorder::dump_brief@1243] mskhis 1920 SC|DR|BT|TO 2016-11-23 13:05:07.228 INFO [1776602] [CRecorder::dump_brief@1248] seqmat 3443231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO MO Ac 2016-11-23 13:05:07.228 INFO [1776602] [CRecorder::dump_sequence@1257] CRecorder::dump_sequence 0 d TO 1 cd TO BT 2 ccd TO BT BT 3 cccd TO BT BT BT 4 ccccd TO BT BT BT BT 5 6ccccd TO BT BT BT BT SC 6 c6ccccd TO BT BT BT BT SC BT 7 cc6ccccd TO BT BT BT BT SC BT BT 8 ccc6ccccd TO BT BT BT BT SC BT BT BT 9 cccc6ccccd TO BT BT BT BT SC BT BT BT BT 10 ccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT 11 cccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT 12 ccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT 13 cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT 14 9cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT DR 15 c9cccccccc6ccccd TO BT BT BT BT SC BT BT BT BT BT BT BT BT DR BT 0 1000 TO 1 1800 BT|TO 2 1800 BT|TO 3 1800 BT|TO 4 1800 BT|TO 5 1820 SC|BT|TO 6 1820 SC|BT|TO 7 1820 SC|BT|TO 8 1820 SC|BT|TO 9 1820 SC|BT|TO 10 1820 SC|BT|TO 11 1820 SC|BT|TO 12 1820 SC|BT|TO 13 1820 SC|BT|TO 14 1920 SC|DR|BT|TO 15 1920 SC|DR|BT|TO 0 1 Gd - - - - - - - - - - - - - - - 1 31 Gd Ac - - - - - - - - - - - - - - 2 231 Gd Ac LS - - - - - - - - - - - - - 3 3231 Gd Ac LS Ac - - - - - - - - - - - - 4 43231 Gd Ac LS Ac MO - - - - - - - - - - - 5 443231 Gd Ac LS Ac MO MO - - - - - - - - - - 6 3443231 Gd Ac LS Ac MO MO Ac - - - - - - - - - 7 23443231 Gd Ac LS Ac MO MO Ac LS - - - - - - - - 8 323443231 Gd Ac LS Ac MO MO Ac LS Ac - - - - - - - 9 1323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd - - - - - - 10 31323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac - - - - - 11 231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS - - - - 12 3231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac - - - 13 43231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO - - 14 443231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO MO - 15 3443231323443231 Gd Ac LS Ac MO MO Ac LS Ac Gd Ac LS Ac MO MO Ac Truncation handling ---------------------- :: 815 #ifdef USE_CUSTOM_BOUNDARY 816 bool CRecorder::RecordStepPoint(const G4StepPoint* point, unsigned int flag, unsigned int material, DsG4OpBoundaryProcessStatus boundary_status, const char* label) 817 #else 818 bool CRecorder::RecordStepPoint(const G4StepPoint* point, unsigned int flag, unsigned int material, G4OpBoundaryProcessStatus boundary_status, const char* label) 819 #endif 820 { 821 // NB this is used by both the live and non-live "canned" modes of recording 822 // 823 // Formerly at truncation, rerunning this overwrote "the top slot" 824 // of seqhis,seqmat bitfields (which are persisted in photon buffer) 825 // and the record buffer. 826 // As that is different from Opticks behaviour for the record buffer 827 // where truncation is truncation, a HARD_TRUNCATION has been adopted. ... 833 m_record_truncate = slot == m_steps_per_photon - 1 ; // hmm not exactly truncate, just top slot 834 if(m_record_truncate) m_step_action |= RECORD_TRUNCATE ; ... 845 unsigned long long shift = slot*4ull ; // 4-bits of shift for each slot 846 unsigned long long msk = 0xFull << shift ; 847 unsigned long long his = BBit::ffs(flag) & 0xFull ; 848 unsigned long long mat = material < 0xFull ? material : 0xFull ; 849 850 unsigned long long prior_mat = ( m_seqmat & msk ) >> shift ; 851 unsigned long long prior_his = ( m_seqhis & msk ) >> shift ; 852 unsigned long long prior_flag = 0x1 << (prior_his - 1) ; 853 854 if(m_record_truncate && prior_his != 0 && prior_mat != 0 ) // try to overwrite top slot 855 { 856 m_topslot_rewrite += 1 ; 857 LOG(info) 858 << ( m_topslot_rewrite > 1 ? HARD_TRUNCATE_ : TOPSLOT_REWRITE_ ) 859 << " topslot_rewrite " << m_topslot_rewrite 860 << " prior_flag -> flag " << OpticksFlags::Abbrev(prior_flag) 861 << " -> " << OpticksFlags::Abbrev(flag) 862 << " prior_mat -> mat " 863 << ( prior_mat == 0 ? "-" : m_material_bridge->getMaterialName(prior_mat-1, true) ) 864 << " -> " 865 << ( mat == 0 ? "-" : m_material_bridge->getMaterialName(mat-1, true) ) 866 ; 867 868 // allowing a single AB->RE rewrite is closer to Opticks 869 if(m_topslot_rewrite == 1 && flag == BULK_REEMIT && prior_flag == BULK_ABSORB) 870 { 871 m_step_action |= TOPSLOT_REWRITE ; 872 } 873 else 874 { 875 m_step_action |= HARD_TRUNCATE ; 876 return true ; 877 } 878 } ... 881 m_seqhis = (m_seqhis & (~msk)) | (his << shift) ; 882 m_seqmat = (m_seqmat & (~msk)) | (mat << shift) ; 883 m_mskhis |= flag ; 884 if(flag == BULK_REEMIT) m_mskhis = m_mskhis & (~BULK_ABSORB) ; ... 897 // Decrementing m_slot and running again will not scrub the AB from the mask 898 // so need to scrub the AB (BULK_ABSORB) when a RE (BULK_REEMIT) from rejoining 899 // occurs. 900 // 901 // Thus should always be correct as AB is a terminating flag, 902 // so any REJOINed photon will have an AB in the mask 903 // that needs to be a RE instead. 904 // 905 // What about SA/SD ... those should never REjoin ? 906 907 RecordStepPoint(slot, point, flag, material, label); 908 909 double time = point->GetGlobalTime(); 910 911 912 if(m_debug || m_other) Collect(point, flag, material, boundary_status, m_mskhis, m_seqhis, m_seqmat, time); 913 914 m_slot += 1 ; // m_slot is incremented regardless of truncation, only local *slot* is constrained to recording range 915 916 m_bounce_truncate = m_slot > m_bounce_max ; 917 if(m_bounce_truncate) m_step_action |= BOUNCE_TRUNCATE ; 918 919 920 bool done = m_bounce_truncate || m_record_truncate || absorb ; 921 922 if(done && m_dynamic) 923 { 924 m_records->add(m_dynamic_records); 925 } 926 927 return done ; 928 }