Average of all points in a bunch of 1D waves
Posted May 19th, 2015 by sjr51
in
Hopefully this will be useful to somebody. This function will get a bunch of 1D waves (number of points not relevant) and find the average value (mean or median) of all points in each wave and put the average into a point in a new wave.
//This function will find the average of all points for each 1D wave in a batch of waves and then put the result //into a new wave. So n waves will give a wave n points. //It requires a sensible root naming convention, e.g. cell1_veh_0, cell1_veh_1... //Use "opt" to specific "mean" or "median". Function AvgWaves(root,opt) //call example AvgWaves("cell1_veh","mean") String root String opt String rootstar=root + "*" String wavenames=wavelist(rootstar,";","") //gets the wavelist of batch of waves String ResultWave="W_" + opt + "_" + root String LabelWave="T_" + opt + "_" + root Variable nwaves =ItemsInList(wavenames) Make /O/N=(nwaves) $ResultWave //average values will go in this wave Make /O/T/N=(nwaves) $LabelWave //wave names will go in this textwave Wave w0 = $ResultWave Wave/T wT = $LabelWave Variable i Variable tempvar String name if (stringmatch(opt,"mean")==1) For (i = 0; i < nwaves; i += 1) name = StringFromList(i,wavenames) Wave /z w1 = $name Duplicate /o w1 tempwave //not required WaveTransform zapnans, tempwave //not required tempvar=mean(tempwave) w0[i]=tempvar wT[i]=name Killwaves tempwave endfor elseif (stringmatch(opt,"median")==1) For (i = 0; i < nwaves; i += 1) name = StringFromList(i,wavenames) Wave /z w1 = $name Duplicate /o w1 tempwave WaveTransform zapnans, tempwave tempvar=StatsMedian(tempwave) w0[i]=tempvar wT[i]=name Killwaves tempwave endfor else //error message Print "Select mean or median (in quotes) for opt" return 0 Endif End