def makeDayLists (paramIndex): dayLists = [] for i in range (2): days = ambient.Days (os.path.join (args.indirs [i].path, ambient.parameterBasenames [paramIndex] + ".orig"), args.start_date, args.stop_date) dayList = ambient.dayListFromRange (days, args.indirs [i].startDate, args.indirs [i].stopDate) dayLists.append (dayList) return dayLists
def plotSensorSeeingPC (which): days = seeing [which] allDays = allSeeing [which] siteRange = args.indirs [which] yTicks = [] correlationsArray = [] for p in ambient.parameterBasenames [1:]: otherDays = ambient.Days (os.path.join (siteRange.path, p + ".orig"), args.start_date, args.stop_date) otherDays.setGoodness (allDays) yTicks.append (p) dayList = ambient.dayListFromRange (otherDays, siteRange.startDate, siteRange.stopDate) correlations = ambient.goodCorrelate (days, dayList, args.min_points) correlationsArray.append (correlations) ambient.plotSensorSeeingPC (os.path.join (args.outdir, "pc-seeing+all-{}.pdf").format (siteRange.name), correlationsArray, yTicks, days, args.indirs [which].name)
def makeHistogram (paramIndex): filename = "sites-" + ambient.parameterNames [paramIndex].translate (str.maketrans (" ", "-")) + ".histogram.pdf" filename = filename.lower () title = "Normalized " + ambient.parameterNames [paramIndex] #get a list of seeing days, 1 Days object for each site sites = [] for siteRange in args.indirs: sites.append (ambient.Days (os.path.join (siteRange.path, ambient.parameterBasenames [paramIndex] + ".orig"), args.start_date, args.stop_date)) pages = PdfPages (os.path.join (args.outdir, filename)) fig = plt.figure () ax = fig.add_subplot (1, 1, 1) ax.set_color_cycle (['b','r','g','m','c','y']) datasets = [] labels = [] #for each site, add a list of values to "datasets" #also make a corresponding list of labels based on site dir names for site, siteRange in zip (sites, [siteRange for siteRange in args.indirs]): labels.append (siteRange) datasets.append ([]) dayList = ambient.dayListFromRange (site, siteRange.startDate, siteRange.stopDate) for day in dayList: if day: func = day.periodFilter (args.start_minutes * 60, args.stop_minutes * 60, args.past_midnight) filtered = filter (func, day.measurements) datasets [-1].extend ([m [1] for m in filtered]) ax.hist (datasets, bins=args.num_bins, label=labels, normed=1) ax.set_title (title.title ()) ax.set_xlabel (ambient.paramLabel (paramIndex)) ax.legend () pages.savefig (fig) plt.close (fig) pages.close ()
#parse user's command line arguments args = parser.parse_args () #make sure the output directory exists utils.makeDir (args.outdir) #get list of all seeing days allSeeingDays = ambient.Days (os.path.join (args.indir, ambient.parameterBasenames [0] + ".orig"), args.start_date, args.stop_date) #scripts need start/stop dates now #assert args.start_date #if start-date/stop-date is specified on command line, only look at a subset of days if args.start_date: seeingDays = ambient.dayListFromRange (allSeeingDays, args.start_date, args.stop_date) else: seeingDays = allSeeingDays.days def seeingCorrelations (seeingDays, otherDays): """ :param seeingDays: a list of Day objects for seeing :param otherDays: a list of Day objects for some sensor :return: correlation list of 3-tuples of pc's """ correlations = ambient.crossCorrelate (seeingDays, otherDays, args.start_minutes*60, args.stop_minutes*60, args.past_midnight, args.min_points) #this is a 3-tuple (day, otherDay, pc), day is in seeingDays, otherDay is in otherDays #remove rows with nonsense pc values
return days #make lists of all seeing days for each site and subranges of days we are interested in #see if any of the date ranges is for a leap year so we can pad any non leap year ranges #with a fake leap day allSeeing = [] seeing = [] leapYear = False for i in range (2): allSeeing.append (getSeeingDays (i)) if allSeeing [-1].isLeapYear (): leapYear = True for i in range (2): dayList = ambient.dayListFromRange (allSeeing [i], args.indirs [i].startDate, args.indirs [i].stopDate, leapYear=leapYear) seeing.append (dayList) # 1e. calculate PC for each day. Sort from highest to lowest PC #make a list of (day0, day1, pc) #day0 is never None but day1 can be None whenever it's lacking a day that site0 has #pc values > 1.0 mean nonsense, including not enough matching points correlations = ambient.goodCorrelate (seeing [0], seeing [1], args.min_points) #sort on pc correlations = sorted (correlations, key=lambda x: x[2], reverse=not args.worst) def writeCorr (out, c): day0 = c [0] day1 = c [1] if not day0: