def selector(self, array_kind='TWELVE-M', prj_status=("Ready", "InProgress"), sb_status=("Ready", "Suspended", "Running", "CalibratorCheck", "Waiting"), cycle=("2013.A", "2013.1", "2015.1", "2015.A"), letterg=("A", "B", "C"), bands=("ALMA_RB_03", "ALMA_RB_04", "ALMA_RB_06", "ALMA_RB_07", "ALMA_RB_08", "ALMA_RB_09", "ALMA_RB_10"), check_count=True, conf=None, calc_blratio=False, numant=None, array_id=None, horizon=20., minha=-3., maxha=3., pwv=0.): """ :param array_kind: :param prj_status: :param sb_status: :param cycle: :param letterg: :param bands: :param check_count: :param conf: :param calc_blratio: :param numant: :param array_id: :param horizon: :param minha: :param maxha: :param pwv: :param mintrans: :return: """ if float(pwv) > 8: pwv = 8.0 print self._time_astropy self._aggregate_dfs() self.master_wto_df['array'] = self.master_wto_df.apply( lambda x: 'SEVEN-M' if x['array'] == "ACA" else x['array'], axis=1 ) self.selection_df = self.master_wto_df[['SB_UID']].copy() # select array kind self.selection_df['selArray'] = ( self.master_wto_df['array'] == array_kind) # select valid Prj States self.selection_df['selPrjState'] = ( self.master_wto_df.apply( lambda x: True if x['PRJ_STATUS'] in prj_status else False, axis=1)) # select valid SB States self.selection_df['selSBState'] = ( self.master_wto_df.apply( lambda x: True if x['SB_STATE'] in sb_status else False, axis=1)) # select By grades self.selection_df['selGrade'] = ( self.master_wto_df.apply( lambda x: True if x['CYCLE'] in cycle and x['DC_LETTER_GRADE'] in letterg else False, axis=1) ) # select by band self.selection_df['selBand'] = ( self.master_wto_df.apply( lambda x: True if x['band'] in bands else False, axis=1 ) ) # select if still some observations are left self.selection_df['selCount'] = True if check_count: self.selection_df['selCount'] = ( self.master_wto_df.EXECOUNT > self.master_wto_df.Observed) self.selection_df['selConf'] = True # Array Configuraton Selection (12m) if array_kind == "TWELVE-M": self.master_wto_df['blmax'] = self.master_wto_df.apply( lambda row: rUV.compute_bl(row['minAR'] / 0.8, 100.), axis=1) self.master_wto_df['blmin'] = self.master_wto_df.apply( lambda row: rUV.compute_bl(row['LAScor'], 100., las=True), axis=1) if conf: qstring = '' l = len(conf) - 1 for i, c in enumerate(conf): col = c.replace('-', '_') if i == l: qstring += '%s == "%s"' % (col, c) else: qstring += '%s == "%s" or ' % (col, c) sbs_sel = self.master_wto_df.query(qstring).SB_UID.unique() self.selection_df['selConf'] = self.selection_df.apply( lambda x: True if x['SB_UID'] in sbs_sel else False, axis=1 ) self.master_wto_df['bl_ratio'] = 1. self.master_wto_df['array_ar_cond'] = self.master_wto_df.apply( lambda x: CONFRES[x['BestConf']] if x['BestConf'] in conf else pd.np.NaN, axis=1 ) self.master_wto_df['num_bl_use'] = 630. if calc_blratio: try: array_id = self.bl_arrays.iloc[0, 3] except AttributeError: self._query_array() array_id = self.bl_arrays.iloc[0, 3] array_ar, num_bl, num_ant, ruv = self._get_bl_prop(array_id) self.master_wto_df[['array_ar_cond', 'num_bl_use']] = ( self.master_wto_df.apply( lambda x: self._get_sbbased_bl_prop( ruv, x['blmin'] * 0.9, x['blmax'] * 1.1), axis=1) ) self.master_wto_df['bl_ratio'] = self.master_wto_df.apply( lambda x: calc_bl_ratio( x['array'], x['CYCLE'], x['num_bl_use'], self.selection_df.ix[x.name, 'selConf']), axis=1 ) else: if array_id == 'last': self._query_array() array_id = self.bl_arrays.iloc[0, 3] ar, numbl, numant, ruv = self._get_bl_prop(array_id) self.master_wto_df[['array_ar_cond', 'num_bl_use']] = ( self.master_wto_df.apply( lambda x: self._get_sbbased_bl_prop( ruv, x['blmin'] * 0.9, x['blmax'] * 1.1), axis=1) ) self.selection_df['selConf'] = self.master_wto_df.apply( lambda x: True if (x['array_ar_cond'] > x['minAR']) and (x['array_ar_cond'] < x['maxAR']) else False, axis=1 ) self.master_wto_df['bl_ratio'] = self.master_wto_df.apply( lambda x: calc_bl_ratio( x['array'], x['CYCLE'], x['num_bl_use'], self.selection_df.ix[x.name, 'selConf']), axis=1 ) # Array Configuration Selection (7m or ACA) elif array_kind == "SEVEN-M": if numant is None: numant = 10. self.selection_df['selConf'] = self.master_wto_df.apply( lambda x: True if x['array'] == "SEVEN-M" else False, axis=1 ) self.master_wto_df['blmax'] = pd.np.NaN self.master_wto_df['blmin'] = pd.np.NaN self.master_wto_df['array_ar_cond'] = pd.np.NaN self.master_wto_df['num_bl_use'] = pd.np.NaN self.master_wto_df['bl_ratio'] = self.master_wto_df.apply( lambda x: calc_bl_ratio( x['array'], x['CYCLE'], x['num_bl_use'], self.selection_df.ix[x.name, 'selConf'], numant=numant), axis=1 ) # Array Configuration selection (TP) else: if numant is None: numant = 10. self.selection_df['selConf'] = self.master_wto_df.apply( lambda x: True if x['array'] == "TP-Array" else False, axis=1 ) self.master_wto_df['blmax'] = pd.np.NaN self.master_wto_df['blmin'] = pd.np.NaN self.master_wto_df['array_ar_cond'] = pd.np.NaN self.master_wto_df['num_bl_use'] = pd.np.NaN self.master_wto_df['bl_ratio'] = 1. # select observable: elev, ha, moon & sun distance try: c = SkyCoord( ra=self.master_wto_df.RA*u.degree, dec=self.master_wto_df.DEC*u.degree, location=ALMA, obstime=self._time_astropy) except IndexError: print("Nothing to observe? %s" % len(self.master_wto_df)) self._availableobs = False return ha = self._time_astropy.sidereal_time('apparent') - c.ra self.master_wto_df['HA'] = ha.wrap_at(180*u.degree).value self.master_wto_df['RAh'] = c.ra.hour self.master_wto_df['elev'] = c.transform_to( AltAz(obstime=self._time_astropy, location=ALMA)).alt.value corr_el = ((self.master_wto_df.ephem != 'N/A') & (self.master_wto_df.ephem != 'OK')) self.master_wto_df.ix[corr_el, 'elev'] = -90. self.master_wto_df.ix[corr_el, 'HA'] = -24. self.selection_df['selElev'] = ( self.master_wto_df.elev >= horizon) self.selection_df['selHA'] = ( (self.master_wto_df.HA >= minha) & (self.master_wto_df.HA <= maxha) ) # Sel Conditions, exec. frac ind1 = pd.np.around(self.master_wto_df.repfreq, decimals=1) pwv_str = (str(int(pwv / 0.05) * 0.05 + (0.05 if (pwv % 0.05) > 0.02 else 0.))) self.master_wto_df['transmission'] = self.pwvdata.ix[ ind1, pwv_str].values self.master_wto_df['tau'] = self.tau.ix[ind1, pwv_str].values self.master_wto_df['tsky'] = self.tsky.ix[ind1, pwv_str].values self.master_wto_df['airmass'] = self.master_wto_df.apply( lambda x: calc_airmass(x['elev'], transit=False), axis=1) self.master_wto_df['tsys'] = ( self.master_wto_df.apply( lambda x: calc_tsys(x['band'], x['tsky'], x['tau'], x['airmass']), axis=1)) self.master_wto_df['tsys_ratio'] = self.master_wto_df.apply( lambda x: (x['tsys'] / x['tsys_ot'])**2. if x['tsys'] <= 25000. else pd.np.inf, axis=1) self.master_wto_df['Exec. Frac'] = self.master_wto_df.apply( lambda x: 1 / (x['bl_ratio'] * x['tsys_ratio']) if (x['bl_ratio'] * x['tsys_ratio']) <= 100. else 0., axis=1) self.master_wto_df.set_index('SB_UID', drop=False, inplace=True) self.selection_df.set_index('SB_UID', drop=False, inplace=True) savedate = ALMA1.date savehoriz = ALMA1.horizon ALMA1.horizon = 0.0 lstdate = str(ALMA1.sidereal_time()).split(':') lstdate0 = dt.datetime.strptime( '2014-12-31 ' + str(lstdate[0]) + ':' + str(lstdate[1]), '%Y-%m-%d %H:%M') lstdate1 = dt.datetime.strptime( '2015-01-01 ' + str(lstdate[0]) + ':' + str(lstdate[1]), '%Y-%m-%d %H:%M') lstdate2 = dt.datetime.strptime( '2015-01-02 ' + str(lstdate[0]) + ':' + str(lstdate[1]), '%Y-%m-%d %H:%M') sunrisedate = ALMA1.previous_rising(ephem.Sun()) ALMA1.date = sunrisedate sunriselst = str(ALMA1.sidereal_time()).split(':') sunriselst_h = dt.datetime.strptime( '2015-01-01 ' + str(sunriselst[0]) + ':' + str(sunriselst[1]), '%Y-%m-%d %H:%M') sunsetdate = ALMA1.next_setting(ephem.Sun()) ALMA1.date = sunsetdate sunsetlst = str(ALMA1.sidereal_time()).split(':') sunsetlst_h = dt.datetime.strptime( '2015-01-01 ' + str(sunsetlst[0]) + ':' + str(sunriselst[1]), '%Y-%m-%d %H:%M') self.inputs = pd.DataFrame( pd.np.array([lstdate0, lstdate1, lstdate2, sunsetlst_h - dt.timedelta(1), sunriselst_h, sunsetlst_h, sunriselst_h + dt.timedelta(1)]), index=['lst0', 'lst1', 'lst2', 'set1', 'rise1', 'set2', 'rise2'], columns=['2013.A']).transpose() self.inputs.ix['2013.1', :] = self.inputs.ix['2013.A', :] self.inputs.ix['2015.A', :] = self.inputs.ix['2013.A', :] self.inputs.ix['2015.1', :] = self.inputs.ix['2013.A', :] ALMA1.date = savedate ALMA1.horizon = savehoriz
def selector(self, array_kind='TWELVE-M', prj_status=("Ready", "InProgress"), sb_status=("Ready", "Suspended", "Running", "CalibratorCheck", "Waiting"), letterg=("A", "B", "C"), bands=("ALMA_RB_03", "ALMA_RB_04", "ALMA_RB_06", "ALMA_RB_07", "ALMA_RB_08", "ALMA_RB_09", "ALMA_RB_10"), check_count=True, conf=None, calc_blratio=False, numant=None, array_id=None, horizon=20., minha=-3., maxha=3., pwv=0., sim=False): """ Args: array_kind: prj_status: sb_status: letterg: bands: check_count: conf: calc_blratio: numant: array_id: horizon: minha: maxha: pwv: sim: """ if float(pwv) > 8: pwv = 8.0 # print self._time_astropy if sim: self._aggregate_dfs(sim=True) else: self._aggregate_dfs() self.master_dsa_df['array'] = self.master_dsa_df.apply( lambda x: 'SEVEN-M' if x['array'] == "ACA" else x['array'], axis=1 ) self.master_dsa_df['isToo'] = self.master_dsa_df.apply( lambda x: True if str(x['CODE']).endswith('.T') else False, axis=1 ) self.selection_df = self.master_dsa_df[['SB_UID']].copy() # select array kind self.selection_df['selArray'] = ( self.master_dsa_df['array'] == array_kind) # select valid Prj States self.selection_df['selPrjState'] = ( self.master_dsa_df.apply( lambda x: True if x['PRJ_STATUS'] in prj_status else False, axis=1)) # select valid SB States self.selection_df['selSBState'] = ( self.master_dsa_df.apply( lambda x: True if x['SB_STATE'] in sb_status else False, axis=1)) # select By grades sbuid_ex = self.exception_df.SB_UID.unique() self.selection_df['selGrade'] = ( self.master_dsa_df.apply( lambda x: True if (x['CYCLE'] in ["2015.1", "2015.A"] and x['DC_LETTER_GRADE'] in letterg) or (x['CYCLE'] not in ["2015.1", "2015.A"] and x['DC_LETTER_GRADE'] == "A") or (x['SB_UID'] in sbuid_ex) else False, axis=1) ) # select by band self.selection_df['selBand'] = ( self.master_dsa_df.apply( lambda x: True if x['band'] in bands else False, axis=1 ) ) if not sim: self.selection_df = self.selection_df.query( 'selArray == True and selPrjState == True and ' 'selSBState == True and selGrade == True and selBand == True') sb_fsel = self.selection_df.SB_UID.unique() self.master_dsa_df = self.master_dsa_df.query('SB_UID in @sb_fsel') # select if still some observations are left self.selection_df['selCount'] = True if check_count: self.selection_df['selCount'] = ( self.master_dsa_df.EXECOUNT > self.master_dsa_df.Observed) self.selection_df['selConf'] = True # Array Configuration Selection (12m) if array_kind == "TWELVE-M": self.master_dsa_df['blmax'] = self.master_dsa_df.apply( lambda row: rUV.compute_bl(row['minAR'] / 0.8, 100.), axis=1) self.master_dsa_df['blmin'] = self.master_dsa_df.apply( lambda row: rUV.compute_bl(row['LAScor'], 100., las=True) if ((row['LAScor'] > row['minAR']) and (row['LAScor'] > 5 * row['ARcordec'])) else rUV.compute_bl(10., 100., las=True), axis=1) if conf: # Not Working For Exceptions!!! qstring = '' l = len(conf) - 1 for i, c in enumerate(conf): col = c.replace('-', '_') if i == l: qstring += '%s == "%s"' % (col, c) else: qstring += '%s == "%s" or ' % (col, c) sbs_sel = self.master_dsa_df.query(qstring).SB_UID.unique() self.selection_df['selConf'] = self.selection_df.apply( lambda x: True if (x['SB_UID'] in sbs_sel) or ((x['lenconf'] > 0) and (x['minAR'] <= self.ar <= x['maxAR'])) else False, axis=1 ) self.ar = CONFRES[conf[0]] self.master_dsa_df['bl_ratio'] = 1. self.master_dsa_df['array_ar_cond'] = self.master_dsa_df.apply( lambda x: CONFRES[x['BestConf']] if x['BestConf'] in conf else pd.np.NaN, axis=1 ) self.master_dsa_df['num_bl_use'] = 630. if calc_blratio: self._query_array() array_id = self.arrays.iloc[0, 3] array_ar, num_bl, num_ant, ruv = self._get_bl_prop(array_id) self.master_dsa_df[['array_ar_cond', 'num_bl_use']] = ( self.master_dsa_df.apply( lambda x: self._get_sbbased_bl_prop( ruv, x['blmin'] * 0.9, x['blmax'] * 1.1, x['array']), axis=1) ) self.master_dsa_df['bl_ratio'] = self.master_dsa_df.apply( lambda x: 1. / calc_bl_ratio( x['array'], x['CYCLE'], x['num_bl_use'], self.selection_df.ix[x.name, 'selConf']), axis=1 ) else: self._query_array() try: a = self._last_array_used except AttributeError: self._last_array_used = '' if array_id == 'last': array_id = self.arrays.iloc[0, 3] if self._last_array_used == array_id: self.master_dsa_df['array_ar_cond'] = \ self.arr_cache['array_ar_cond'] self.master_dsa_df['num_bl_use'] = \ self.arr_cache['num_bl_use'] else: self.ar, numbl, numant, ruv = self._get_bl_prop(array_id) self.master_dsa_df[['array_ar_cond', 'num_bl_use']] = ( self.master_dsa_df.apply( lambda x: self._get_sbbased_bl_prop( ruv, x['blmin'] * 0.9, x['blmax'] * 1.1, x['array']), axis=1) ) self.arr_cache = self.master_dsa_df[ ['array_ar_cond', 'num_bl_use']].copy() self._last_array_used = array_id self.selection_df['selConf'] = self.master_dsa_df.apply( lambda x: True if ((x['array_ar_cond'] > x['minAR']) and (self.ar > 0.5 * x['ARcordec']) and (x['array_ar_cond'] < (x['maxAR'] * 1.3)) and (x['array_ar_cond'] < (x['ARcordec'] * 1.15))) or ((x['lenconf'] > 2) and (x['minAR'] <= self.ar) and (self.ar <= x['maxAR']) and (x['array'] == "TWELVE-M")) else False, axis=1) self.master_dsa_df['bl_ratio'] = self.master_dsa_df.apply( lambda x: 1. / calc_bl_ratio( x['array'], x['CYCLE'], x['num_bl_use'], self.selection_df.ix[x.name, 'selConf']), axis=1 ) # Array Configuration Selection (7m or ACA) elif array_kind == "SEVEN-M": if numant is None: numant = 10. self.selection_df['selConf'] = self.master_dsa_df.apply( lambda x: True if x['array'] == "SEVEN-M" else False, axis=1 ) self.master_dsa_df['blmax'] = pd.np.NaN self.master_dsa_df['blmin'] = pd.np.NaN self.master_dsa_df['array_ar_cond'] = pd.np.NaN self.master_dsa_df['num_bl_use'] = pd.np.NaN self.master_dsa_df['bl_ratio'] = self.master_dsa_df.apply( lambda x: 1. / calc_bl_ratio( x['array'], x['CYCLE'], x['num_bl_use'], self.selection_df.ix[x.name, 'selConf'], numant=numant), axis=1 ) # Array Configuration selection (TP) else: if numant is None: numant = 2. # Until we have a clear idea on how to handle TP ampcals, removing # them from the DSA output # noinspection PyUnusedLocal selsb = self.master_dsa_df.query( 'array == "TP-Array"').SB_UID.unique() selsb1 = self.master_dsa_df[ self.master_dsa_df.sbNote.str.contains('TP ampcal') ].SB_UID.unique() selsb2 = pd.merge( pd.merge( self.data.orderedtar.query('SB_UID in @selsb'), self.data.target, on=['SB_UID', 'targetId']), self.data.fieldsource, on=['SB_UID', 'fieldRef']).query( 'name_y == "Amplitude"').SB_UID.unique() self.selection_df['selConf'] = self.master_dsa_df.apply( lambda x: True if (x['array'] == "TP-Array") and ((x['SB_UID'] not in selsb1) and (x['SB_UID'] not in selsb2)) else False, axis=1 ) self.master_dsa_df['blmax'] = pd.np.NaN self.master_dsa_df['blmin'] = pd.np.NaN self.master_dsa_df['array_ar_cond'] = pd.np.NaN self.master_dsa_df['num_bl_use'] = pd.np.NaN self.master_dsa_df['bl_ratio'] = 1. # select observable: elev, ha, moon & sun distance polarization = self.master_dsa_df.query('PolCalibrator != ""').copy() try: cpol = SkyCoord( ra=polarization.RA_pol * u.degree, dec=polarization.DEC_pol * u.degree, location=ALMA, obstime=self._time_astropy) except IndexError: cpol = polarization.copy() try: c = SkyCoord( ra=self.master_dsa_df.RA * u.degree, dec=self.master_dsa_df.DEC * u.degree, location=ALMA, obstime=self._time_astropy) except IndexError: print("Nothing to observe? %s" % len(self.master_dsa_df)) self._availableobs = False return ha = self._time_astropy.sidereal_time('apparent') - c.ra self.master_dsa_df['HA'] = ha.wrap_at(180 * u.degree).value self.master_dsa_df['RAh'] = c.ra.hour self.master_dsa_df['elev'] = c.transform_to( AltAz(obstime=self._time_astropy, location=ALMA)).alt.value corr_el = ((self.master_dsa_df.ephem != 'N/A') & (self.master_dsa_df.ephem != 'OK')) self.master_dsa_df.ix[corr_el, 'elev'] = -90. self.master_dsa_df.ix[corr_el, 'HA'] = -24. self.selection_df['selElev'] = ( (self.master_dsa_df.elev >= horizon) & (self.master_dsa_df.RA != 0) & (self.master_dsa_df.DEC != 0) ) self.selection_df.set_index('SB_UID', drop=False, inplace=True) if len(cpol) > 0: ha = self._time_astropy.sidereal_time('apparent') - cpol.ra polarization['HA_pol'] = ha.wrap_at(180 * u.degree).value polarization['RAh_pol'] = cpol.ra.hour polarization['elev_pol'] = cpol.transform_to( AltAz(obstime=self._time_astropy, location=ALMA)).alt.value parall = pd.np.arctan( pd.np.sin(ha.radian) / (pd.np.tan(ALMA.latitude.radian) * pd.np.cos(cpol.dec.radian) - pd.np.sin(cpol.dec.radian) * pd.np.cos(ha.radian) )) polarization['parallactic'] = pd.np.degrees(parall) corr_el = ((polarization.ephem != 'N/A') & (polarization.ephem != 'OK')) polarization.ix[corr_el, 'elev_pol'] = -90. polarization.ix[corr_el, 'HA_pol'] = -24. self.polarization = polarization self.selection_df.loc[ polarization[polarization.elev_pol < 20].SB_UID.values, 'selElev'] = False self.selection_df['selHA'] = ( (self.master_dsa_df.set_index('SB_UID').HA >= minha) & (self.master_dsa_df.set_index('SB_UID').HA <= maxha) ) # Sel Conditions, exec. frac ind1 = pd.np.around(self.master_dsa_df.repfreq, decimals=1) pwv_str = (str(int(pwv / 0.05) * 0.05 + (0.05 if (int(pwv * 100) % 5) > 2 else 0.))) self.master_dsa_df['transmission'] = self.pwvdata.ix[ ind1, pwv_str].values self.master_dsa_df['tau'] = self.tau.ix[ind1, pwv_str].values self.master_dsa_df['tsky'] = self.tsky.ix[ind1, pwv_str].values self.master_dsa_df['airmass'] = self.master_dsa_df.apply( lambda x: calc_airmass(x['elev'], transit=False), axis=1) self.master_dsa_df['tsys'] = ( self.master_dsa_df.apply( lambda x: calc_tsys(x['band'], x['tsky'], x['tau'], x['airmass']), axis=1)) self.master_dsa_df['tsys_ratio'] = self.master_dsa_df.apply( lambda x: 1. / (x['tsys'] / x['tsys_ot'])**2. if x['tsys'] <= 25000. else 0., axis=1) self.master_dsa_df['Exec. Frac'] = self.master_dsa_df.apply( lambda x: (x['bl_ratio'] * x['tsys_ratio']) if (x['bl_ratio'] * x['tsys_ratio']) <= 100. else 0., axis=1) self.selection_df['selCond'] = self.master_dsa_df.set_index( 'SB_UID').apply( lambda x: True if x['Exec. Frac'] >= 0.70 else False, axis=1 ) self.master_dsa_df.set_index('SB_UID', drop=False, inplace=True) self.selection_df.set_index('SB_UID', drop=False, inplace=True) savedate = ALMA1.date savehoriz = ALMA1.horizon ALMA1.horizon = 0.0 lstdate = str(ALMA1.sidereal_time()).split(':') lstdate0 = dt.datetime.strptime( '2014-12-31 ' + str(lstdate[0]) + ':' + str(lstdate[1]), '%Y-%m-%d %H:%M') lstdate1 = dt.datetime.strptime( '2015-01-01 ' + str(lstdate[0]) + ':' + str(lstdate[1]), '%Y-%m-%d %H:%M') lstdate2 = dt.datetime.strptime( '2015-01-02 ' + str(lstdate[0]) + ':' + str(lstdate[1]), '%Y-%m-%d %H:%M') sunrisedate = ALMA1.previous_rising(ephem.Sun()) ALMA1.date = sunrisedate sunriselst = str(ALMA1.sidereal_time()).split(':') sunriselst_h = dt.datetime.strptime( '2015-01-01 ' + str(sunriselst[0]) + ':' + str(sunriselst[1]), '%Y-%m-%d %H:%M') sunsetdate = ALMA1.next_setting(ephem.Sun()) ALMA1.date = sunsetdate sunsetlst = str(ALMA1.sidereal_time()).split(':') sunsetlst_h = dt.datetime.strptime( '2015-01-01 ' + str(sunsetlst[0]) + ':' + str(sunriselst[1]), '%Y-%m-%d %H:%M') self.inputs = pd.DataFrame( pd.np.array([lstdate0, lstdate1, lstdate2, sunsetlst_h, sunriselst_h, sunsetlst_h + dt.timedelta(1), sunriselst_h + dt.timedelta(1)]), index=['lst0', 'lst1', 'lst2', 'set1', 'rise1', 'set2', 'rise2'], columns=['2013.A']).transpose() self.inputs.ix['2013.1', :] = self.inputs.ix['2013.A', :] self.inputs.ix['2015.A', :] = self.inputs.ix['2013.A', :] self.inputs.ix['2015.1', :] = self.inputs.ix['2013.A', :] ALMA1.date = savedate ALMA1.horizon = savehoriz