Пример #1
0
	def test_station_martime_mobile_flag(self):
		self.assertEqual(Station("DH1TW/MM").mm, True)
		self.assertEqual(Station("DH1TW/MM").valid, False)
		self.assertEqual(Station("DH1TW/MM").prefix, False)
		self.assertEqual(Station("VP2M/DH1TW/MM").mm, True)
		self.assertEqual(Station("VP2M/DH1TW/MM").valid, False)
		self.assertEqual(Station("VP2M/DH1TW").valid, True)
		self.assertEqual(Station("VP2M/DH1TW").mm, False)
		self.assertEqual(Station("R7GA/MM").valid, False)
		self.assertEqual(Station("R7GA/MM").prefix, False)
		self.assertEqual(Station("R7GA/MM").mm, True)
Пример #2
0
	def test_station_beacon_flag(self):
		self.assertEqual(Station("DH1TW/BCN").beacon, True)
		self.assertEqual(Station("DH1TW/BCN").valid, True)
		self.assertEqual(Station("DH1TW/B").beacon, True)
		self.assertEqual(Station("DH1TW/B").valid, True)
		self.assertEqual(Station("VP2M/DH1TW/BCN").valid, True)
		self.assertEqual(Station("VP2M/DH1TW/BCN").beacon, True)
		self.assertEqual(Station("VP2M/DH1TW").beacon, False)
Пример #3
0
	def test_station_aerotime_mobile_flag(self):
		self.assertEqual(Station("DH1TW/AM").am, True)
		self.assertEqual(Station("DH1TW/AM").valid, False)
		self.assertEqual(Station("VP2M/DH1TW/AM").am, True)
		self.assertEqual(Station("VP2M/DH1TW/AM").valid, False)
		self.assertEqual(Station("VP2M/DH1TW").valid, True)
		self.assertEqual(Station("VP2M/DH1TW").am, False)
Пример #4
0
	def test_station_number_appendix(self):
		self.assertEqual(Station("DH1TW/EA3").prefix, "EA")
		self.assertEqual(Station("YB9IR/3").prefix, "YB3")
		self.assertEqual(Station("UA9MAT/1").prefix, "U")		
		self.assertEqual(Station("W3LPL/5").prefix, "W5")
		self.assertEqual(Station("UA9KRM/3").prefix, "U")
		self.assertEqual(Station("UR900CC/4").prefix, "UR")
Пример #5
0
	def test_station_invalid_calls_with_special_characters(self):
		self.assertEqual(Station("DK()DK").valid, False)
		self.assertEqual(Station("DK/DK").valid, False)
		self.assertEqual(Station("'!$&/()@").valid, False)
		self.assertEqual(Station("").valid, False)
Пример #6
0
	def test_station_mobile(self):
		self.assertEqual(Station("VK3/DH1TW/M").valid, True)
		self.assertEqual(Station("VK3/DH1TW/M").prefix, "VK")	
Пример #7
0
	def test_station_lighthouse(self):
		self.assertEqual(Station("DH1TW/LH").valid, True)
		self.assertEqual(Station("DH1TW/LH").prefix, "DH")
		self.assertEqual(Station("UR7GO/P/LH").valid, True)
		self.assertEqual(Station("UR7GO/P/LH").prefix, "UR")
Пример #8
0
	def test_station_portable(self):
		self.assertEqual(Station("MM/DH1TW/P").valid, True)
		self.assertEqual(Station("MM/DH1TW/P").prefix, "MM")
