1 package org.lcsim.recon.tracking.trfutil; 2 import junit.framework.TestCase; 3 public class ArraySmearer_Test extends TestCase 4 { 5 private boolean debug; 6 public void testArraySmearer() 7 { 8 double[] _pulls = new double[3]; 9 double[][] _pulsum = new double[2][3]; 10 double[] _pullerr = new double[3]; 11 double[][] cov1 = new double[1][1]; 12 // Single variable, should be gaussian smeared... 13 cov1[0][0] = 3.; 14 ArraySmearer as = new ArraySmearer( cov1 ); 15 if(debug) System.out.println(as); 16 double[] vec1 = { 1.0 }; 17 double[] tmp = new double[1]; 18 int nsamples = 1000; 19 for (int k = 0 ; k<nsamples ; ++k ) 20 { 21 System.arraycopy(vec1, 0, tmp, 0, 1); 22 as.smear(tmp); 23 for (int i = 0; i<tmp.length ; ++i ) 24 { 25 _pulls[i] = vec1[i] - tmp[i]; 26 _pulsum[0][i] += _pulls[i]; 27 _pulsum[1][i] += _pulls[i]*_pulls[i]; 28 } 29 } 30 double fac=1./Math.sqrt((double)(nsamples)); 31 for (int i=0; i<vec1.length; ++i) 32 { 33 _pulsum[0][i]=_pulsum[0][i]/(double)nsamples; 34 _pulsum[1][i]=Math.sqrt(_pulsum[1][i]/((double)nsamples)-_pulsum[0][i]*_pulsum[0][i]); 35 _pullerr[i]=fac*_pulsum[1][i]; 36 if(debug) System.out.println("Mean: "+_pulsum[0][i]+" +/- "+_pullerr[i]+" sigma= "+_pulsum[1][i]/Math.sqrt(cov1[i][i])); 37 } 38 39 40 // 2x2 41 double[][] cov2 = new double[2][2]; 42 // covariance matrix should be square, symmetric 43 // and have positive-definite determinant 44 cov2[0][0] = 4.; 45 cov2[1][1] = 16.; 46 cov2[0][1] = 1.; 47 cov2[1][0] = 1.; 48 ArraySmearer as2 = new ArraySmearer( cov2 ); 49 if(debug) System.out.println(as2); 50 double[] vec2 = 51 { 1.0, 1.0 }; 52 double[] tmp2 = new double[2]; 53 for (int i = 0; i< tmp2.length ; ++i ) 54 { 55 _pulls[i] = 0.; 56 _pulsum[0][i] = 0.; 57 _pulsum[1][i] = 0.; 58 } 59 int nsamples2 = 1000; 60 for (int k = 0 ; k<nsamples2 ; ++k ) 61 { 62 System.arraycopy(vec2, 0, tmp2, 0, 2); 63 as2.smear(tmp2); 64 65 for (int i = 0; i<tmp2.length ; ++i ) 66 { 67 _pulls[i] = vec2[i] - tmp2[i]; 68 _pulsum[0][i] += _pulls[i]; 69 _pulsum[1][i] += _pulls[i]*_pulls[i]; 70 } 71 } 72 double fac2=1./Math.sqrt((double)(nsamples2)); 73 for (int i=0; i<vec2.length; ++i) 74 { 75 if(debug) System.out.println("_pulsum[0]["+i+"]= "+_pulsum[0][i]); 76 _pulsum[0][i]=_pulsum[0][i]/(double)nsamples2; 77 _pulsum[1][i]=Math.sqrt(_pulsum[1][i]/((double)nsamples2)-_pulsum[0][i]*_pulsum[0][i]); 78 _pullerr[i]=fac2*_pulsum[1][i]; 79 80 if(debug) System.out.println("Mean: "+_pulsum[0][i]+" +/- "+_pullerr[i]+" sigma= "+_pulsum[1][i]/Math.sqrt(cov2[i][i])); 81 } 82 83 //TODO introduce real tests with Assertions 84 85 } 86 } 87