Weighted Mean of multiple experiments.
daggaz
The base names are used as input: function("data","st_dev"), and the program will return the number of experiments it finds (it searches all currently open waves!), as well as printing the files in case errant waves are included. Final output is in the form of the weighted means of each row of points, and the error on those means.
#pragma rtGlobals=1 // Use modern global access method.
function weighted(data_name,error_name)
string data_name,error_name // names of the base files to be averaged
string data_handles = WaveList(data_name+"*",";","") // finds and lists names of data waves
string error_handles = WaveList(error_name+"*",";","") // finds and lists names of error waves
variable i=0// iteration variable
variable n = ItemsInLIst(data_handles) // number of experiments to be averaged
print n, "experiments will be averaged."
variable j = numpnts($stringfromlist(0,data_handles)) // length of input,output waves. input waves must be of equal length.
make/o/d/n=(j) numerator=0, denominator=0 // for building the final waves (see loop math)
make/o/d/n=(j) weighted_mean, weighted_error, h_data, h_error
for(i=0;i<=(n-1);i+=1) // Initialize variables;continue test
wave h_data = $stringfromlist(i,data_handles)
wave h_error = $stringfromlist(i,error_handles)
print h_data
print h_error
numerator = numerator + (h_data / ((h_error)^2))
denominator = denominator + 1/((h_error)^2)
endfor // Execute body code until continue test is FALSE
weighted_mean=numerator/denominator
appendtotable weighted_mean
weighted_error=sqrt(1/denominator)
appendtotable weighted_error
end
function weighted(data_name,error_name)
string data_name,error_name // names of the base files to be averaged
string data_handles = WaveList(data_name+"*",";","") // finds and lists names of data waves
string error_handles = WaveList(error_name+"*",";","") // finds and lists names of error waves
variable i=0// iteration variable
variable n = ItemsInLIst(data_handles) // number of experiments to be averaged
print n, "experiments will be averaged."
variable j = numpnts($stringfromlist(0,data_handles)) // length of input,output waves. input waves must be of equal length.
make/o/d/n=(j) numerator=0, denominator=0 // for building the final waves (see loop math)
make/o/d/n=(j) weighted_mean, weighted_error, h_data, h_error
for(i=0;i<=(n-1);i+=1) // Initialize variables;continue test
wave h_data = $stringfromlist(i,data_handles)
wave h_error = $stringfromlist(i,error_handles)
print h_data
print h_error
numerator = numerator + (h_data / ((h_error)^2))
denominator = denominator + 1/((h_error)^2)
endfor // Execute body code until continue test is FALSE
weighted_mean=numerator/denominator
appendtotable weighted_mean
weighted_error=sqrt(1/denominator)
appendtotable weighted_error
end
beginner programmer here, so feel free to patch things up or point out improvements..
Forum
Support
Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More