def __init__(self, channels=None, efftype='R', include_preFLS=True, include_repointings=False): if include_preFLS == False: raise Exception('Not including preFLS is not currently supported') self.include_preFLS = include_preFLS self.include_repointings = include_repointings self.channels = parse_channels(channels) if self.channels is None: self.f = None else: self.f = self.channels[0].f self.config = {} self.config['database'] = private.database self.config['breaks'] = private.TOAST['breaks'] if self.channels is None: self.config['exchangefolder'] = None else: self.config['exchangefolder'] = private.exchangefolder[self.f.inst.name] self.config['ahf_folder'] = private.AHF self.config['exclude_454_455'] = True self.efftype = efftype self.ring_range = None self.obt_range = [1e30, -1e30]
def __init__(self, odrange=None, channels=None, nside=1024, ordering='RING', coord='E', outmap='outmap.fits', exchange_folder=None, fpdb=None, output_xml='toastrun.xml', ahf_folder=None, components='IQU', obtmask=None, flagmask=None, log_level=l.INFO, remote_exchange_folder=None, remote_ahf_folder=None, calibration_file=None, dipole_removal=False, noise_tod=False, noise_tod_weight=None, efftype=None, flag_HFI_bad_rings=None, include_preFLS=False, ptcorfile=None, include_repointings=False, psd=None, deaberrate=True, extend_857=False, no_wobble=False, eff_is_for_flags=False, exchange_weights=None, beamsky=None, beamsky_weight=None, interp_order=5, horn_noise_tod=None, horn_noise_weight=None, horn_noise_psd=None, observation_is_interval=False, lfi_ring_range=None, hfi_ring_range=None, wobble_high=False): """TOAST configuration: odrange: list of start and end OD, AHF ODS, i.e. with whole pointing periods as the DPC is using lfi_ring_range: first and last LFI pointing ID to include hfi_ring_range: first and last HFI ring number to include channels: one of integer frequency, channel string, list of channel strings obtmask and flagmask: default LFI 1,255 HFI 1,1 exchange_folder: either a string or a container or strings listing locations for Exchange Format data exchange_weights: list of scaling factors to apply to Exchange data prior to coadding eff_is_for_flags : only use Exchange data for flags remote_exchange_folder, remote_ahf_folder: they allow to run toast.py in one environment using ahf_folder and exchange_folder and then replace the path with the remote folders calibration_file: path to a fits calibration file, with first extension OBT, then one extension per channel with the calibration factors dipole_removal: dipole removal is performed ONLY if calibration is specified noise_tod: Add simulated noise TODs noise_tod_weight: scaling factor to apply to noise_tod flag_HFI_bad_rings: if None, flagged just for HFI. If a valid file, use that as input. include_preFLS : if None, True for LFI include_repointings : Construct intervals with the 4 minute repointing maneuvers: 10% dataset increase, continuous time stamps psd : templated name of an ASCII PSD files. Tag CHANNEL will be replaced with the appropriate channel identifier. horn_noise_tod : False horn_noise_weight : None horn_noise_psd : templated name of an ASCII PSD files. Tag HORN will be replaced with the appropriate identifier. deaberrate : Correct pointing for aberration extend_857 : Whether or not to include the RTS bolometer, 857-4 in processing no_wobble : Disable all flavors of wobble angle correction wobble_high : Use 8Hz wobble correction rather than per ring beamsky : templated name of the beamsky files for OTF sky convolution. Tag CHANNEL will be replaced with the appropriate channel identifier. beamsky_weight : scaling factor to apply to the beamsky interp_order : beamsky interpolation order defines number of cartesian pixels to interpolate over observation_is_interval : If True, do not split operational days into pointing period intervals additional configuration options are available modifying: .config and Data Selector configuration: .data_selector.config dictionaries before running .run() """ l.root.level = log_level self.extend_857 = extend_857 if self.extend_857: if '857-4' in EXCLUDED_CH: EXCLUDED_CH.remove('857-4') if sum([odrange!=None, lfi_ring_range!=None, hfi_ring_range!=None]) != 1: raise Exception('Must specify exactly one type of data span: OD, LFI PID or HFI ring') self.odrange = odrange self.lfi_ring_range = lfi_ring_range self.hfi_ring_range = hfi_ring_range self.nside = nside self.coord = coord self.ordering = ordering self.outmap = outmap if channels == None: raise Exception('Must define which channels to include') self.channels = parse_channels(channels) self.f = self.channels[0].f self.output_xml = output_xml self.ptcorfile = ptcorfile if no_wobble and wobble_high: raise Exception('no_wobble and wobble_high are mutually exclusive') self.no_wobble = no_wobble self.wobble_high = wobble_high self.include_repointings = include_repointings self.deaberrate = deaberrate self.noise_tod = noise_tod self.noise_tod_weight = noise_tod_weight self.psd = psd self.horn_noise_tod = horn_noise_tod self.horn_noise_weight = horn_noise_weight self.horn_noise_psd = horn_noise_psd if self.horn_noise_tod and not self.horn_noise_psd: raise Exception('Must specify horn_noise_psd template name when enabling horn_noise') self.fpdb = fpdb or private.rimo[self.f.inst.name] self.beamsky = beamsky self.beamsky_weight = beamsky_weight self.interp_order = interp_order self.observation_is_interval = observation_is_interval self.rngorder = { 'LFI18M' : 0, 'LFI18S' : 1, 'LFI19M' : 2, 'LFI19S' : 3, 'LFI20M' : 4, 'LFI20S' : 5, 'LFI21M' : 6, 'LFI21S' : 7, 'LFI22M' : 8, 'LFI22S' : 9, 'LFI23M' : 10, 'LFI23S' : 11, 'LFI24M' : 12, 'LFI24S' : 13, 'LFI25M' : 14, 'LFI25S' : 15, 'LFI26M' : 16, 'LFI26S' : 17, 'LFI27M' : 18, 'LFI27S' : 19, 'LFI28M' : 20, 'LFI28S' : 21, '100-1a' : 22, '100-1b' : 23, '100-2a' : 24, '100-2b' : 25, '100-3a' : 26, '100-3b' : 27, '100-4a' : 28, '100-4b' : 29, '143-1a' : 30, '143-1b' : 31, '143-2a' : 32, '143-2b' : 33, '143-3a' : 34, '143-3b' : 35, '143-4a' : 36, '143-4b' : 37, '143-5' : 38, '143-6' : 39, '143-7' : 40, '143-8' : 41, '217-5a' : 42, '217-5b' : 43, '217-6a' : 44, '217-6b' : 45, '217-7a' : 46, '217-7b' : 47, '217-8a' : 48, '217-8b' : 49, '217-1' : 50, '217-2' : 51, '217-3' : 52, '217-4' : 53, '353-3a' : 54, '353-3b' : 55, '353-4a' : 56, '353-4b' : 57, '353-5a' : 58, '353-5b' : 59, '353-6a' : 60, '353-6b' : 61, '353-1' : 62, '353-2' : 63, '353-7' : 64, '353-8' : 65, '545-1' : 66, '545-2' : 67, '545-3' : 68, '545-4' : 69, '857-1' : 70, '857-2' : 71, '857-3' : 72, '857-4' : 73, 'LFI18' : 74, 'LFI19' : 75, 'LFI20' : 76, 'LFI21' : 77, 'LFI22' : 78, 'LFI23' : 79, 'LFI24' : 80, 'LFI25' : 81, 'LFI26' : 82, 'LFI27' : 83, 'LFI28' : 84, '100-1' : 85, '100-2' : 86, '100-3' : 87, '100-4' : 88, '143-1' : 89, '143-2' : 90, '143-3' : 91, '143-4' : 92, '217-5' : 93, '217-6' : 94, '217-7' : 95, '217-8' : 96, '353-3' : 97, '353-4' : 98, '353-5' : 99, '353-6' : 100, } self.config = {} if self.f.inst.name == 'LFI': self.config['pairflags'] = True else: self.config['pairflags'] = False if efftype is None: efftype ='R' if self.f.inst.name == 'LFI' and (not calibration_file is None): efftype ='C' self.data_selector = DataSelector(channels=self.channels, efftype=efftype, include_preFLS=include_preFLS) self.exchange_weights = exchange_weights if remote_exchange_folder: if isinstance(remote_exchange_folder, str): remote_exchange_folder = [remote_exchange_folder] if remote_exchange_folder[-1] != '/': remote_exchange_folder += '/' self.remote_exchange_folder = remote_exchange_folder if remote_ahf_folder: if remote_ahf_folder[-1] != '/': remote_ahf_folder += '/' self.remote_ahf_folder = remote_ahf_folder if exchange_folder: if isinstance(exchange_folder, str): exchange_folder = [exchange_folder] self.exchange_folder = exchange_folder self.data_selector.config[ 'exchangefolder' ] = exchange_folder[0] if ahf_folder: self.data_selector.config['ahf_folder'] = ahf_folder if self.odrange: self.data_selector.by_od_range(self.odrange) elif self.lfi_ring_range: self.data_selector.by_lfi_rings(self.lfi_ring_range) elif self.hfi_ring_range: self.data_selector.by_hfi_rings(self.hfi_ring_range) else: raise Exception('Must specify one type of data span') self.wobble = private.WOBBLE self.components = components self.obtmask = obtmask or DEFAULT_OBTMASK[self.f.inst.name] self.flagmask = flagmask or DEFAULT_FLAGMASK[self.f.inst.name] self.calibration_file = calibration_file self.dipole_removal = dipole_removal if flag_HFI_bad_rings is None: if self.f.inst.name == 'HFI': flag_HFI_bad_rings = True else: flag_HFI_bad_rings = False if flag_HFI_bad_rings: if ( os.path.isfile(str(flag_HFI_bad_rings)) ): self.bad_rings = flag_HFI_bad_rings else: self.bad_rings = private.HFI_badrings else: self.bad_rings = None self.eff_is_for_flags = eff_is_for_flags self.fptab = None