@@ -580,14 +580,26 @@ def make_cube(
580580 logger = get_run_logger ()
581581
582582 logger .info (f"Creating cube for { pol = } { image_set .ms = } " )
583- image_list = image_set .image_lists [pol ]
583+ image_list = [ Path ( i ) for i in image_set .image_lists [pol ] ]
584584
585585 image_type = "restored" if aux_mode is None else aux_mode
586586
587+ # Create a cube name
588+ old_name = image_list [0 ]
589+ out_dir = os .path .dirname (old_name )
590+ old_base = os .path .basename (old_name )
591+ new_base = old_base
592+ b_idx = new_base .find ("beam" ) + len ("beam" ) + 2
593+ sub = new_base [b_idx :]
594+ new_base = new_base .replace (sub , ".conv.fits" )
595+ new_base = new_base .replace ("image" , f"image.{ image_type } .{ pol .lower ()} " )
596+ new_name = Path (out_dir ) / new_base
597+
587598 # First combine images into cubes
588- hdu_list , freqs = combine_fits (file_list = image_list , create_blanks = True )
589- new_header = hdu_list [0 ].header
590- data_cube = hdu_list [0 ].data
599+ _ = combine_fits (file_list = image_list , out_cube = new_name , create_blanks = True )
600+ with fits .open (new_name , mode = "denywrite" , memmap = True ) as hdu_list :
601+ new_header = hdu_list [0 ].header
602+ data_cube = hdu_list [0 ].data
591603
592604 # Add pol angle to header
593605 new_header ["INSTRUMENT_RECEPTOR_ANGLE" ] = (
@@ -610,16 +622,6 @@ def make_cube(
610622 # Calculate rms noise
611623 rmss_arr = mad_std (data_cube , axis = (1 , 2 , 3 ), ignore_nan = True )
612624
613- # Create a cube name
614- old_name = image_list [0 ]
615- out_dir = os .path .dirname (old_name )
616- old_base = os .path .basename (old_name )
617- new_base = old_base
618- b_idx = new_base .find ("beam" ) + len ("beam" ) + 2
619- sub = new_base [b_idx :]
620- new_base = new_base .replace (sub , ".conv.fits" )
621- new_base = new_base .replace ("image" , f"image.{ image_type } .{ pol .lower ()} " )
622- new_name = os .path .join (out_dir , new_base )
623625 # Deserialise beam
624626 with open (common_beam_pkl , "rb" ) as f :
625627 common_beam = pickle .load (f )
@@ -633,9 +635,9 @@ def make_cube(
633635 # 0 1234.5
634636 # 1 6789.0
635637 # etc.
636- new_w_name = new_name . replace (
637- f"image.{ image_type } " , f"weights.{ image_type } "
638- ).replace ( ".fits" , ".txt" )
638+ new_w_name = Path (
639+ new_name . as_posix (). replace ( f"image.{ image_type } " , f"weights.{ image_type } " )
640+ ).with_suffix ( ".txt" )
639641 data = dict (
640642 Channel = np .arange (len (rmss_arr )),
641643 Weight = 1 / rmss_arr ** 2 , # Want inverse variance
0 commit comments