Пример #9
0
	def test_station_with_invalid_calls(self):
		self.assertEqual(Station("DH").valid, False)
		self.assertEqual(Station("DH1").valid, False)		
		self.assertEqual(Station("DH1TW/012").valid, False)
		self.assertEqual(Station("01A/DH1TW").valid, False)
		self.assertEqual(Station("01A/DH1TW/P").valid, False)
		self.assertEqual(Station("01A/DH1TW/MM").valid, False)
		self.assertEqual(Station("QSL").valid, False)
		self.assertEqual(Station("QRV").valid, False)
		self.assertEqual(Station("T0NTO").valid, False)
		self.assertEqual(Station("T0ALL").valid, False)
		self.assertEqual(Station("H1GHMUF").valid, False)
		self.assertEqual(Station("C1BBI").valid, False)
		self.assertEqual(Station("PU1MHZ/QAP").valid, False)
		self.assertEqual(Station("DU7/PA0").valid, False)
		self.assertEqual(Station("DIPLOMA").valid, False)		
		self.assertEqual(Station("CQAS").valid, False)
		self.assertEqual(Station("IK2SAV/P1").valid, False)
		self.assertEqual(Station("IKOFTA").valid, False)
		self.assertEqual(Station("SP2/SP3").valid, False)
		self.assertEqual(Station("CQ").valid, False)
		self.assertEqual(Station("RADAR").valid, False)
		self.assertEqual(Station("MUF/INFO").valid, False)
		self.assertEqual(Station("RAVIDEO").valid, False)
		self.assertEqual(Station("PIRATE").valid, False)
		self.assertEqual(Station("XE1/H").valid, False)
		self.assertEqual(Station("Z125VZ").valid, False)
		self.assertEqual(Station("ZD6DYA").prefix, False)		
		self.assertEqual(Station("ZD6DYA").valid, False)
		self.assertEqual(Station("F5BUU1").valid, False)
		self.assertEqual(Station("0").valid, False)
		self.assertEqual(Station("0123456789").valid, False)
		self.assertEqual(Station("CD43000").valid, False)	
		self.assertEqual(Station("GN").valid, False)	
		self.assertEqual(Station("GN").homecall, False)	
		self.assertEqual(Station("ARABS").homecall, False)	
		self.assertEqual(Station("2320900").valid, False)	
		self.assertEqual(Station("ITT9APL").valid, False)
	#	self.assertEqual(Station("EA5/G0K").valid, False)
		self.assertEqual(Station("MUF").valid, False)
Пример #10
0
	def test_station_with_valid_calls(self):
		self.assertEqual(Station("DH1T").prefix, "DH")
		self.assertEqual(Station("DH1TW/P").prefix, "DH")
		self.assertEqual(Station("DH1TW/MM").prefix, False)
		self.assertEqual(Station("DH1TW/AM").prefix, False)
		self.assertEqual(Station("DH1TW/VP5").prefix, "VP5")
		self.assertEqual(Station("VP5/DH1TW").prefix, "VP5")
		self.assertEqual(Station("VP5/DH1TW/P").prefix, "VP5")
		self.assertEqual(Station("MM/DH1TW/P").prefix, "MM")
		self.assertEqual(Station("DH1TW/QRP").prefix, "DH")
		self.assertEqual(Station("DH1TW/QRPP").prefix, "DH")		
		self.assertEqual(Station("MM/DH1TW/QRP").prefix, "MM")
		self.assertEqual(Station("MM/DH1TW/QRPP").prefix, "MM")
		self.assertEqual(Station("MM/DH1TW/B").prefix, "MM")
		self.assertEqual(Station("MM/DH1TW/BCN").prefix, "MM")
		self.assertEqual(Station("EA1/DH1TW").prefix, "EA")
		self.assertEqual(Station("EA1/DH1TW/P").prefix, "EA")
		self.assertEqual(Station("DH1TW/EA1").prefix, "EA")
		self.assertEqual(Station("DH1TW/EA").prefix, "EA")
		self.assertEqual(Station("VP2E/AL1O/P").prefix, "VP2E")
		self.assertEqual(Station("VP2E/DL2001IRTA/P").prefix, "VP2E")
		self.assertEqual(Station("CD4300").prefix, "CD")
		self.assertEqual(Station("CD4300").country, "Chile")		
		self.assertEqual(Station("CD4300").homecall, "CD4300")
		self.assertEqual(Station("DH1TW/EA8/QRP").prefix, "EA8")
		self.assertEqual(Station("W0ERE/B").prefix, "W0")
		self.assertEqual(Station("W0ERE/B").valid, True)
		self.assertEqual(Station("ER/KL1A").prefix, "ER")
		self.assertEqual(Station("DL4SDW/HI3").prefix, "HI")
		self.assertEqual(Station("SV9/M1PAH/HH").prefix, 'SV9')
		self.assertEqual(Station("8J3XVIII").prefix, '8J')
		self.assertEqual(Station("DL4SDW/HI3").prefix, 'HI')
		self.assertEqual(Station("9A28HQ").prefix, '9A')
		self.assertEqual(Station("RU27TT").prefix, 'R')
		self.assertEqual(Station("UE90K").prefix, 'UE9')
		self.assertEqual(Station("DL2000ALMK").prefix, 'DL')
		self.assertEqual(Station("HF450NS").prefix, "HF")	
		self.assertEqual(Station("GB558VUL").prefix, "G")	
		self.assertEqual(Station("F/ON5OF").prefix, 'F')
		self.assertEqual(Station("OX1A/OZ1ABC").prefix, "OX")
		self.assertEqual(Station("OX1A/OZ").prefix, "OZ")
		self.assertEqual(Station("OZ5V").prefix, "OZ")
		self.assertEqual(Station("OV9DV").prefix, "OV")
		self.assertEqual(Station("CQ59HQ").prefix, "CQ")
		self.assertEqual(Station("RW3DQC/1/P").prefix, "R")
		self.assertEqual(Station("RW3DQC/1/P").homecall, "RW3DQC")
		self.assertEqual(Station("DB0SUE-10").prefix, "DB")
		self.assertEqual(Station("DK0WYC-2").prefix, "DK")
		self.assertEqual(Station("DK0WYC-2").valid, True)
		self.assertEqual(Station("G0KTD/P").prefix, "G")
