@@ -347,6 +347,7 @@ def __init__(self, npx_input_dir: str, ks_output_dir: str,
347
347
self ._json_directory = self ._ks_output_dir / 'json_configs'
348
348
self ._json_directory .mkdir (parents = True , exist_ok = True )
349
349
350
+ self ._median_subtraction_finished = False
350
351
self .ks_input_params = None
351
352
self ._modules_input_hash = None
352
353
self ._modules_input_hash_fp = None
@@ -372,15 +373,7 @@ def generate_modules_input_json(self):
372
373
373
374
self ._module_input_json = self ._json_directory / f'{ self ._npx_input_dir .name } -input.json'
374
375
375
- if 'median_subtraction' in self ._modules :
376
- # median subtraction step will overwrite original continuous.dat file with the corrected version
377
- # to preserve the original raw data - make a copy here and work on the copied version
378
- assert 'depth_estimation' in self ._modules
379
- raw_ap_fp = self ._npx_input_dir / 'continuous.dat'
380
- continuous_file = self ._npx_input_dir / 'preproc_continuous.dat'
381
- shutil .copy2 (raw_ap_fp , continuous_file )
382
- else :
383
- continuous_file = self ._npx_input_dir / 'continuous.dat'
376
+ continuous_file = self ._get_raw_data_filepaths ()
384
377
385
378
params = {}
386
379
for k , v in self ._params .items ():
@@ -422,7 +415,14 @@ def run_modules(self):
422
415
if module_status ['completion_time' ] is not None :
423
416
continue
424
417
425
- module_output_json = self ._get_module_output_json_filename (module )
418
+ if module == 'median_subtraction' and self ._median_subtraction_finished :
419
+ self ._update_module_status (
420
+ {module : {'start_time' : datetime .utcnow (),
421
+ 'completion_time' : datetime .utcnow (),
422
+ 'duration' : 0 }})
423
+ continue
424
+
425
+ module_output_json = self ._get_module_output_json_filename (module )
426
426
command = [sys .executable ,
427
427
'-W' , 'ignore' , '-m' , 'ecephys_spike_sorting.modules.' + module ,
428
428
'--input_json' , module_input_json ,
@@ -443,6 +443,33 @@ def run_modules(self):
443
443
444
444
self ._update_total_duration ()
445
445
446
+ def _get_raw_data_filepaths (self ):
447
+ if 'median_subtraction' not in self ._modules :
448
+ return self ._npx_input_dir / 'continuous.dat'
449
+
450
+ # median subtraction step will overwrite original continuous.dat file with the corrected version
451
+ # to preserve the original raw data - make a copy here and work on the copied version
452
+ assert 'depth_estimation' in self ._modules
453
+ raw_ap_fp = self ._npx_input_dir / 'continuous.dat'
454
+ continuous_file = self ._ks_output_dir / 'continuous.dat'
455
+ if continuous_file .exists ():
456
+ if raw_ap_fp .stat ().st_mtime < continuous_file .stat ().st_mtime :
457
+ # if the copied continuous.dat was actually modified,
458
+ # median_subtraction may have been completed - let's check
459
+ module_input_json = self ._module_input_json .as_posix ()
460
+ module_logfile = module_input_json .replace ('-input.json' , '-run_modules-log.txt' )
461
+ with open (module_logfile , 'r' ) as f :
462
+ previous_line = ''
463
+ for line in f .readlines ():
464
+ if (line .startswith ('ecephys spike sorting: median subtraction module' )
465
+ and previous_line .startswith ('Total processing time:' )):
466
+ self ._median_subtraction_finished = True
467
+ return continuous_file
468
+ previous_line = line
469
+
470
+ shutil .copy2 (raw_ap_fp , continuous_file )
471
+ return continuous_file
472
+
446
473
def _update_module_status (self , updated_module_status = {}):
447
474
if self ._modules_input_hash is None :
448
475
raise RuntimeError ('"generate_modules_input_json()" not yet performed!' )
0 commit comments