time average waves

Needed a tool for creating time series data with averaging.   Here it is.   

#pragma TextEncoding = "UTF-8"
#pragma rtGlobals=3		// Use modern global access method and strict wave access.
// This function will take a pair of waves, are return a new pair of waves with 
// the desired periodicity

function periodicMean(timeWave, valueWave, key, [mult,suffix])
	// timeWave is a real wave representing time in secoinds since the epoch
	// is a wave with y values of the same length as the time wave
	// key is sec, min, hour, day, and represents the time unit of hte output waves
	// multipler is an optiona multipler of the time unit
	// suffix is a user provided suffix for the output waves.   optioal if there is no muliplier
	
	// output is a pair of waves averaged to the time unit desired

	Wave timeWave // assumes time in seconds (since epoch 1/1/1904)
	Wave valueWave
	String key
	Variable mult
	String suffix
	
	variable multiplier 

	
	
	if(ParamIsDefault(mult))
		multiplier = 1
	else
		multiplier = mult
		if (ParamIsDefault(suffix))
			print "Output wave needs a unique suffix parameter of the form: suffix=<string>"
			return -1
		endif
	endif
	
	if(ParamIsDefault(suffix))
		suffix = key
	endif
	
	String periodDict = "sec:1;min:60;hour:3600;day:86400"
	String newXName, newYName

	if (strsearch(periodDict, key, 0) == -1)
		print "Invalid period string, allowed values are sec, min, hour and day"
		return -1
	endif
	
	if (numpnts(timeWave) != numpnts(valueWave))
		print "wavelength mismatch"
		return -1
	endif
	
	// get the total duration of the time wave
	Variable startTime = timeWave[0]
	Variable endTime = timeWave[INF]
	Variable duration = endTime - StartTime
	Variable numSeconds = NumberByKey(key, periodDict)*multiplier
	Variable numPeriods = duration/numSeconds
	if (numPeriods < 1)
		print "the period is too large for this data set"
		return -1
	endif	
	
	Variable wholePeriods = ceil(numPeriods)
	Make /O/N=(wholePeriods)/D xWave, yWave

	variable i
	variable averageTime
	variable intervalStart, intervalEnd
	variable numpntsperinterval = numpnts(timeWave)/wholePeriods
	for (i=0; i < wholePeriods; i+=1 )
		intervalStart = i*numpntsperinterval
		intervalEnd = intervalStart + numpntsperinterval
		if (intervalEnd > numpnts(timeWave)-1)
			intervalEnd = numpnts(timeWave) - 1
		endif
		
		averageTime = (timeWave[intervalEnd] + timeWave[intervalStart])/2
		WaveStats/M=1/Q/R=[intervalStart,intervalEnd] valueWave
		xWave[i] = averageTime
		yWave[i] = V_avg
	endfor
	
	newXName = nameOfWave(timeWave) + "_" + suffix
	newYName = nameOfWave(valueWave) + "_" + suffix
	Rename xWave, $newXName
	Rename yWave, $newYName
end