Пример #11
0
	def test_station_all_properties_with_a_valid_call(self):
		self.assertEqual(Station("HC2/DH1TW/P").prefix, "HC")
		self.assertEqual(Station("HC2/DH1TW/P").valid, True)
		self.assertEqual(Station("HC2/DH1TW/P").call, "HC2/DH1TW/P")
		self.assertEqual(Station("HC2/DH1TW/P").homecall, "DH1TW")
		self.assertEqual(Station("HC2/DH1TW/P").country, "Ecuador")
		self.assertEqual(Station("HC2/DH1TW/P").latitude, -1.4)
		self.assertEqual(Station("HC2/DH1TW/P").longitude, 78.4)
		self.assertEqual(Station("HC2/DH1TW/P").cqz, 10)
		self.assertEqual(Station("HC2/DH1TW/P").ituz, 12)
		self.assertEqual(Station("HC2/DH1TW/P").continent, "SA")
		self.assertEqual(Station("HC2/DH1TW/P").mm, False)
		self.assertEqual(Station("HC2/DH1TW/P").beacon, False)
		self.assertEqual(Station("HC2/DH1TW/P").am, False)
Пример #12
0
def get_deltasnr_bycall(callsign_sorted_byspots,
                        data_bycallsign_dict,
                        dist_dict,
                        timestamp_start,
                        timestamp_stop,
                        antenna_rotation_time,
                        reporter_list,
                        common_ts_bycall,
                        rx_offset,
                        topn=-1,
                        plot_flag=False,
                        country=False):
    if plot_flag:
        ax = plt.figure(figsize=(26, 20))
    deltasnr_bycall_dict = {}
    for call in callsign_sorted_byspots[:topn]:
        timeseries = common_ts_bycall[call]
        if len(timeseries) == 0:
            continue
        unixtime_list = [
            get_unixtime(
                data_bycallsign_dict[call][reporter_list[0]][el[0]][0])
            for el in timeseries
        ]
        snr_list_0 = [
            data_bycallsign_dict[call][reporter_list[0]][el[0]][2]
            for el in timeseries
        ]
        snr_list_1 = [
            data_bycallsign_dict[call][reporter_list[1]][el[1]][2]
            for el in timeseries
        ]

        unixtime_list, snr_list_0, snr_list_1 = (list(t) for t in zip(
            *sorted(zip(unixtime_list, snr_list_0, snr_list_1),
                    key=lambda k: k[0],
                    reverse=False)))
        datetime_list = [
            datetime.datetime.fromtimestamp(ts) for ts in unixtime_list
        ]
        deltasnr_list = [
            snr_1 - snr_0 - rx_offset
            for snr_0, snr_1 in zip(snr_list_0, snr_list_1)
        ]

        deltasnr_bycall_dict[call] = (unixtime_list, deltasnr_list)
        if plot_flag:
            cdist = dist_dict[call]
            plt.plot(datetime_list,
                     deltasnr_list,
                     "-o",
                     label=call + " " + reporter_list[0],
                     c=cdist,
                     cmap=plt.cm.plasma)
            if not country:
                plt.text(datetime_list[0],
                         deltasnr_list[0] + 0.5 * random.random(), "%s" % call)
                if len(unixtime_list) > 1:
                    plt.text(datetime_list[-1],
                             deltasnr_list[-1] + 0.5 * random.random(),
                             "%s" % call)
            else:
                plt.text(datetime_list[0],
                         deltasnr_list[0] + 0.5 * random.random(),
                         Station(call).country)

    if plot_flag:
        #plt.axvline(timestamp_start, c="r")
        #plt.axvline(antenna_rotation_time, c="b")
        plt.grid()
        plt.title("Time evolution of difference in SNR between two antennas")
        plt.xlabel("Time")
        plt.ylabel("Delta SNR (dB)")
        plt.xlim(datetime.datetime.fromtimestamp(timestamp_start),
                 datetime.datetime.fromtimestamp(timestamp_stop))
        plt.ylim(-25, 25)
        #plt.gcf().fmt_xdata = mdates.DateFormatter('%H-%M')
        #plt.gcf().autofmt_xdate()
        #legend()
    return deltasnr_bycall_dict
