1 package org.lcsim.recon.tracking.trfutil; 2 //********************************************************************** 3 4 // Return a weighted average. 5 public class WAvg 6 { 7 8 private double _sum0; 9 private double _sum1; 10 private double _sum2; 11 private int _count; 12 13 public WAvg() 14 { 15 _sum0= 0.0; 16 _sum1=0.0; 17 _sum2=0.0; 18 _count=0; 19 } 20 21 // input is value and square of the uncertainty 22 public void addPair(double val, double err) 23 { 24 double weight = 1.0/err; 25 _sum0 += weight; 26 _sum1 += weight*val; 27 _sum2 += weight*val*val; 28 ++_count; 29 } 30 public int count() 31 { 32 return _count; 33 } 34 public double average() 35 { 36 return _sum1/_sum0; 37 } 38 public double error() 39 { 40 return 1.0/_sum0; 41 } 42 public double chiSquared() 43 { 44 return _sum2 - _sum1*_sum1/_sum0; 45 } 46 47 48 public String toString() 49 { 50 return "Weighted average = " + average() 51 + " +/- " + Math.sqrt(error()) 52 + " (err = " + error() + ")" 53 + "\n Chi-square = " + chiSquared(); 54 55 } 56 }