@@ -363,10 +363,21 @@ def inrange(tf, l):
363363 freq = mode (getLog ('Fermi_Speed' ))
364364 except ValueError :
365365 return []
366- phase1 , phase2 = (mode (getLog (nam )) for nam in ['Phase_Thick_1' , 'Phase_Thick_2' ])
367366 delay = getfracLog ('Fermi_delay' )
368367 lmc = 10.04 # Moderator-Fermi distance
369368 period = 1.e6 / freq
369+ try :
370+ phase1 , phase2 = (mode (getLog (nam )) for nam in ['Phase_Thick_1' , 'Phase_Thick_2' ])
371+ except RuntimeError :
372+ # Pre-upgrade MARI - single slot disk
373+ phase_disk = mode (getLog ('Phase_Thick' )) + 500 # Offset used in mari_utils.gcl
374+ eis_disk = ((2286.26 * 7.05 ) / (phase_disk ))** 2
375+ if mode (getLog ('Freq_Thick' )) > 0 or (run .hasProperty ('nchannels' ) and run .getProperty ('nchannels' ).value > 1000 ):
376+ return [eis_disk ]
377+ else :
378+ delay_calc = ((2286.26 * lmc ) / np .sqrt (eis_disk ))
379+ eis = list ({((2286.26 * lmc ) / (delay_calc + s * period ))** 2 for s in range (- 10 , 10 )})
380+ return [roundlog10 (ei ) for ei in np .sort (eis )[::- 1 ] if ei > 10 ]
370381 try :
371382 ei_nominal = mode (getLog ('Ei_nominal' ))
372383 except RuntimeError : # Old file
@@ -381,10 +392,10 @@ def inrange(tf, l):
381392 disk_delta = delt_disk2 - delt_disk1
382393 slots_delta = np .round (disk_delta / 202.11 ) / 10
383394 assert slots_delta % 1.0 < 0.2 , 'Bad slots calculation'
384- slots = {0 :[0 ,1 ,2 ,4 ], 1 :[0 ,1 ], 2 :[0 ,2 ], 4 :[0 ]}[abs (int (slots_delta ))]
395+ slots = {0 :[0 ,1 ,2 ,4 ], 1 :[0 ,1 ], 2 :[0 ,2 ], 3 :[ 0 ], 4 :[0 ]}[abs (int (slots_delta ))]
385396 disk_ref = 6 - (np .round (delt_disk1 / 202.11 ) / 10 )
386397 assert disk_ref % 1.0 < 0.2 , f'Bad disk calculation'
387- disk = {0 :disk_ref , 1 :disk_ref - 1 , 2 :1 if disk_ref == 2 else 0 , 4 :0 }[abs (int (slots_delta ))]
398+ disk = {0 :disk_ref , 1 :disk_ref - 1 , 2 :1 if disk_ref == 2 else 0 , 3 : 0 , 4 :0 }[abs (int (slots_delta ))]
388399 reps = [d - disk for d in slots ]
389400 eis_disk = {((2286.26 * lmc ) / (delay_calc + s * 2500. ))** 2 for s in reps }
390401 period = period / 2. if 'G' in chopper_type .upper () else period
@@ -432,9 +443,11 @@ def inrange(tf, l):
432443 ldc = 9.2176 # Mod-Disk distance
433444 if not rrm_mode :
434445 return [roundlog10 (((2286.26 * ldc ) / disk_delay )** 2 )]
435- else : # Assume using Gd chopper (t_offset = 2000/freq-5, for 'S' it is 300/freq-8)
446+ else : # Assume using Gd chopper (t_offset = 2000/freq-5, for 'S' it is 300/freq-8.1)
447+ # The opto on the Fermi was replaced on 28/11/24 - need to use different constants
448+ m , c = (2000 , - 5 ) if run .endTime ().to_datetime64 () < np .datetime64 ('2024-11-27' ) else (6483 , - 5.5 )
436449 period = 20000 * (25. / freq )
437- tof = (2286.26 * lmc ) / np .sqrt (roundlog10 (((2286.26 * lmc ) / (delay - 2000 / freq - 2 ))** 2 ))
450+ tof = (2286.26 * lmc ) / np .sqrt (roundlog10 (((2286.26 * lmc ) / (delay - m / freq - c ))** 2 ))
438451 tfmx = 7500 if np .abs (disk_delay - 12400 ) < 10 else 8500
439452 return [roundlog10 (((2286.26 * lmc ) / tf )** 2 ) for tf in [(tof + s * period ) for s in range (- 10 , 10 )] if tf > 1500 and tf < tfmx ]
440453
0 commit comments