def test_suffix_removal(suffix, enable_logging): """Test suffix removal""" basename = 'file' full_fpath = basename + '_' + suffix removed_path, separator = s.remove_suffix(full_fpath) assert removed_path == basename assert separator == '_'
def make_fixedslit_bkg(self): """Add a background to a MIR_lrs-fixedslit observation""" for product in self['products']: members = product['members'] # Split out the science exposures science_exps = [ member for member in members if member['exptype'] == 'science' ] # Create new members for each science exposure in the association, # using the the base name + _x1d as background. results = [] # Loop over all science exposures in the association for science_exp in science_exps: sci_name = science_exp['expname'] science_exp['expname'] = sci_name # Construct the name for the background file bkg_name = remove_suffix( splitext(split(science_exp['expname'])[1])[0])[0] bkg_name = bkg_name + '_x1d.fits' now_background = Member(science_exp) now_background['expname'] = bkg_name now_background['exptype'] = 'background' # Add the background file to the association table members.append(now_background) if self.is_valid: results.append(self) return results
def make_nod_asns(self): """Make background nod Associations For observing modes, such as NIRSpec MSA, exposures can be nodded, such that the object is in a different position in the slitlet. The association creation simply groups these all together as a single association, all exposures marked as `science`. When complete, this method will create separate associations each exposure becoming the single science exposure, and the other exposures then become `background`. Returns ------- associations: [association[, ...]] List of new associations to be used in place of the current one. """ for product in self['products']: members = product['members'] # Split out the science vs. non-science # The non-science exposures will get attached # to every resulting association. science_exps = [ member for member in members if member['exptype'] == 'science' ] nonscience_exps = [ member for member in members if member['exptype'] != 'science' ] # Create new associations for each science, using # the other science as background. results = [] for science_exp in science_exps: asn = copy.deepcopy(self) asn.data['products'] = None product_name = remove_suffix( splitext(split(science_exp['expname'])[1])[0])[0] asn.new_product(product_name) new_members = asn.current_product['members'] new_members.append(science_exp) for other_science in science_exps: if other_science['expname'] != science_exp['expname']: now_background = copy.copy(other_science) now_background['exptype'] = 'background' new_members.append(now_background) new_members += nonscience_exps if asn.is_valid: results.append(asn) return results
def dms_product_name(self): """Define product name.""" try: science = self.members_by_type('science')[0] except IndexError: return PRODUCT_NAME_DEFAULT try: science_path, ext = splitext(science['expname']) except Exception: return PRODUCT_NAME_DEFAULT no_suffix_path, separator = remove_suffix(science_path) return no_suffix_path
def make_fixedslit_bkg(self): """Add a background to a MIR_lrs-fixedslit observation""" # check to see if these are nodded backgrounds, if they are setup # the background members, otherwise return the original association # to test for the string 'nod' we need to copy and pop the value out of the set if 'nod' not in self.constraints['patttype_spectarg'].found_values.copy().pop(): results = [] results.append(self) return results for product in self['products']: members = product['members'] # Split out the science exposures science_exps = [ member for member in members if member['exptype'] == 'science' ] # if there is only one science observation it cannot be the background # return with original association. if len(science_exps) < 2: return results # Create new members for each science exposure in the association, # using the the base name + _x1d as background. results = [] # Loop over all science exposures in the association for science_exp in science_exps: sci_name = science_exp['expname'] science_exp['expname'] = sci_name # Construct the name for the background file bkg_name = remove_suffix( splitext(split(science_exp['expname'])[1])[0])[0] bkg_name = bkg_name+'_x1d.fits' now_background = Member(science_exp) now_background['expname'] = bkg_name now_background['exptype'] = 'background' # Add the background file to the association table members.append(now_background) if self.is_valid: results.append(self) return results
def make_nod_asns(self): """Make background nod Associations For observing modes, such as NIRSpec MSA, exposures can be nodded, such that the object is in a different position in the slitlet. The association creation simply groups these all together as a single association, all exposures marked as `science`. When complete, this method will create separate associations each exposure becoming the single science exposure, and the other exposures then become `background`. Returns ------- associations : [association[, ...]] List of new associations to be used in place of the current one. """ for product in self['products']: members = product['members'] # Split out the science vs. non-science # The non-science exposures will get attached # to every resulting association. science_exps = [ member for member in members if member['exptype'] == 'science' ] nonscience_exps = [ member for member in members if member['exptype'] != 'science' ] # Create new associations for each science, using # the other science as background. results = [] for science_exp in science_exps: asn = copy.deepcopy(self) asn.data['products'] = None product_name = remove_suffix( splitext(split(science_exp['expname'])[1])[0] )[0] asn.new_product(product_name) new_members = asn.current_product['members'] new_members.append(science_exp) for other_science in science_exps: if other_science['expname'] != science_exp['expname']: now_background = copy.copy(other_science) now_background['exptype'] = 'background' new_members.append(now_background) new_members += nonscience_exps if asn.is_valid: results.append(asn) return results