add cabrillostats

This commit is contained in:
ceb515 2024-07-11 09:57:04 -04:00
parent 0f024b97fe
commit 873a0ebe25
2 changed files with 73 additions and 0 deletions

View File

@ -11,3 +11,6 @@ ADIF Converter can take command line arguments (input and output file), or it wi
## squirlConverter
Squirl converter is a bit simpler to use. Put all of the exported log TXT files into the same directory as the script, and give it an argument for the name of the output file (it will default to "output.txt"). It will also have you enter the header information, and output another single large cabrillo file.
## cabrilloStats
CabrilloStats is a simple tool to find how many contacts were made per band and mode, which is helpful in submission to the ARRL.

70
cabrilloStats.py Normal file
View File

@ -0,0 +1,70 @@
import re
import pandas as pd
import argparse
# Define the frequency to band conversion
frequency_to_band = {
'1800': '160m',
'3500': '80m',
'7000': '40m',
'14000': '20m',
'21000': '15m',
'28000': '10m',
}
# Define a function to parse the QSO lines
def parse_qso_line(line):
# Use regex to match the QSO line and extract the mode and frequency
match = re.match(r"QSO:\s+(\d+)\s+(\w+)\s+\d{4}-\d{2}-\d{2}\s+\d{4}\s+\w+\s+\w+\s+\w+\s+\w+", line)
if match:
frequency, mode = match.groups()
band = frequency_to_band.get(frequency, None) # Convert frequency to band
if band:
return mode, band
return None, None
# Define a function to read the log file and count QSOs
def read_log_file(file_path):
# Initialize counters for QSOs
counts = {'CW': {}, 'PH': {}, 'RY': {}, 'DG': {}}
# Read the log file
with open(file_path, 'r') as file:
for line in file:
if line.startswith('QSO:'):
mode, band = parse_qso_line(line.strip())
if mode and mode in counts:
if band not in counts[mode]:
counts[mode][band] = 0
counts[mode][band] += 1
# Convert counts to a DataFrame for better display
# Define all possible bands
all_bands = ['160m', '80m', '40m', '20m', '15m', '10m']
# Initialize the DataFrame with all bands and modes
data = {band: {mode: counts[mode].get(band, 0) for mode in ['CW', 'DG', 'PH', 'RY']} for band in all_bands}
df = pd.DataFrame(data).T.fillna(0).astype(int)
return df
# Define a function to print the results
def print_summary(df):
print("QSO Counts by Band and Mode:")
print(df)
# Main function to run the script
def main():
# Set up command line argument parsing
parser = argparse.ArgumentParser(description="Process a log file to count QSOs by band and mode.")
parser.add_argument('file_path', help="Path to the log file")
args = parser.parse_args()
# Read the log file and get QSO counts
df = read_log_file(args.file_path)
# Print the summary
print_summary(df)
if __name__ == "__main__":
main()