Пример #13
0
def main():

    bands = {}
    states = []
    countries = []
    dxcc = []
    multiplier = 0
    bandStates = {}
    bandDXCC = {}

    filename = input("Enter Cabrio filename: ")
    multiband = False
    multiplerCountry = False
    m = input(
        "Is the multiplier a multiband multiplier (for the same contact) [Y/N]: "
    )
    m2 = input(
        "Is the DX multipler by contact (Select Y only if you get 1 multiplier for each DXCC)? [Y/N]: "
    )

    if m.upper() == "Y":
        multiband = True
    if m2.upper() == "Y":
        multiplerCountry = True
    for line in open(filename):
        line = line.strip()
        if line.startswith("QSO: "):
            data = line.split()
            if len(data[1]) == 5:
                freq = data[1][:2]
            else:
                freq = data[1][:1]
            if freq not in bands:
                bands[freq] = []
                bandStates[freq] = []
                bandDXCC[freq] = []
            if (data[8]) not in bands[freq]:
                bands[freq].append(data[8])

            if not data[10].isnumeric() and not data[10] in states:
                states.append(data[10])
            elif data[10].isnumeric() and data[8] not in dxcc:
                dxcc.append(data[8])
                stn = Station(data[8])
                if stn.country not in countries:
                    countries.append(stn.country)

            if multiband:
                if not data[10].isnumeric(
                ) and not data[10] in bandStates[freq]:
                    bandStates[freq].append(data[10])
                elif data[10].isnumeric() and data[8] not in bandDXCC[freq]:
                    bandDXCC[freq].append(data[8])

    totalCalls = 0
    for callPerBand in bands.values():
        totalCalls += len(callPerBand)

    #print(totalCalls)

    if not multiband and not multiplerCountry:
        multiplier = len(states) + len(countries)
    elif not multiband and multiplerCountry:
        multiplier = len(states) + len(dxcc)

    else:
        for f in bandStates.values():
            multiplier += len(f)
        for f in bandDXCC.values():
            multiplier += len(f)

    dxcc.sort()
    states.sort()

    print("Total Score: " + str(totalCalls * multiplier) + " (" +
          str(totalCalls) + " * " + str(multiplier) + ")")
    print("Contacts: " + str(totalCalls))
    print("Unique States: " + str(len(states)))
    print("Unique DXCC: " + str(len(dxcc)))
    print("Unique DX Countries: " + str(len(countries)))