00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #include "VavilovTest.h"
00035 #include "Math/Vavilov.h"
00036 #include "Math/VavilovAccurate.h"
00037 #include "Math/VavilovFast.h"
00038
00039
00040
00041 #include <cassert>
00042 #include <iostream>
00043 #include <cmath>
00044 #include <iomanip>
00045 #include <cmath>
00046 #include <cstdlib>
00047 #include <string>
00048 #include <sstream>
00049
00050
00051 namespace ROOT {
00052 namespace Math {
00053
00054 static const double eu = 0.577215664901532860606;
00055
00056
00057
00058 static double vavilovPdfValues0[45][12]={
00059 {-3.00, 6.80E-4, 6.85E-4, 6.90E-4, 6.95E-4, 7.00E-4, 7.05E-4, 7.10E-4, 7.15E-4, 7.21E-4, 7.26E-4, 7.31E-4},
00060 {-2.50, 9.73E-3, 9.80E-3, 9.87E-3, 9.93E-3, 1.00E-2, 1.01E-2, 1.01E-2, 1.02E-2, 1.03E-2, 1.03E-2, 1.04E-2},
00061 {-2.00, 4.44E-2, 4.47E-2, 4.50E-2, 4.53E-2, 4.55E-2, 4.58E-2, 4.61E-2, 4.64E-2, 4.67E-2, 4.70E-2, 4.73E-2},
00062 {-1.50, 1.02E-1, 1.02E-1, 1.03E-1, 1.03E-1, 1.04E-1, 1.04E-1, 1.05E-1, 1.06E-1, 1.06E-1, 1.07E-1, 1.07E-1},
00063 {-1.00, 1.53E-1, 1.54E-1, 1.55E-1, 1.55E-1, 1.56E-1, 1.57E-1, 1.58E-1, 1.59E-1, 1.59E-1, 1.60E-1, 1.61E-1},
00064 {-0.50, 1.79E-1, 1.80E-1, 1.81E-1, 1.82E-1, 1.83E-1, 1.83E-1, 1.84E-1, 1.85E-1, 1.86E-1, 1.87E-1, 1.88E-1},
00065 { 0.00, 1.81E-1, 1.81E-1, 1.82E-1, 1.83E-1, 1.84E-1, 1.84E-1, 1.85E-1, 1.86E-1, 1.87E-1, 1.88E-1, 1.88E-1},
00066 { 0.50, 1.67E-1, 1.68E-1, 1.68E-1, 1.69E-1, 1.69E-1, 1.70E-1, 1.71E-1, 1.71E-1, 1.72E-1, 1.73E-1, 1.73E-1},
00067 { 1.00, 1.47E-1, 1.47E-1, 1.48E-1, 1.48E-1, 1.49E-1, 1.49E-1, 1.49E-1, 1.50E-1, 1.50E-1, 1.51E-1, 1.51E-1},
00068 { 1.50, 1.25E-1, 1.26E-1, 1.26E-1, 1.26E-1, 1.27E-1, 1.27E-1, 1.27E-1, 1.28E-1, 1.28E-1, 1.29E-1, 1.29E-1},
00069 { 2.00, 1.06E-1, 1.06E-1, 1.06E-1, 1.07E-1, 1.07E-1, 1.07E-1, 1.07E-1, 1.08E-1, 1.08E-1, 1.08E-1, 1.08E-1},
00070 { 2.50, 8.91E-2, 8.93E-2, 8.94E-2, 8.96E-2, 8.97E-2, 8.99E-2, 9.00E-2, 9.02E-2, 9.03E-2, 9.04E-2, 9.06E-2},
00071 { 3.00, 7.50E-2, 7.51E-2, 7.52E-2, 7.53E-2, 7.53E-2, 7.54E-2, 7.55E-2, 7.56E-2, 7.57E-2, 7.58E-2, 7.59E-2},
00072 { 3.50, 6.34E-2, 6.34E-2, 6.34E-2, 6.35E-2, 6.35E-2, 6.36E-2, 6.36E-2, 6.36E-2, 6.37E-2, 6.37E-2, 6.37E-2},
00073 { 4.00, 5.38E-2, 5.38E-2, 5.38E-2, 5.38E-2, 5.38E-2, 5.38E-2, 5.38E-2, 5.39E-2, 5.39E-2, 5.39E-2, 5.39E-2},
00074 { 4.50, 4.60E-2, 4.60E-2, 4.60E-2, 4.59E-2, 4.59E-2, 4.59E-2, 4.59E-2, 4.59E-2, 4.58E-2, 4.58E-2, 4.58E-2},
00075 { 5.00, 3.96E-2, 3.95E-2, 3.95E-2, 3.95E-2, 3.94E-2, 3.94E-2, 3.93E-2, 3.93E-2, 3.93E-2, 3.92E-2, 3.92E-2},
00076 { 5.50, 3.43E-2, 3.42E-2, 3.42E-2, 3.41E-2, 3.41E-2, 3.40E-2, 3.40E-2, 3.39E-2, 3.39E-2, 3.38E-2, 3.38E-2},
00077 { 6.00, 2.99E-2, 2.98E-2, 2.97E-2, 2.97E-2, 2.96E-2, 2.96E-2, 2.95E-2, 2.95E-2, 2.94E-2, 2.93E-2, 2.93E-2},
00078 { 6.50, 2.62E-2, 2.61E-2, 2.61E-2, 2.60E-2, 2.59E-2, 2.59E-2, 2.58E-2, 2.57E-2, 2.57E-2, 2.56E-2, 2.55E-2},
00079 { 7.00, 2.31E-2, 2.30E-2, 2.30E-2, 2.29E-2, 2.28E-2, 2.28E-2, 2.27E-2, 2.26E-2, 2.26E-2, 2.25E-2, 2.24E-2},
00080 { 7.50, 2.05E-2, 2.04E-2, 2.04E-2, 2.03E-2, 2.02E-2, 2.01E-2, 2.01E-2, 2.00E-2, 1.99E-2, 1.99E-2, 1.98E-2},
00081 { 8.00, 1.83E-2, 1.82E-2, 1.81E-2, 1.81E-2, 1.80E-2, 1.79E-2, 1.78E-2, 1.78E-2, 1.77E-2, 1.76E-2, 1.75E-2},
00082 { 8.50, 1.64E-2, 1.63E-2, 1.62E-2, 1.62E-2, 1.61E-2, 1.60E-2, 1.59E-2, 1.59E-2, 1.58E-2, 1.57E-2, 1.56E-2},
00083 { 9.00, 1.47E-2, 1.47E-2, 1.46E-2, 1.45E-2, 1.45E-2, 1.44E-2, 1.43E-2, 1.42E-2, 1.42E-2, 1.41E-2, 1.40E-2},
00084 { 9.50, 1.33E-2, 1.33E-2, 1.32E-2, 1.31E-2, 1.30E-2, 1.30E-2, 1.29E-2, 1.28E-2, 1.27E-2, 1.27E-2, 1.26E-2},
00085 {10.00, 1.21E-2, 1.20E-2, 1.20E-2, 1.19E-2, 1.18E-2, 1.17E-2, 1.17E-2, 1.16E-2, 1.15E-2, 1.14E-2, 1.14E-2},
00086 {11.00, 1.01E-2, 1.00E-2, 9.94E-3, 9.87E-3, 9.80E-3, 9.73E-3, 9.66E-3, 9.59E-3, 9.51E-3, 9.44E-3, 9.37E-3},
00087 {12.00, 8.51E-3, 8.44E-3, 8.37E-3, 8.31E-3, 8.24E-3, 8.17E-3, 8.10E-3, 8.03E-3, 7.96E-3, 7.89E-3, 7.82E-3},
00088 {13.00, 7.26E-3, 7.20E-3, 7.14E-3, 7.07E-3, 7.00E-3, 6.94E-3, 6.87E-3, 6.81E-3, 6.74E-3, 6.67E-3, 6.61E-3},
00089 {14.00, 6.27E-3, 6.20E-3, 6.14E-3, 6.08E-3, 6.02E-3, 5.95E-3, 5.89E-3, 5.83E-3, 5.76E-3, 5.70E-3, 5.64E-3},
00090 {15.00, 5.46E-3, 5.40E-3, 5.34E-3, 5.28E-3, 5.22E-3, 5.16E-3, 5.10E-3, 5.04E-3, 4.97E-3, 4.91E-3, 4.85E-3},
00091 {16.00, 4.79E-3, 4.73E-3, 4.67E-3, 4.62E-3, 4.56E-3, 4.50E-3, 4.44E-3, 4.39E-3, 4.33E-3, 4.27E-3, 4.21E-3},
00092 {17.00, 4.23E-3, 4.18E-3, 4.12E-3, 4.07E-3, 4.01E-3, 3.96E-3, 3.90E-3, 3.85E-3, 3.79E-3, 3.73E-3, 3.68E-3},
00093 {18.00, 3.77E-3, 3.72E-3, 3.66E-3, 3.61E-3, 3.56E-3, 3.50E-3, 3.45E-3, 3.40E-3, 3.34E-3, 3.29E-3, 3.24E-3},
00094 {19.00, 3.37E-3, 3.32E-3, 3.27E-3, 3.22E-3, 3.17E-3, 3.12E-3, 3.07E-3, 3.02E-3, 2.97E-3, 2.91E-3, 2.86E-3},
00095 {20.00, 3.04E-3, 2.99E-3, 2.94E-3, 2.89E-3, 2.84E-3, 2.79E-3, 2.74E-3, 2.69E-3, 2.64E-3, 2.60E-3, 2.55E-3},
00096 {22.00, 2.49E-3, 2.45E-3, 2.40E-3, 2.36E-3, 2.31E-3, 2.27E-3, 2.22E-3, 2.18E-3, 2.13E-3, 2.09E-3, 2.04E-3},
00097 {24.00, 2.08E-3, 2.04E-3, 2.00E-3, 1.96E-3, 1.92E-3, 1.88E-3, 1.83E-3, 1.79E-3, 1.75E-3, 1.71E-3, 1.66E-3},
00098 {26.00, 1.77E-3, 1.73E-3, 1.69E-3, 1.65E-3, 1.61E-3, 1.57E-3, 1.53E-3, 1.49E-3, 1.45E-3, 1.41E-3, 1.37E-3},
00099 {28.00, 1.51E-3, 1.48E-3, 1.44E-3, 1.41E-3, 1.37E-3, 1.33E-3, 1.30E-3, 1.26E-3, 1.22E-3, 1.18E-3, 1.15E-3},
00100 {30.00, 1.31E-3, 1.28E-3, 1.24E-3, 1.21E-3, 1.18E-3, 1.14E-3, 1.11E-3, 1.07E-3, 1.04E-3, 1.00E-3, 9.68E-4},
00101 {32.00, 1.15E-3, 1.12E-3, 1.08E-3, 1.05E-3, 1.02E-3, 9.87E-4, 9.54E-4, 9.22E-4, 8.89E-4, 8.56E-4, 8.24E-4},
00102 {34.00, 1.01E-3, 9.81E-4, 9.51E-4, 9.21E-4, 8.90E-4, 8.60E-4, 8.29E-4, 7.98E-4, 7.68E-4, 7.37E-4, 7.06E-4},
00103 {36.00, 8.98E-4, 8.70E-4, 8.41E-4, 8.12E-4, 7.83E-4, 7.54E-4, 7.25E-4, 6.96E-4, 6.67E-4, 6.38E-4, 6.09E-4}};
00104
00105
00106
00107 static double vavilovPdfValues1[42][12]={
00108 {-3.00, 7.01E-4, 7.18E-4, 7.34E-4, 7.52E-4, 7.69E-4, 7.87E-4, 8.06E-4, 8.25E-4, 8.44E-4, 8.64E-4, 8.84E-4},
00109 {-2.50, 1.00E-2, 1.02E-2, 1.05E-2, 1.07E-2, 1.09E-2, 1.12E-2, 1.14E-2, 1.16E-2, 1.19E-2, 1.21E-2, 1.24E-2},
00110 {-2.00, 4.58E-2, 4.67E-2, 4.76E-2, 4.85E-2, 4.94E-2, 5.04E-2, 5.13E-2, 5.23E-2, 5.33E-2, 5.44E-2, 5.54E-2},
00111 {-1.50, 1.05E-1, 1.06E-1, 1.08E-1, 1.10E-1, 1.12E-1, 1.14E-1, 1.16E-1, 1.18E-1, 1.20E-1, 1.22E-1, 1.24E-1},
00112 {-1.00, 1.58E-1, 1.60E-1, 1.62E-1, 1.65E-1, 1.67E-1, 1.70E-1, 1.73E-1, 1.75E-1, 1.78E-1, 1.81E-1, 1.83E-1},
00113 {-0.50, 1.85E-1, 1.87E-1, 1.89E-1, 1.92E-1, 1.95E-1, 1.97E-1, 2.00E-1, 2.02E-1, 2.05E-1, 2.08E-1, 2.10E-1},
00114 { 0.00, 1.86E-1, 1.88E-1, 1.90E-1, 1.92E-1, 1.95E-1, 1.97E-1, 1.99E-1, 2.01E-1, 2.03E-1, 2.06E-1, 2.08E-1},
00115 { 0.50, 1.72E-1, 1.74E-1, 1.75E-1, 1.77E-1, 1.78E-1, 1.80E-1, 1.82E-1, 1.83E-1, 1.85E-1, 1.87E-1, 1.88E-1},
00116 { 1.00, 1.51E-1, 1.52E-1, 1.53E-1, 1.54E-1, 1.55E-1, 1.57E-1, 1.58E-1, 1.59E-1, 1.60E-1, 1.61E-1, 1.62E-1},
00117 { 1.50, 1.29E-1, 1.30E-1, 1.31E-1, 1.31E-1, 1.32E-1, 1.33E-1, 1.33E-1, 1.34E-1, 1.34E-1, 1.35E-1, 1.36E-1},
00118 { 2.00, 1.09E-1, 1.10E-1, 1.10E-1, 1.10E-1, 1.11E-1, 1.11E-1, 1.11E-1, 1.11E-1, 1.12E-1, 1.12E-1, 1.12E-1},
00119 { 2.50, 9.18E-2, 9.19E-2, 9.20E-2, 9.21E-2, 9.22E-2, 9.22E-2, 9.23E-2, 9.23E-2, 9.23E-2, 9.24E-2, 9.24E-2},
00120 { 3.00, 7.73E-2, 7.72E-2, 7.71E-2, 7.70E-2, 7.69E-2, 7.68E-2, 7.67E-2, 7.66E-2, 7.64E-2, 7.62E-2, 7.61E-2},
00121 { 3.50, 6.53E-2, 6.51E-2, 6.49E-2, 6.47E-2, 6.45E-2, 6.42E-2, 6.40E-2, 6.37E-2, 6.34E-2, 6.32E-2, 6.29E-2},
00122 { 4.00, 5.54E-2, 5.52E-2, 5.49E-2, 5.46E-2, 5.43E-2, 5.40E-2, 5.36E-2, 5.33E-2, 5.29E-2, 5.26E-2, 5.22E-2},
00123 { 4.50, 4.74E-2, 4.71E-2, 4.67E-2, 4.64E-2, 4.60E-2, 4.56E-2, 4.53E-2, 4.49E-2, 4.45E-2, 4.40E-2, 4.36E-2},
00124 { 5.00, 4.08E-2, 4.04E-2, 4.00E-2, 3.96E-2, 3.92E-2, 3.88E-2, 3.84E-2, 3.80E-2, 3.76E-2, 3.71E-2, 3.67E-2},
00125 { 5.50, 3.53E-2, 3.49E-2, 3.45E-2, 3.41E-2, 3.37E-2, 3.33E-2, 3.28E-2, 3.24E-2, 3.19E-2, 3.15E-2, 3.10E-2},
00126 { 6.00, 3.08E-2, 3.04E-2, 3.00E-2, 2.95E-2, 2.91E-2, 2.87E-2, 2.82E-2, 2.78E-2, 2.73E-2, 2.69E-2, 2.64E-2},
00127 { 6.50, 2.70E-2, 2.66E-2, 2.62E-2, 2.57E-2, 2.53E-2, 2.49E-2, 2.44E-2, 2.40E-2, 2.35E-2, 2.31E-2, 2.26E-2},
00128 { 7.00, 2.38E-2, 2.34E-2, 2.30E-2, 2.26E-2, 2.21E-2, 2.17E-2, 2.13E-2, 2.08E-2, 2.04E-2, 1.99E-2, 1.94E-2},
00129 { 7.50, 2.11E-2, 2.07E-2, 2.03E-2, 1.99E-2, 1.95E-2, 1.90E-2, 1.86E-2, 1.82E-2, 1.77E-2, 1.73E-2, 1.68E-2},
00130 { 8.00, 1.88E-2, 1.84E-2, 1.80E-2, 1.76E-2, 1.72E-2, 1.68E-2, 1.64E-2, 1.59E-2, 1.55E-2, 1.51E-2, 1.46E-2},
00131 { 8.50, 1.69E-2, 1.65E-2, 1.61E-2, 1.57E-2, 1.53E-2, 1.49E-2, 1.45E-2, 1.40E-2, 1.36E-2, 1.32E-2, 1.27E-2},
00132 { 9.00, 1.52E-2, 1.48E-2, 1.44E-2, 1.40E-2, 1.36E-2, 1.32E-2, 1.28E-2, 1.24E-2, 1.20E-2, 1.16E-2, 1.12E-2},
00133 { 9.50, 1.37E-2, 1.34E-2, 1.30E-2, 1.26E-2, 1.22E-2, 1.18E-2, 1.14E-2, 1.10E-2, 1.06E-2, 1.02E-2, 9.81E-3},
00134 {10.00, 1.25E-2, 1.21E-2, 1.17E-2, 1.14E-2, 1.10E-2, 1.06E-2, 1.02E-2, 9.84E-3, 9.45E-3, 9.05E-3, 8.65E-3},
00135 {11.00, 1.04E-2, 1.00E-2, 9.70E-3, 9.35E-3, 8.99E-3, 8.63E-3, 8.27E-3, 7.91E-3, 7.54E-3, 7.17E-3, 6.79E-3},
00136 {12.00, 8.77E-3, 8.44E-3, 8.11E-3, 7.78E-3, 7.45E-3, 7.11E-3, 6.77E-3, 6.43E-3, 6.08E-3, 5.73E-3, 5.38E-3},
00137 {13.00, 7.49E-3, 7.18E-3, 6.87E-3, 6.56E-3, 6.24E-3, 5.92E-3, 5.60E-3, 5.28E-3, 4.95E-3, 4.63E-3, 4.30E-3},
00138 {14.00, 6.46E-3, 6.17E-3, 5.87E-3, 5.58E-3, 5.28E-3, 4.98E-3, 4.68E-3, 4.38E-3, 4.07E-3, 3.76E-3, 3.45E-3},
00139 {15.00, 5.62E-3, 5.35E-3, 5.07E-3, 4.79E-3, 4.51E-3, 4.22E-3, 3.94E-3, 3.65E-3, 3.36E-3, 3.07E-3, 2.78E-3},
00140 {16.00, 4.93E-3, 4.67E-3, 4.41E-3, 4.14E-3, 3.88E-3, 3.61E-3, 3.34E-3, 3.07E-3, 2.80E-3, 2.52E-3, 2.24E-3},
00141 {17.00, 4.36E-3, 4.11E-3, 3.86E-3, 3.61E-3, 3.36E-3, 3.10E-3, 2.85E-3, 2.59E-3, 2.33E-3, 2.07E-3, 1.81E-3},
00142 {18.00, 3.88E-3, 3.65E-3, 3.41E-3, 3.17E-3, 2.93E-3, 2.69E-3, 2.44E-3, 2.20E-3, 1.95E-3, 1.71E-3, 1.46E-3},
00143 {19.00, 3.48E-3, 3.25E-3, 3.02E-3, 2.79E-3, 2.57E-3, 2.34E-3, 2.10E-3, 1.87E-3, 1.64E-3, 1.41E-3, 1.17E-3},
00144 {20.00, 3.13E-3, 2.91E-3, 2.70E-3, 2.48E-3, 2.26E-3, 2.04E-3, 1.82E-3, 1.60E-3, 1.38E-3, 1.16E-3, 9.32E-4},
00145 {22.00, 2.57E-3, 2.37E-3, 2.17E-3, 1.98E-3, 1.78E-3, 1.58E-3, 1.37E-3, 1.17E-3, 9.71E-4, 7.69E-4, 5.66E-4},
00146 {24.00, 1.97E-3, 1.80E-3, 1.63E-3, 1.47E-3, 1.30E-3, 1.13E-3, 9.69E-4, 8.04E-4, 6.39E-4, 4.75E-4, 3.11E-4},
00147 {26.00, 1.14E-3, 1.04E-3, 9.34E-4, 8.32E-4, 7.31E-4, 6.31E-4, 5.34E-4, 4.38E-4, 3.44E-4, 2.52E-4, 1.61E-4},
00148 {28.00, 6.50E-4, 5.85E-4, 5.22E-4, 4.61E-4, 4.02E-4, 3.45E-4, 2.89E-4, 2.35E-4, 1.84E-4, 1.34E-4, 8.60E-5},
00149 {30.00, 3.95E-4, 3.53E-4, 3.12E-4, 2.73E-4, 2.36E-4, 2.00E-4, 1.66E-4, 1.34E-4, 1.03E-4, 7.46E-5, 4.76E-5}};
00150
00151
00152
00153 static double vavilovPdfValues2[41][12]={
00154 {-3.50, 0, 0, 0, 0, 0, 0, 1.01E-5, 1.06E-5, 1.10E-5, 1.14E-5, 1.19E-5},
00155 {-3.00, 7.23E-4, 7.50E-4, 7.78E-4, 8.07E-4, 8.37E-4, 8.68E-4, 9.00E-4, 9.34E-4, 9.69E-4, 1.01E-3, 1.04E-3},
00156 {-2.50, 1.03E-2, 1.07E-2, 1.10E-2, 1.14E-2, 1.18E-2, 1.22E-2, 1.26E-2, 1.30E-2, 1.35E-2, 1.39E-2, 1.44E-2},
00157 {-2.00, 4.72E-2, 4.86E-2, 5.00E-2, 5.15E-2, 5.31E-2, 5.47E-2, 5.63E-2, 5.80E-2, 5.98E-2, 6.15E-2, 6.34E-2},
00158 {-1.50, 1.08E-1, 1.11E-1, 1.14E-1, 1.17E-1, 1.20E-1, 1.23E-1, 1.26E-1, 1.29E-1, 1.33E-1, 1.36E-1, 1.40E-1},
00159 {-1.00, 1.62E-1, 1.66E-1, 1.70E-1, 1.74E-1, 1.78E-1, 1.82E-1, 1.86E-1, 1.90E-1, 1.94E-1, 1.99E-1, 2.03E-1},
00160 {-0.50, 1.90E-1, 1.94E-1, 1.98E-1, 2.01E-1, 2.05E-1, 2.09E-1, 2.13E-1, 2.17E-1, 2.21E-1, 2.25E-1, 2.30E-1},
00161 { 0.00, 1.92E-1, 1.95E-1, 1.98E-1, 2.01E-1, 2.04E-1, 2.07E-1, 2.10E-1, 2.14E-1, 2.17E-1, 2.20E-1, 2.23E-1},
00162 { 0.50, 1.77E-1, 1.79E-1, 1.82E-1, 1.84E-1, 1.86E-1, 1.88E-1, 1.90E-1, 1.92E-1, 1.95E-1, 1.97E-1, 1.99E-1},
00163 { 1.00, 1.56E-1, 1.57E-1, 1.58E-1, 1.60E-1, 1.61E-1, 1.62E-1, 1.64E-1, 1.65E-1, 1.66E-1, 1.67E-1, 1.68E-1},
00164 { 1.50, 1.33E-1, 1.34E-1, 1.35E-1, 1.35E-1, 1.36E-1, 1.36E-1, 1.37E-1, 1.37E-1, 1.38E-1, 1.38E-1, 1.39E-1},
00165 { 2.00, 1.13E-1, 1.13E-1, 1.13E-1, 1.13E-1, 1.13E-1, 1.13E-1, 1.13E-1, 1.13E-1, 1.13E-1, 1.13E-1, 1.13E-1},
00166 { 2.50, 9.46E-2, 9.44E-2, 9.42E-2, 9.40E-2, 9.37E-2, 9.33E-2, 9.30E-2, 9.26E-2, 9.21E-2, 9.16E-2, 9.11E-2},
00167 { 3.00, 7.96E-2, 7.92E-2, 7.87E-2, 7.82E-2, 7.77E-2, 7.71E-2, 7.65E-2, 7.58E-2, 7.51E-2, 7.44E-2, 7.36E-2},
00168 { 3.50, 6.73E-2, 6.67E-2, 6.60E-2, 6.53E-2, 6.46E-2, 6.39E-2, 6.31E-2, 6.23E-2, 6.14E-2, 6.06E-2, 5.96E-2},
00169 { 4.00, 5.71E-2, 5.64E-2, 5.57E-2, 5.49E-2, 5.41E-2, 5.32E-2, 5.23E-2, 5.14E-2, 5.05E-2, 4.95E-2, 4.85E-2},
00170 { 4.50, 4.88E-2, 4.80E-2, 4.72E-2, 4.64E-2, 4.55E-2, 4.46E-2, 4.37E-2, 4.27E-2, 4.17E-2, 4.07E-2, 3.97E-2},
00171 { 5.00, 4.20E-2, 4.12E-2, 4.03E-2, 3.95E-2, 3.86E-2, 3.76E-2, 3.67E-2, 3.57E-2, 3.47E-2, 3.36E-2, 3.26E-2},
00172 { 5.50, 3.64E-2, 3.55E-2, 3.47E-2, 3.38E-2, 3.29E-2, 3.19E-2, 3.10E-2, 3.00E-2, 2.90E-2, 2.80E-2, 2.69E-2},
00173 { 6.00, 3.17E-2, 3.09E-2, 3.00E-2, 2.91E-2, 2.82E-2, 2.73E-2, 2.63E-2, 2.53E-2, 2.44E-2, 2.33E-2, 2.23E-2},
00174 { 6.50, 2.78E-2, 2.70E-2, 2.61E-2, 2.52E-2, 2.43E-2, 2.34E-2, 2.25E-2, 2.15E-2, 2.06E-2, 1.96E-2, 1.86E-2},
00175 { 7.00, 2.45E-2, 2.37E-2, 2.29E-2, 2.20E-2, 2.11E-2, 2.02E-2, 1.93E-2, 1.84E-2, 1.74E-2, 1.65E-2, 1.55E-2},
00176 { 7.50, 2.18E-2, 2.09E-2, 2.01E-2, 1.93E-2, 1.84E-2, 1.76E-2, 1.67E-2, 1.58E-2, 1.49E-2, 1.39E-2, 1.30E-2},
00177 { 8.00, 1.94E-2, 1.86E-2, 1.78E-2, 1.70E-2, 1.62E-2, 1.53E-2, 1.45E-2, 1.36E-2, 1.27E-2, 1.18E-2, 1.09E-2},
00178 { 8.50, 1.74E-2, 1.66E-2, 1.58E-2, 1.50E-2, 1.42E-2, 1.34E-2, 1.26E-2, 1.18E-2, 1.09E-2, 1.00E-2, 9.17E-3},
00179 { 9.00, 1.57E-2, 1.49E-2, 1.41E-2, 1.34E-2, 1.26E-2, 1.18E-2, 1.10E-2, 1.02E-2, 9.39E-3, 8.56E-3, 7.72E-3},
00180 { 9.50, 1.42E-2, 1.34E-2, 1.27E-2, 1.19E-2, 1.12E-2, 1.04E-2, 9.66E-3, 8.88E-3, 8.09E-3, 7.30E-3, 6.49E-3},
00181 {10.00, 1.28E-2, 1.21E-2, 1.14E-2, 1.07E-2, 9.99E-3, 9.25E-3, 8.51E-3, 7.75E-3, 6.99E-3, 6.23E-3, 5.45E-3},
00182 {11.00, 1.07E-2, 1.00E-2, 9.37E-3, 8.70E-3, 8.02E-3, 7.34E-3, 6.64E-3, 5.95E-3, 5.24E-3, 4.53E-3, 3.81E-3},
00183 {12.00, 9.01E-3, 8.39E-3, 7.77E-3, 7.14E-3, 6.50E-3, 5.87E-3, 5.22E-3, 4.58E-3, 3.93E-3, 3.27E-3, 2.61E-3},
00184 {13.00, 7.35E-3, 6.79E-3, 6.23E-3, 5.68E-3, 5.12E-3, 4.55E-3, 3.99E-3, 3.43E-3, 2.86E-3, 2.29E-3, 1.73E-3},
00185 {14.00, 5.54E-3, 5.08E-3, 4.63E-3, 4.18E-3, 3.73E-3, 3.28E-3, 2.84E-3, 2.40E-3, 1.97E-3, 1.54E-3, 1.11E-3},
00186 {15.00, 3.97E-3, 3.61E-3, 3.27E-3, 2.92E-3, 2.59E-3, 2.26E-3, 1.93E-3, 1.62E-3, 1.31E-3, 1.00E-3, 7.05E-4},
00187 {16.00, 2.81E-3, 2.54E-3, 2.28E-3, 2.02E-3, 1.78E-3, 1.54E-3, 1.30E-3, 1.08E-3, 8.59E-4, 6.49E-4, 4.48E-4},
00188 {17.00, 2.00E-3, 1.80E-3, 1.60E-3, 1.41E-3, 1.23E-3, 1.05E-3, 8.82E-4, 7.21E-4, 5.68E-4, 4.23E-4, 2.86E-4},
00189 {18.00, 1.44E-3, 1.29E-3, 1.14E-3, 9.93E-4, 8.56E-4, 7.26E-4, 6.03E-4, 4.87E-4, 3.79E-4, 2.77E-4, 1.83E-4},
00190 {19.00, 1.05E-3, 9.32E-4, 8.17E-4, 7.08E-4, 6.05E-4, 5.08E-4, 4.17E-4, 3.33E-4, 2.55E-4, 1.83E-4, 1.18E-4},
00191 {20.00, 7.77E-4, 6.83E-4, 5.94E-4, 5.10E-4, 4.32E-4, 3.59E-4, 2.91E-4, 2.29E-4, 1.72E-4, 1.21E-4, 7.58E-5},
00192 {22.00, 4.31E-4, 3.73E-4, 3.20E-4, 2.70E-4, 2.24E-4, 1.82E-4, 1.44E-4, 1.10E-4, 7.96E-5, 5.34E-5, 3.11E-5},
00193 {24.00, 2.40E-4, 2.05E-4, 1.73E-4, 1.43E-4, 1.16E-4, 9.22E-5, 7.08E-5, 5.32E-5, 3.63E-5, 2.30E-5, 1.23E-5},
00194 {26.00, 1.30E-4, 1.09E-4, 9.02E-5, 7.34E-5, 5.84E-5, 4.51E-5, 3.37E-5, 2.39E-5, 1.58E-5, 0, 0}};
00195
00196
00197
00198 static double vavilovPdfValues3[41][12]={
00199 {-3.50, 0, 0, 0, 0, 1.00E-5, 1.06E-5, 1.11E-5, 1.18E-5, 1.24E-5, 1.31E-5, 1.38E-5},
00200 {-3.00, 7.45E-4, 7.82E-4, 8.21E-4, 8.62E-4, 9.05E-4, 9.50E-4, 9.98E-4, 1.05E-3, 1.10E-3, 1.15E-3, 1.21E-3},
00201 {-2.50, 1.07E-2, 1.11E-2, 1.16E-2, 1.21E-2, 1.27E-2, 1.33E-2, 1.38E-2, 1.45E-2, 1.51E-2, 1.58E-2, 1.65E-2},
00202 {-2.00, 4.86E-2, 5.05E-2, 5.25E-2, 5.46E-2, 5.67E-2, 5.90E-2, 6.13E-2, 6.37E-2, 6.62E-2, 6.88E-2, 7.15E-2},
00203 {-1.50, 1.11E-1, 1.15E-1, 1.19E-1, 1.23E-1, 1.27E-1, 1.32E-1, 1.36E-1, 1.41E-1, 1.45E-1, 1.50E-1, 1.55E-1},
00204 {-1.00, 1.67E-1, 1.72E-1, 1.77E-1, 1.82E-1, 1.88E-1, 1.93E-1, 1.99E-1, 2.04E-1, 2.10E-1, 2.16E-1, 2.22E-1},
00205 {-0.50, 1.96E-1, 2.01E-1, 2.06E-1, 2.10E-1, 2.15E-1, 2.20E-1, 2.26E-1, 2.31E-1, 2.36E-1, 2.42E-1, 2.47E-1},
00206 { 0.00, 1.98E-1, 2.01E-1, 2.05E-1, 2.09E-1, 2.13E-1, 2.17E-1, 2.21E-1, 2.25E-1, 2.28E-1, 2.32E-1, 2.37E-1},
00207 { 0.50, 1.83E-1, 1.85E-1, 1.88E-1, 1.90E-1, 1.93E-1, 1.95E-1, 1.98E-1, 2.00E-1, 2.02E-1, 2.05E-1, 2.07E-1},
00208 { 1.00, 1.60E-1, 1.62E-1, 1.63E-1, 1.65E-1, 1.66E-1, 1.67E-1, 1.68E-1, 1.69E-1, 1.70E-1, 1.71E-1, 1.72E-1},
00209 { 1.50, 1.37E-1, 1.38E-1, 1.38E-1, 1.39E-1, 1.39E-1, 1.39E-1, 1.39E-1, 1.39E-1, 1.39E-1, 1.39E-1, 1.39E-1},
00210 { 2.00, 1.16E-1, 1.16E-1, 1.16E-1, 1.15E-1, 1.15E-1, 1.14E-1, 1.14E-1, 1.13E-1, 1.13E-1, 1.12E-1, 1.11E-1},
00211 { 2.50, 9.75E-2, 9.69E-2, 9.62E-2, 9.54E-2, 9.45E-2, 9.36E-2, 9.26E-2, 9.16E-2, 9.04E-2, 8.92E-2, 8.79E-2},
00212 { 3.00, 8.21E-2, 8.11E-2, 8.01E-2, 7.90E-2, 7.79E-2, 7.66E-2, 7.54E-2, 7.40E-2, 7.26E-2, 7.10E-2, 6.94E-2},
00213 { 3.50, 6.93E-2, 6.82E-2, 6.70E-2, 6.57E-2, 6.43E-2, 6.29E-2, 6.15E-2, 5.99E-2, 5.83E-2, 5.67E-2, 5.49E-2},
00214 { 4.00, 5.89E-2, 5.76E-2, 5.63E-2, 5.49E-2, 5.34E-2, 5.19E-2, 5.04E-2, 4.88E-2, 4.71E-2, 4.53E-2, 4.35E-2},
00215 { 4.50, 5.03E-2, 4.90E-2, 4.76E-2, 4.61E-2, 4.46E-2, 4.31E-2, 4.15E-2, 3.99E-2, 3.82E-2, 3.64E-2, 3.46E-2},
00216 { 5.00, 4.33E-2, 4.19E-2, 4.05E-2, 3.90E-2, 3.75E-2, 3.60E-2, 3.44E-2, 3.27E-2, 3.11E-2, 2.93E-2, 2.75E-2},
00217 { 5.50, 3.75E-2, 3.61E-2, 3.47E-2, 3.32E-2, 3.17E-2, 3.02E-2, 2.86E-2, 2.70E-2, 2.54E-2, 2.37E-2, 2.20E-2},
00218 { 6.00, 3.27E-2, 3.13E-2, 2.99E-2, 2.85E-2, 2.70E-2, 2.55E-2, 2.40E-2, 2.24E-2, 2.08E-2, 1.92E-2, 1.75E-2},
00219 { 6.50, 2.86E-2, 2.73E-2, 2.59E-2, 2.45E-2, 2.31E-2, 2.17E-2, 2.02E-2, 1.87E-2, 1.71E-2, 1.55E-2, 1.39E-2},
00220 { 7.00, 2.53E-2, 2.40E-2, 2.26E-2, 2.13E-2, 1.99E-2, 1.85E-2, 1.70E-2, 1.56E-2, 1.41E-2, 1.26E-2, 1.11E-2},
00221 { 7.50, 2.24E-2, 2.11E-2, 1.98E-2, 1.85E-2, 1.72E-2, 1.58E-2, 1.45E-2, 1.31E-2, 1.16E-2, 1.02E-2, 8.73E-3},
00222 { 8.00, 1.98E-2, 1.86E-2, 1.74E-2, 1.61E-2, 1.48E-2, 1.35E-2, 1.22E-2, 1.09E-2, 9.57E-3, 8.21E-3, 6.83E-3},
00223 { 8.50, 1.74E-2, 1.62E-2, 1.51E-2, 1.39E-2, 1.27E-2, 1.15E-2, 1.03E-2, 9.04E-3, 7.80E-3, 6.55E-3, 5.29E-3},
00224 { 9.00, 1.50E-2, 1.39E-2, 1.28E-2, 1.18E-2, 1.07E-2, 9.57E-3, 8.47E-3, 7.37E-3, 6.27E-3, 5.16E-3, 4.06E-3},
00225 { 9.50, 1.27E-2, 1.17E-2, 1.07E-2, 9.77E-3, 8.80E-3, 7.84E-3, 6.88E-3, 5.92E-3, 4.97E-3, 4.03E-3, 3.09E-3},
00226 {10.00, 1.05E-2, 9.69E-3, 8.84E-3, 7.99E-3, 7.16E-3, 6.33E-3, 5.51E-3, 4.70E-3, 3.90E-3, 3.11E-3, 2.33E-3},
00227 {11.00, 7.12E-3, 6.48E-3, 5.85E-3, 5.23E-3, 4.62E-3, 4.03E-3, 3.45E-3, 2.89E-3, 2.35E-3, 1.83E-3, 1.32E-3},
00228 {12.00, 4.77E-3, 4.30E-3, 3.84E-3, 3.39E-3, 2.96E-3, 2.54E-3, 2.15E-3, 1.77E-3, 1.41E-3, 1.07E-3, 7.45E-4},
00229 {13.00, 3.21E-3, 2.86E-3, 2.53E-3, 2.21E-3, 1.90E-3, 1.61E-3, 1.34E-3, 1.08E-3, 8.42E-4, 6.21E-4, 4.18E-4},
00230 {14.00, 2.18E-3, 1.92E-3, 1.68E-3, 1.45E-3, 1.23E-3, 1.03E-3, 8.38E-4, 6.65E-4, 5.06E-4, 3.62E-4, 2.34E-4},
00231 {15.00, 1.49E-3, 1.30E-3, 1.12E-3, 9.53E-4, 7.99E-4, 6.57E-4, 5.27E-4, 4.09E-4, 3.04E-4, 2.11E-4, 1.30E-4},
00232 {16.00, 1.01E-3, 8.76E-4, 7.47E-4, 6.28E-4, 5.19E-4, 4.20E-4, 3.31E-4, 2.51E-4, 1.81E-4, 1.21E-4, 7.12E-5},
00233 {17.00, 6.88E-4, 5.88E-4, 4.96E-4, 4.12E-4, 3.35E-4, 2.67E-4, 2.06E-4, 1.53E-4, 1.07E-4, 6.91E-5, 3.84E-5},
00234 {18.00, 4.60E-4, 3.89E-4, 3.24E-4, 2.66E-4, 2.13E-4, 1.67E-4, 1.26E-4, 9.16E-5, 6.25E-5, 3.87E-5, 2.03E-5},
00235 {19.00, 3.01E-4, 2.52E-4, 2.07E-4, 1.68E-4, 1.33E-4, 1.02E-4, 7.62E-5, 5.41E-5, 3.59E-5, 2.15E-5, 1.07E-5},
00236 {20.00, 1.94E-4, 1.61E-4, 1.31E-4, 1.05E-4, 8.18E-5, 6.21E-5, 4.55E-5, 3.17E-5, 2.06E-5, 1.20E-5, 0},
00237 {22.00, 7.97E-5, 6.47E-5, 5.16E-5, 4.03E-5, 3.07E-5, 2.27E-5, 1.61E-5, 1.08E-5, 0, 0, 0},
00238 {24.00, 3.26E-5, 2.59E-5, 2.01E-5, 1.53E-5, 1.12E-5, 0, 0, 0, 0, 0, 0},
00239 {26.00, 1.33E-5, 1.04E-5, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
00240
00241
00242
00243 static double vavilovPdfValues4[28][12]={
00244 {-3.50, 1.07E-5, 1.26E-5, 1.47E-5, 1.73E-5, 2.03E-5, 2.37E-5, 2.78E-5, 3.26E-5, 3.82E-5, 4.48E-5, 5.24E-5},
00245 {-3.00, 1.00E-3, 1.16E-3, 1.33E-3, 1.53E-3, 1.75E-3, 2.02E-3, 2.32E-3, 2.66E-3, 3.05E-3, 3.50E-3, 4.02E-3},
00246 {-2.50, 1.44E-2, 1.62E-2, 1.83E-2, 2.06E-2, 2.32E-2, 2.61E-2, 2.93E-2, 3.30E-2, 3.71E-2, 4.17E-2, 4.68E-2},
00247 {-2.00, 6.56E-2, 7.25E-2, 8.00E-2, 8.83E-2, 9.74E-2, 1.07E-1, 1.18E-1, 1.30E-1, 1.43E-1, 1.57E-1, 1.73E-1},
00248 {-1.50, 1.50E-1, 1.62E-1, 1.76E-1, 1.90E-1, 2.05E-1, 2.21E-1, 2.38E-1, 2.57E-1, 2.76E-1, 2.97E-1, 3.19E-1},
00249 {-1.00, 2.26E-1, 2.40E-1, 2.54E-1, 2.69E-1, 2.84E-1, 3.00E-1, 3.16E-1, 3.32E-1, 3.49E-1, 3.66E-1, 3.83E-1},
00250 {-0.50, 2.65E-1, 2.75E-1, 2.85E-1, 2.96E-1, 3.05E-1, 3.15E-1, 3.24E-1, 3.32E-1, 3.40E-1, 3.47E-1, 3.52E-1},
00251 { 0.00, 2.66E-1, 2.71E-1, 2.76E-1, 2.79E-1, 2.82E-1, 2.84E-1, 2.84E-1, 2.84E-1, 2.82E-1, 2.78E-1, 2.73E-1},
00252 { 0.50, 2.44E-1, 2.43E-1, 2.42E-1, 2.39E-1, 2.36E-1, 2.31E-1, 2.25E-1, 2.18E-1, 2.09E-1, 1.99E-1, 1.88E-1},
00253 { 1.00, 2.07E-1, 2.03E-1, 1.97E-1, 1.91E-1, 1.83E-1, 1.75E-1, 1.65E-1, 1.55E-1, 1.44E-1, 1.31E-1, 1.18E-1},
00254 { 1.50, 1.66E-1, 1.59E-1, 1.51E-1, 1.43E-1, 1.34E-1, 1.24E-1, 1.14E-1, 1.03E-1, 9.21E-2, 8.05E-2, 6.86E-2},
00255 { 2.00, 1.26E-1, 1.18E-1, 1.10E-1, 1.01E-1, 9.25E-2, 8.35E-2, 7.43E-2, 6.51E-2, 5.58E-2, 4.66E-2, 3.75E-2},
00256 { 2.50, 9.11E-2, 8.37E-2, 7.62E-2, 6.87E-2, 6.11E-2, 5.36E-2, 4.63E-2, 3.91E-2, 3.22E-2, 2.56E-2, 1.94E-2},
00257 { 3.00, 6.35E-2, 5.71E-2, 5.09E-2, 4.48E-2, 3.88E-2, 3.31E-2, 2.77E-2, 2.26E-2, 1.78E-2, 1.35E-2, 9.60E-3},
00258 { 3.50, 4.28E-2, 3.77E-2, 3.29E-2, 2.82E-2, 2.39E-2, 1.98E-2, 1.60E-2, 1.26E-2, 9.52E-3, 6.84E-3, 4.55E-3},
00259 { 4.00, 2.79E-2, 2.41E-2, 2.06E-2, 1.72E-2, 1.42E-2, 1.14E-2, 8.95E-3, 6.78E-3, 4.91E-3, 3.35E-3, 2.08E-3},
00260 { 4.50, 1.77E-2, 1.50E-2, 1.25E-2, 1.02E-2, 8.21E-3, 6.42E-3, 4.87E-3, 3.55E-3, 2.46E-3, 1.59E-3, 9.22E-4},
00261 { 5.00, 1.10E-2, 9.10E-3, 7.42E-3, 5.93E-3, 4.63E-3, 3.51E-3, 2.58E-3, 1.81E-3, 1.20E-3, 7.34E-4, 3.96E-4},
00262 { 5.50, 6.65E-3, 5.39E-3, 4.30E-3, 3.35E-3, 2.55E-3, 1.88E-3, 1.33E-3, 9.02E-4, 5.72E-4, 3.30E-4, 1.66E-4},
00263 { 6.00, 3.93E-3, 3.13E-3, 2.44E-3, 1.85E-3, 1.37E-3, 9.83E-4, 6.75E-4, 4.39E-4, 2.66E-4, 1.45E-4, 6.73E-5},
00264 { 6.50, 2.28E-3, 1.78E-3, 1.35E-3, 1.01E-3, 7.25E-4, 5.04E-4, 3.34E-4, 2.09E-4, 1.21E-4, 6.24E-5, 2.68E-5},
00265 { 7.00, 1.30E-3, 9.91E-4, 7.38E-4, 5.35E-4, 3.76E-4, 2.53E-4, 1.63E-4, 9.79E-5, 5.41E-5, 2.64E-5, 1.05E-5},
00266 { 7.50, 7.27E-4, 5.43E-4, 3.96E-4, 2.80E-4, 1.91E-4, 1.25E-4, 7.76E-5, 4.49E-5, 2.36E-5, 1.08E-5, 0},
00267 { 8.00, 4.00E-4, 2.92E-4, 2.08E-4, 1.44E-4, 9.57E-5, 6.08E-5, 3.64E-5, 2.02E-5, 1.02E-5, 0, 0},
00268 { 8.50, 2.17E-4, 1.55E-4, 1.08E-4, 7.29E-5, 4.72E-5, 2.91E-5, 1.69E-5, 0, 0, 0, 0},
00269 { 9.00, 1.16E-4, 8.12E-5, 5.53E-5, 3.63E-5, 2.29E-5, 1.37E-5, 0, 0, 0, 0, 0},
00270 { 9.50, 6.08E-5, 4.19E-5, 2.79E-5, 1.79E-5, 1.09E-5, 0, 0, 0, 0, 0, 0},
00271 {10.00, 3.17E-5, 2.13E-5, 1.39E-5, 0, 0, 0, 0, 0, 0, 0, 0}};
00272
00273
00274
00275 static double vavilovPdfValues5[22][12]={
00276 {-3.50, 1.44E-5, 1.83E-5, 2.32E-5, 2.95E-5, 3.75E-5, 4.76E-5, 6.04E-5, 7.69E-5, 9.72E-5, 1.23E-4, 1.56E-4},
00277 {-3.00, 1.36E-3, 1.67E-3, 2.04E-3, 2.50E-3, 3.07E-3, 3.76E-3, 4.60E-3, 5.62E-3, 6.87E-3, 8.39E-3, 1.02E-2},
00278 {-2.50, 1.94E-2, 2.30E-2, 2.72E-2, 3.22E-2, 3.81E-2, 4.49E-2, 5.29E-2, 6.23E-2, 7.33E-2, 8.61E-2, 1.01E-1},
00279 {-2.00, 8.86E-2, 1.01E-1, 1.16E-1, 1.32E-1, 1.50E-1, 1.71E-1, 1.94E-1, 2.19E-1, 2.47E-1, 2.79E-1, 3.13E-1},
00280 {-1.50, 2.02E-1, 2.23E-1, 2.46E-1, 2.70E-1, 2.96E-1, 3.23E-1, 3.52E-1, 3.82E-1, 4.13E-1, 4.44E-1, 4.76E-1},
00281 {-1.00, 3.03E-1, 3.23E-1, 3.42E-1, 3.62E-1, 3.81E-1, 3.99E-1, 4.15E-1, 4.30E-1, 4.42E-1, 4.52E-1, 4.57E-1},
00282 {-0.50, 3.44E-1, 3.54E-1, 3.62E-1, 3.68E-1, 3.71E-1, 3.72E-1, 3.70E-1, 3.64E-1, 3.54E-1, 3.40E-1, 3.22E-1},
00283 { 0.00, 3.23E-1, 3.20E-1, 3.15E-1, 3.09E-1, 2.97E-1, 2.85E-1, 2.69E-1, 2.51E-1, 2.30E-1, 2.07E-1, 1.81E-1},
00284 { 0.50, 2.60E-1, 2.49E-1, 2.36E-1, 2.21E-1, 2.05E-1, 1.87E-1, 1.68E-1, 1.48E-1, 1.27E-1, 1.06E-1, 8.54E-2},
00285 { 1.00, 1.86E-1, 1.72E-1, 1.57E-1, 1.41E-1, 1.25E-1, 1.09E-1, 9.28E-2, 7.71E-2, 6.20E-2, 4.79E-2, 3.50E-2},
00286 { 1.50, 1.21E-1, 1.08E-1, 9.44E-2, 8.15E-2, 6.91E-2, 5.73E-2, 4.63E-2, 3.62E-2, 2.72E-2, 1.93E-2, 1.28E-2},
00287 { 2.00, 7.20E-2, 6.19E-2, 5.22E-2, 4.33E-2, 3.51E-2, 2.79E-2, 2.11E-2, 1.55E-2, 1.09E-2, 7.11E-3, 4.22E-3},
00288 { 2.50, 3.99E-2, 3.31E-2, 2.69E-2, 2.13E-2, 1.65E-2, 1.24E-2, 8.97E-3, 6.19E-3, 4.02E-3, 2.41E-3, 1.28E-3},
00289 { 3.00, 2.07E-2, 1.66E-2, 1.30E-2, 9.87E-3, 7.30E-3, 5.21E-3, 3.56E-3, 2.31E-3, 1.39E-3, 7.61E-4, 3.60E-4},
00290 { 3.50, 1.02E-2, 7.84E-3, 5.89E-3, 4.31E-3, 3.04E-3, 2.06E-3, 1.33E-3, 8.09E-4, 4.52E-4, 2.26E-4, 9.47E-5},
00291 { 4.00, 4.74E-3, 3.52E-3, 2.55E-3, 1.78E-3, 1.20E-3, 7.76E-4, 4.73E-4, 2.69E-4, 1.39E-4, 6.32E-5, 2.34E-5},
00292 { 4.50, 2.10E-3, 1.51E-3, 1.05E-3, 7.05E-4, 4.54E-4, 2.78E-4, 1.60E-4, 8.52E-5, 4.08E-5, 1.68E-5, 0},
00293 { 5.00, 8.98E-4, 6.21E-4, 4.15E-4, 2.67E-4, 1.64E-4, 9.55E-5, 5.19E-5, 2.58E-5, 1.14E-5, 0, 0},
00294 { 5.50, 3.68E-4, 2.45E-4, 1.58E-4, 9.71E-5, 5.70E-5, 3.15E-5, 1.61E-5, 0, 0, 0, 0},
00295 { 6.00, 1.45E-4, 9.32E-5, 5.76E-5, 3.41E-5, 1.91E-5, 1.00E-5, 0, 0, 0, 0, 0},
00296 { 6.50, 5.53E-5, 3.43E-5, 2.04E-5, 1.15E-5, 0, 0, 0, 0, 0, 0, 0},
00297 { 7.00, 2.04E-5, 1.22E-5, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
00298
00299
00300
00301 static double vavilovPdfValues6[19][12]={
00302 {-3.50, 1.94E-5, 2.64E-5, 3.59E-5, 4.87E-5, 6.61E-5, 8.96E-5, 1.21E-4, 1.64E-4, 2.22E-4, 3.00E-4, 4.05E-4},
00303 {-3.00, 1.83E-3, 2.37E-3, 3.06E-3, 3.94E-3, 5.08E-3, 6.53E-3, 8.39E-3, 1.08E-2, 1.38E-2, 1.76E-2, 2.25E-2},
00304 {-2.50, 2.62E-2, 3.22E-2, 3.95E-2, 4.84E-2, 5.91E-2, 7.20E-2, 8.76E-2, 1.06E-1, 1.28E-1, 1.55E-1, 1.86E-1},
00305 {-2.00, 1.19E-1, 1.39E-1, 1.63E-1, 1.89E-1, 2.18E-1, 2.51E-1, 2.88E-1, 3.29E-1, 3.74E-1, 4.23E-1, 4.75E-1},
00306 {-1.50, 2.69E-1, 2.99E-1, 3.31E-1, 3.64E-1, 3.97E-1, 4.31E-1, 4.65E-1, 4.97E-1, 5.26E-1, 5.52E-1, 5.73E-1},
00307 {-1.00, 3.85E-1, 4.07E-1, 4.26E-1, 4.43E-1, 4.56E-1, 4.66E-1, 4.69E-1, 4.67E-1, 4.58E-1, 4.42E-1, 4.17E-1},
00308 {-0.50, 4.01E-1, 4.02E-1, 4.00E-1, 3.92E-1, 3.80E-1, 3.63E-1, 3.42E-1, 3.15E-1, 2.84E-1, 2.49E-1, 2.11E-1},
00309 { 0.00, 3.29E-1, 3.13E-1, 2.94E-1, 2.73E-1, 2.49E-1, 2.22E-1, 1.94E-1, 1.65E-1, 1.36E-1, 1.08E-1, 8.10E-2},
00310 { 0.50, 2.23E-1, 2.02E-1, 1.80E-1, 1.57E-1, 1.34E-1, 1.12E-1, 9.10E-2, 7.13E-2, 5.35E-2, 3.80E-2, 2.50E-2},
00311 { 1.00, 1.29E-1, 1.11E-1, 9.38E-2, 7.73E-2, 6.21E-2, 4.84E-2, 3.64E-2, 2.61E-2, 1.78E-2, 1.12E-2, 6.42E-3},
00312 { 1.50, 6.60E-2, 5.39E-2, 4.30E-2, 3.34E-2, 2.51E-2, 1.83E-2, 1.27E-2, 8.37E-3, 5.15E-3, 2.88E-3, 1.42E-3},
00313 { 2.00, 3.01E-2, 2.33E-2, 1.76E-2, 1.29E-2, 9.10E-3, 6.15E-3, 3.95E-3, 2.38E-3, 1.32E-3, 6.54E-4, 2.74E-4},
00314 { 2.50, 1.24E-2, 9.15E-3, 6.53E-3, 4.50E-3, 2.98E-3, 1.88E-3, 1.11E-3, 6.12E-4, 3.05E-4, 1.33E-4, 4.73E-5},
00315 { 3.00, 4.71E-3, 3.29E-3, 2.22E-3, 1.44E-3, 8.94E-4, 5.24E-4, 2.87E-4, 1.44E-4, 6.44E-5, 2.46E-5, 0},
00316 { 3.50, 1.65E-3, 1.09E-3, 6.99E-4, 4.28E-4, 2.48E-4, 1.35E-4, 6.81E-5, 3.11E-5, 1.55E-5, 0, 0},
00317 { 4.00, 5.38E-4, 3.39E-4, 2.05E-4, 1.18E-4, 6.41E-5, 3.24E-5, 1.51E-5, 0, 0, 0, 0},
00318 { 4.50, 1.65E-4, 9.86E-5, 5.64E-5, 3.05E-5, 1.55E-5, 0, 0, 0, 0, 0, 0},
00319 { 5.00, 4.75E-5, 2.70E-5, 1.46E-5, 0, 0, 0, 0, 0, 0, 0, 0},
00320 { 5.50, 1.30E-5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
00321
00322
00323
00324 static double vavilovPdfValues7[20][12]={
00325 {-4.00, 0, 0, 0, 0, 0, 1.32E-5, 3.04E-5, 6.90E-5, 1.55E-4, 3.44E-4, 7.55E-4},
00326 {-3.75, 1.38E-5, 2.98E-5, 6.38E-5, 1.35E-4, 2.83E-4, 5.85E-4, 1.20E-3, 2.41E-3, 4.78E-3, 9.35E-3, 1.80E-2},
00327 {-3.50, 3.81E-4, 7.44E-4, 1.44E-3, 2.73E-3, 5.12E-3, 9.45E-3, 1.71E-2, 3.05E-2, 5.33E-2, 9.11E-2, 1.52E-1},
00328 {-3.25, 4.78E-3, 8.44E-3, 1.47E-2, 2.50E-2, 4.19E-2, 6.88E-2, 1.10E-1, 1.73E-1, 2.64E-1, 3.90E-1, 5.57E-1},
00329 {-3.00, 3.19E-2, 5.08E-2, 7.95E-2, 1.22E-1, 1.82E-1, 2.64E-1, 3.73E-1, 5.11E-1, 6.75E-1, 8.56E-1, 1.03E+0},
00330 {-2.75, 1.27E-1, 1.83E-1, 2.56E-1, 3.51E-1, 4.66E-1, 6.00E-1, 7.44E-1, 8.86E-1, 1.01E+0, 1.08E+0, 1.09E+0},
00331 {-2.50, 3.28E-1, 4.26E-1, 5.38E-1, 6.58E-1, 7.77E-1, 8.81E-1, 9.56E-1, 9.85E-1, 9.56E-1, 8.63E-1, 7.14E-1},
00332 {-2.25, 5.89E-1, 6.91E-1, 7.84E-1, 8.57E-1, 8.97E-1, 8.95E-1, 8.46E-1, 7.51E-1, 6.18E-1, 4.65E-1, 3.12E-1},
00333 {-2.00, 7.75E-1, 8.22E-1, 8.37E-1, 8.15E-1, 7.56E-1, 6.63E-1, 5.44E-1, 4.14E-1, 2.88E-1, 1.78E-1, 9.59E-2},
00334 {-1.75, 7.79E-1, 7.45E-1, 6.81E-1, 5.91E-1, 4.85E-1, 3.73E-1, 2.65E-1, 1.72E-1, 1.01E-1, 5.10E-2, 2.17E-2},
00335 {-1.50, 6.16E-1, 5.32E-1, 4.36E-1, 3.38E-1, 2.45E-1, 1.64E-1, 1.01E-1, 5.60E-2, 2.73E-2, 1.13E-2, 3.74E-3},
00336 {-1.25, 3.95E-1, 3.07E-1, 2.26E-1, 1.56E-1, 9.96E-2, 5.85E-2, 3.11E-2, 1.46E-2, 5.90E-3, 1.97E-3, 5.05E-4},
00337 {-1.00, 2.09E-1, 1.47E-1, 9.68E-2, 5.94E-2, 3.35E-2, 1.72E-2, 7.85E-3, 3.12E-3, 1.05E-3, 2.80E-4, 5.49E-5},
00338 {-0.75, 9.33E-2, 5.91E-2, 3.49E-2, 1.91E-2, 9.47E-3, 4.23E-3, 1.66E-3, 5.59E-4, 1.54E-4, 3.29E-5, 0},
00339 {-0.50, 3.56E-2, 2.04E-2, 1.08E-2, 5.22E-3, 2.29E-3, 8.90E-4, 3.00E-4, 8.49E-5, 1.93E-5, 0, 0},
00340 {-0.25, 1.18E-2, 6.07E-3, 2.88E-3, 1.24E-3, 4.78E-4, 1.62E-4, 4.67E-5, 1.12E-5, 0, 0, 0},
00341 { 0.00, 3.41E-3, 1.59E-3, 6.74E-4, 2.58E-4, 8.75E-5, 2.57E-5, 0, 0, 0, 0, 0},
00342 { 0.25, 8.74E-4, 3.67E-4, 1.40E-4, 4.74E-5, 1.42E-5, 0, 0, 0, 0, 0, 0},
00343 { 0.50, 2.00E-4, 7.57E-5, 2.58E-5, 0, 0, 0, 0, 0, 0, 0, 0},
00344 { 0.75, 4.11E-5, 1.41E-5, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
00345
00346
00347
00348 static double vavilovPdfValues8[21][12]={
00349 {-4.40, 0, 0, 0, 0, 0, 0, 0, 0, 1.11E-5, 3.90E-5, 1.33E-4},
00350 {-4.20, 0, 0, 0, 0, 0, 2.17E-5, 6.93E-5, 2.15E-4, 6.46E-4, 1.88E-3, 5.28E-3},
00351 {-4.00, 0, 1.07E-5, 3.24E-5, 9.54E-5, 2.73E-4, 7.60E-4, 2.04E-3, 5.31E-3, 1.33E-2, 3.18E-2, 7.28E-2},
00352 {-3.80, 1.11E-4, 2.99E-4, 7.80E-4, 1.97E-3, 4.82E-3, 1.14E-2, 2.57E-2, 5.57E-2, 1.15E-1, 2.24E-1, 4.12E-1},
00353 {-3.60, 1.77E-3, 4.11E-3, 9.26E-3, 2.01E-2, 4.18E-2, 8.32E-2, 1.58E-1, 2.83E-1, 4.78E-1, 7.51E-1, 1.09E+0},
00354 {-3.40, 1.54E-2, 3.10E-2, 6.01E-2, 1.12E-1, 1.97E-1, 3.31E-1, 5.23E-1, 7.74E-1, 1.06E+0, 1.33E+0, 1.50E+0},
00355 {-3.20, 7.96E-2, 1.39E-1, 2.33E-1, 3.69E-1, 5.54E-1, 7.81E-1, 1.02E+0, 1.24E+0, 1.37E+0, 1.35E+0, 1.17E+0},
00356 {-3.00, 2.63E-1, 3.99E-1, 5.74E-1, 7.78E-1, 9.89E-1, 1.17E+0, 1.27E+0, 1.25E+0, 1.10E+0, 8.46E-1, 5.51E-1},
00357 {-2.80, 5.86E-1, 7.71E-1, 9.54E-1, 1.10E+0, 1.18E+0, 1.17E+0, 1.04E+0, 8.35E-1, 5.83E-1, 3.46E-1, 1.68E-1},
00358 {-2.60, 9.21E-1, 1.05E+0, 1.12E+0, 1.10E+0, 9.97E-1, 8.19E-1, 6.02E-1, 3.88E-1, 2.14E-1, 9.71E-2, 3.44E-2},
00359 {-2.40, 1.06E+0, 1.04E+0, 9.55E-1, 8.02E-1, 6.12E-1, 4.18E-1, 2.52E-1, 1.30E-1, 5.63E-2, 1.94E-2, 4.95E-3},
00360 {-2.20, 9.18E-1, 7.85E-1, 6.16E-1, 4.40E-1, 2.83E-1, 1.61E-1, 7.89E-2, 3.27E-2, 1.10E-2, 2.84E-3, 5.18E-4},
00361 {-2.00, 6.17E-1, 4.57E-1, 3.08E-1, 1.87E-1, 1.01E-1, 4.75E-2, 1.90E-2, 6.29E-3, 1.64E-3, 3.16E-4, 4.05E-5},
00362 {-1.80, 3.28E-1, 2.10E-1, 1.22E-1, 6.30E-2, 2.85E-2, 1.11E-2, 3.62E-3, 9.50E-4, 1.91E-4, 2.78E-5, 0},
00363 {-1.60, 1.41E-1, 7.84E-2, 3.89E-2, 1.71E-2, 6.49E-3, 2.09E-3, 5.52E-4, 1.15E-4, 1.77E-5, 0, 0},
00364 {-1.40, 4.99E-2, 2.40E-2, 1.02E-2, 3.80E-3, 1.21E-3, 3.22E-4, 6.88E-5, 1.13E-5, 0, 0, 0},
00365 {-1.20, 1.47E-2, 6.10E-3, 2.23E-3, 7.05E-4, 1.88E-4, 4.12E-5, 0, 0, 0, 0, 0},
00366 {-1.00, 3.64E-3, 1.31E-3, 4.11E-4, 1.10E-4, 2.46E-5, 0, 0, 0, 0, 0, 0},
00367 {-0.80, 7.71E-4, 2.40E-4, 6.46E-5, 1.47E-5, 0, 0, 0, 0, 0, 0, 0},
00368 {-0.60, 1.41E-4, 3.80E-5, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00369 {-0.40, 2.24E-5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
00370
00371
00372
00373 static double vavilovPdfValues9[21][12]={
00374 {-4.60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.85E-5, 1.79E-4},
00375 {-4.40, 0, 0, 0, 0, 0, 1.18E-5, 5.14E-5, 2.12E-4, 8.32E-4, 3.08E-3, 1.07E-2},
00376 {-4.20, 0, 0, 1.41E-5, 5.57E-5, 2.10E-4, 7.50E-4, 2.54E-3, 8.11E-3, 2.42E-2, 6.69E-2, 1.70E-1},
00377 {-4.00, 5.27E-5, 1.84E-4, 6.15E-4, 1.95E-3, 5.83E-3, 1.64E-2, 4.32E-2, 1.06E-1, 2.37E-1, 4.82E-1, 8.79E-1},
00378 {-3.80, 1.43E-3, 4.07E-3, 1.10E-2, 2.78E-2, 6.61E-2, 1.46E-1, 2.96E-1, 5.49E-1, 9.16E-1, 1.35E+0, 1.73E+0},
00379 {-3.60, 1.79E-2, 4.17E-2, 9.09E-2, 1.85E-1, 3.46E-1, 5.96E-1, 9.30E-1, 1.30E+0, 1.59E+0, 1.68E+0, 1.47E+0},
00380 {-3.40, 1.16E-1, 2.20E-1, 3.88E-1, 6.29E-1, 9.31E-1, 1.24E+0, 1.48E+0, 1.54E+0, 1.38E+0, 1.02E+0, 5.99E-1},
00381 {-3.20, 4.21E-1, 6.50E-1, 9.23E-1, 1.19E+0, 1.39E+0, 1.44E+0, 1.30E+0, 1.01E+0, 6.46E-1, 3.31E-1, 1.28E-1},
00382 {-3.00, 9.12E-1, 1.15E+0, 1.31E+0, 1.35E+0, 1.24E+0, 9.87E-1, 6.74E-1, 3.84E-1, 1.76E-1, 6.16E-2, 1.53E-2},
00383 {-2.80, 1.25E+0, 1.28E+0, 1.18E+0, 9.66E-1, 6.92E-1, 4.25E-1, 2.18E-1, 9.11E-2, 2.95E-2, 6.96E-3, 1.09E-3},
00384 {-2.60, 1.13E+0, 9.45E-1, 7.01E-1, 4.56E-1, 2.55E-1, 1.20E-1, 4.64E-2, 1.41E-2, 3.19E-3, 5.02E-4, 4.87E-5},
00385 {-2.40, 7.06E-1, 4.80E-1, 2.87E-1, 1.48E-1, 6.46E-2, 2.33E-2, 6.71E-3, 1.47E-3, 2.33E-4, 2.41E-5, 0},
00386 {-2.20, 3.13E-1, 1.73E-1, 8.33E-2, 3.41E-2, 1.16E-2, 3.19E-3, 6.84E-4, 1.08E-4, 1.18E-5, 0, 0},
00387 {-2.00, 1.02E-1, 4.59E-2, 1.77E-2, 5.74E-3, 1.52E-3, 3.19E-4, 5.06E-5, 0, 0, 0, 0},
00388 {-1.80, 2.48E-2, 9.10E-3, 2.82E-3, 7.24E-4, 1.49E-4, 2.37E-5, 0, 0, 0, 0, 0},
00389 {-1.60, 4.64E-3, 1.38E-3, 3.45E-4, 6.99E-5, 1.11E-5, 0, 0, 0, 0, 0, 0},
00390 {-1.40, 6.77E-4, 1.64E-4, 3.29E-5, 0, 0, 0, 0, 0, 0, 0, 0},
00391 {-1.20, 7.84E-5, 1.55E-5, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
00392
00393 static double (*vavilovPdfValues[10])[12]={vavilovPdfValues0, vavilovPdfValues1, vavilovPdfValues2, vavilovPdfValues3, vavilovPdfValues4, vavilovPdfValues5, vavilovPdfValues6, vavilovPdfValues7, vavilovPdfValues8, vavilovPdfValues9};
00394
00395 static double vavilovKappaValues[10] = {.01, .04, .07, .1, .4, .7, 1, 4, 7, 10};
00396
00397 static int vavilovNLambda[10] = {45, 42, 41, 41, 28, 22, 19, 20, 21, 21};
00398
00399 int VavilovTest::GetSBNKappa () {
00400 return 10;
00401 }
00402
00403 double VavilovTest::GetSBKappa (int ikappa) {
00404 if (ikappa < 0 || ikappa >= VavilovTest::GetSBNKappa()) return -1;
00405 return vavilovKappaValues[ikappa];
00406 }
00407
00408 int VavilovTest::GetSBNBeta2 () {
00409 return 11;
00410 }
00411
00412 double VavilovTest::GetSBBeta2 (int ibeta2) {
00413 if (ibeta2 < 0 || ibeta2 >= VavilovTest::GetSBNBeta2()) return -1;
00414 return 0.1*ibeta2;
00415 }
00416
00417 int VavilovTest::GetSBNLambda (int ikappa) {
00418 if (ikappa < 0 || ikappa >= VavilovTest::GetSBNKappa()) return -1;
00419 return vavilovNLambda[ikappa];
00420 }
00421
00422 double VavilovTest::GetSBLambda (int ikappa, int ilambda) {
00423 if (ikappa < 0 || ikappa >= VavilovTest::GetSBNKappa()) return 0;
00424 if (ilambda < 0 || ilambda >= VavilovTest::GetSBNLambda(ikappa)) return 0;
00425 return vavilovPdfValues[ikappa][ilambda][0];
00426 }
00427
00428 double VavilovTest::GetSBVavilovPdf (int ikappa, int ibeta2, int ilambda) {
00429 if (ikappa < 0 || ikappa >= VavilovTest::GetSBNKappa()) return 0;
00430 if (ibeta2 < 0 || ibeta2 >= VavilovTest::GetSBNBeta2()) return 0;
00431 if (ilambda < 0 || ilambda >= VavilovTest::GetSBNLambda(ikappa)) return 0;
00432 return vavilovPdfValues[ikappa][ilambda][ibeta2+1];
00433 }
00434
00435 static double myRound (double x, double y, double& xmantissa, int digits) {
00436 int exponent;
00437 if (y) exponent = std::floor(std::log10(fabs(y)));
00438 else if (x) exponent = std::floor(std::log10(fabs(x)));
00439 else exponent = 0;
00440 double power = std::pow (10.0, exponent);
00441 double mantissa = y/power;
00442 double dpower = std::pow (10.0, digits-1);
00443 mantissa = roundl (mantissa*dpower)/dpower;
00444 if (mantissa >= 10) {
00445 mantissa *= 0.1;
00446 exponent += 1;
00447 power = std::pow (10.0, exponent);
00448 }
00449 xmantissa = x/power;
00450 mantissa = roundl (xmantissa*dpower)/dpower;
00451 return mantissa*power;
00452 }
00453 double myRound (double x, double y, int digits) {
00454 double xmantissa;
00455 return myRound (x, y, xmantissa, digits);
00456
00457 }
00458
00459 static std::string format (double x, double y, int digits, int width) {
00460 int exponent;
00461 if (y) exponent = std::floor(std::log10(fabs(y)));
00462 else if (x) exponent = std::floor(std::log10(fabs(x)));
00463 else exponent = 0;
00464 double power = std::pow (10.0, exponent);
00465 double mantissa = y/power;
00466 double dpower = std::pow (10.0, digits-1);
00467 mantissa = roundl (mantissa*dpower)/dpower;
00468 if (mantissa >= 10) {
00469 mantissa *= 0.1;
00470 exponent += 1;
00471 }
00472 mantissa = roundl (x/power*dpower)/dpower;
00473
00474 std::stringstream out;
00475 out << std::setw(width-4) << std::fixed << std::setprecision(digits-1) << mantissa;
00476 out << "e" << std::showpos << std::setw(3)<< std::internal << std::setfill('0') << exponent;
00477 return out.str();
00478
00479 }
00480
00481 int VavilovTest::PdfTest (ROOT::Math::Vavilov& v, std::ostream& os) {
00482 double maxabsdiff, maxdiffmantissa, agreefraction, agreediffmantissa;
00483 GetPdfTestParams (v, maxabsdiff, maxdiffmantissa, agreefraction, agreediffmantissa);
00484 return VavilovTest::PdfTest (v, os, maxabsdiff, maxdiffmantissa, agreefraction, agreediffmantissa);
00485 }
00486
00487 int VavilovTest::PdfTest (ROOT::Math::Vavilov& v, std::ostream& os,
00488 double maxabsdiff, double maxdiffmantissa,
00489 double agreefraction, double agreediffmantissa) {
00490
00491 std::ios::fmtflags defaultflags = os.flags();
00492 int defaultwidth = os.width();
00493 int defaultprecision = os.precision();
00494
00495 int nfail = 0;
00496
00497 os << "\n\nTesting Pdf\n\n";
00498
00499 for (int ikappa = 0; ikappa < GetSBNKappa(); ++ikappa) {
00500 double kappa = GetSBKappa (ikappa);
00501 os << "\n\nkappa = " << kappa << "\n\n";
00502
00503 double maxreldiff = 0;
00504 double maxmandiff = 0;
00505 bool pass = true;
00506 int agree = 0;
00507 int disagree = 0;
00508
00509 for (int ilambda = 0; ilambda < GetSBNLambda (ikappa); ++ilambda) {
00510 double lambda = GetSBLambda (ikappa, ilambda);
00511 os << std::setw(5) << std::fixed << std::setprecision(2) << lambda;
00512 double x = lambda;
00513 for (int ibeta = 0; ibeta < GetSBNBeta2(); ++ibeta) {
00514 double beta2 = GetSBBeta2 (ibeta);
00515 v.SetKappaBeta2 (kappa, beta2);
00516 double pdf = v.Pdf(x);
00517 double val = GetSBVavilovPdf (ikappa, ibeta, ilambda);
00518 double diffmantissa;
00519 myRound (pdf-val, val, diffmantissa, 3);
00520
00521 if (val > 0 && pdf > 0) {
00522 double absdiff = fabs(pdf-val);
00523 if (absdiff > maxabsdiff && fabs(diffmantissa) > maxdiffmantissa) {
00524
00525 pass = false;
00526 }
00527 if (fabs(diffmantissa) > 0.006) {
00528 if (absdiff > maxabsdiff) maxabsdiff = absdiff;
00529 if (absdiff/val > maxreldiff) maxreldiff = absdiff/val;
00530 if (fabs(diffmantissa) > maxmandiff) maxmandiff = fabs(diffmantissa);
00531 }
00532 if (fabs(diffmantissa) > agreediffmantissa) ++disagree; else ++agree;
00533 }
00534 if (val == 0)
00535 os << " ";
00536 else if (pdf == 0)
00537 os << " --- ";
00538 else if (fabs(diffmantissa) > 0.006)
00539 os << format (pdf-val, val, 3, 10);
00540 else
00541 os << " 0 ";
00542 }
00543 os << "\n";
00544 }
00545 os.flags (defaultflags);
00546 if (agree < disagree*agreefraction) {
00547 pass = false;
00548
00549 }
00550 if (!pass) ++nfail;
00551 os << "Max abs diff: " << maxabsdiff << ", max rel diff: " << maxreldiff
00552 << ", max diff mantissa: " << std::fixed << std::setprecision(2) << maxmandiff
00553 << ", agree/disagree=" << agree << "/" << disagree
00554 << ", pass=" << pass << std::endl;
00555 }
00556 os << "\n\nNumber of failed tests: " << nfail << std::endl;
00557
00558 os.flags (defaultflags);
00559 os.width(defaultwidth);
00560 os.precision(defaultprecision);
00561
00562 return nfail;
00563 }
00564
00565 static void moments (ROOT::Math::Vavilov& v, double& integral,
00566 double& mean, double& variance,
00567 double& skewness, double& kurtosis) {
00568 int nsteps = 10000;
00569 double t0 = v.GetLambdaMin();
00570 double t1 = v.GetLambdaMax();
00571 double t = t1 - t0;
00572 double dt = t/nsteps;
00573
00574 double sum = 0;
00575 double sumx = 0;
00576 for (int i = 0; i < nsteps; ++i) {
00577 double x = (i+0.5)*dt + t0;
00578 double pdf = v.Pdf(x);
00579 sum += pdf;
00580 sumx += x*pdf;
00581 }
00582 integral = sum*dt;
00583 mean = sumx/sum;
00584 double sumx2 = 0;
00585 double sumx3 = 0;
00586 double sumx4 = 0;
00587 for (int i = 0; i < nsteps; ++i) {
00588 double x = (i+0.5)*dt + t0;
00589 double pdf = v.Pdf(x);
00590 sumx2 += pow(x-mean, 2)*pdf;
00591 sumx3 += pow(x-mean, 3)*pdf;
00592 sumx4 += pow(x-mean, 4)*pdf;
00593 }
00594 variance = sumx2/sum;
00595 skewness = sumx3/sum*pow (variance, -1.5);
00596 kurtosis = sumx4/sum/(variance*variance)-3;
00597 }
00598
00599 void VavilovTest::PrintPdfTable (ROOT::Math::Vavilov& v, std::ostream& os, int digits) {
00600 std::ios::fmtflags defaultflags = os.flags();
00601 int defaultwidth = os.width();
00602 int defaultprecision = os.precision();
00603
00604 for (int ikappa = 0; ikappa < GetSBNKappa(); ++ikappa) {
00605 double kappa = GetSBKappa (ikappa);
00606 os << "\n\nkappa = " << kappa << "\n\n";
00607
00608 for (int ilambda = 0; ilambda < GetSBNLambda (ikappa); ++ilambda) {
00609 double lambda = GetSBLambda (ikappa, ilambda);
00610 os << std::setw(5) << std::fixed << std::setprecision(2) << lambda;
00611 double x = lambda;
00612 for (int ibeta = 0; ibeta < GetSBNBeta2(); ++ibeta) {
00613 double beta2 = GetSBBeta2 (ibeta);
00614 v.SetKappaBeta2 (kappa, beta2);
00615 double pdf = v.Pdf(x);
00616 if (pdf > 0)
00617 os << std::setw(digits+7) << std::scientific << std::setprecision(digits-1) << pdf;
00618 else
00619 os << std::setw(digits+7) << " ";
00620 }
00621 os << "\n";
00622 }
00623 os << "Xmin:";
00624 for (int ibeta = 0; ibeta < GetSBNBeta2(); ++ibeta) {
00625 double beta2 = GetSBBeta2 (ibeta);
00626 v.SetKappaBeta2 (kappa, beta2);
00627 os << std::setw(digits+7) << std::fixed << std::setprecision(digits-1) << v.GetLambdaMin();
00628 }
00629 os << "\n";
00630 os << "Xmax:";
00631 for (int ibeta = 0; ibeta < GetSBNBeta2(); ++ibeta) {
00632 double beta2 = GetSBBeta2 (ibeta);
00633 v.SetKappaBeta2 (kappa, beta2);
00634 os << std::setw(digits+7) << std::fixed << std::setprecision(digits-1) << v.GetLambdaMax();
00635 }
00636 os << "\n";
00637 os << "int: ";
00638 double integral[11], calcmean[11], calcvariance[11], calcskewness[11], calckurtosis[11];
00639 for (int ibeta = 0; ibeta < GetSBNBeta2(); ++ibeta) {
00640 double beta2 = GetSBBeta2 (ibeta);
00641 v.SetKappaBeta2 (kappa, beta2);
00642 moments (v, integral[ibeta], calcmean[ibeta], calcvariance[ibeta], calcskewness[ibeta], calckurtosis[ibeta]);
00643 os << std::setw(digits+7) << std::fixed << std::setprecision(digits+1) << integral[ibeta];
00644 }
00645 os << "\nmean:";
00646 for (int ibeta = 0; ibeta < GetSBNBeta2(); ++ibeta) {
00647 os << std::setw(digits+7) << std::fixed << std::setprecision(digits+1) << calcmean[ibeta];
00648 }
00649 os << "\n ";
00650 for (int ibeta = 0; ibeta < GetSBNBeta2(); ++ibeta) {
00651 double beta2 = GetSBBeta2 (ibeta);
00652 os << std::setw(digits+7) << std::fixed << std::setprecision(digits+1) << v.Mean (kappa, beta2);
00653 }
00654 os << "\nvar: ";
00655 for (int ibeta = 0; ibeta < GetSBNBeta2(); ++ibeta) {
00656 os << std::setw(digits+7) << std::fixed << std::setprecision(digits+1) << calcvariance[ibeta];
00657 }
00658 os << "\n ";
00659 for (int ibeta = 0; ibeta < GetSBNBeta2(); ++ibeta) {
00660 double beta2 = GetSBBeta2 (ibeta);
00661 os << std::setw(digits+7) << std::fixed << std::setprecision(digits+1) << v.Variance (kappa, beta2);
00662 }
00663 os << "\nskew:";
00664 for (int ibeta = 0; ibeta < GetSBNBeta2(); ++ibeta) {
00665 os << std::setw(digits+7) << std::fixed << std::setprecision(digits+1) << calcskewness[ibeta];
00666 }
00667 os << "\n ";
00668 for (int ibeta = 0; ibeta < GetSBNBeta2(); ++ibeta) {
00669 double beta2 = GetSBBeta2 (ibeta);
00670 os << std::setw(digits+7) << std::fixed << std::setprecision(digits+1) << v.Skewness (kappa, beta2);
00671 }
00672 os << "\nkurt:";
00673 for (int ibeta = 0; ibeta < GetSBNBeta2(); ++ibeta) {
00674 os << std::setw(digits+7) << std::fixed << std::setprecision(digits+1) << calckurtosis[ibeta];
00675 }
00676 os << "\n ";
00677 for (int ibeta = 0; ibeta < GetSBNBeta2(); ++ibeta) {
00678 double beta2 = GetSBBeta2 (ibeta);
00679 os << std::setw(digits+7) << std::fixed << std::setprecision(digits+1) << v.Kurtosis (kappa, beta2);
00680 }
00681 os << "\n";
00682 }
00683
00684 os.flags (defaultflags);
00685 os.width(defaultwidth);
00686 os.precision(defaultprecision);
00687 }
00688
00689 int VavilovTest::CdfTest (ROOT::Math::Vavilov& v, std::ostream& os) {
00690 double maxabsdiff, maxcdfdiff;
00691 GetCdfTestParams (v, maxabsdiff, maxcdfdiff);
00692 return VavilovTest::CdfTest (v, os, maxabsdiff, maxcdfdiff);
00693 }
00694
00695 int VavilovTest::CdfTest (ROOT::Math::Vavilov& v, std::ostream& os, double maxabsdiff, double maxcdfdiff) {
00696 std::ios::fmtflags defaultflags = os.flags();
00697 int defaultwidth = os.width();
00698 int defaultprecision = os.precision();
00699
00700 int nfail = 0;
00701
00702 os << "\n\nTesting Cdf and Cdf_c\n\n";
00703
00704 for (int ikappa = 0; ikappa < GetSBNKappa(); ++ikappa) {
00705 double kappa = GetSBKappa (ikappa);
00706 os << "\n\nkappa = " << kappa << "\n\n";
00707
00708 double absdiffmax = 0;
00709 double reldiffmax = 0;
00710 double cdfdiffmax = 0;
00711 bool pass = true;
00712
00713 double cdf_calc[11];
00714 for (int ibeta = 0; ibeta < GetSBNBeta2(); ++ibeta) {
00715 cdf_calc[ibeta] = 0;
00716 }
00717
00718 for (int ilambda = 0; ilambda < GetSBNLambda (ikappa); ++ilambda) {
00719 double lambda1 = GetSBLambda (ikappa, ilambda);
00720 os << std::setw(5) << std::fixed << std::setprecision(2) << lambda1;
00721 for (int ibeta = 0; ibeta < GetSBNBeta2(); ++ibeta) {
00722 double beta2 = GetSBBeta2 (ibeta);
00723 v.SetKappaBeta2 (kappa, beta2);
00724 double lambda0 = (ilambda > 0) ? GetSBLambda (ikappa, ilambda-1) : v.GetLambdaMin();
00725 if (lambda1 > lambda0) {
00726 int n = 100;
00727 double dlambda = (lambda1 - lambda0)/n;
00728 for (int i = 0; i < n; ++i) {
00729 double lambda = lambda0 + (i+0.5)*dlambda;
00730 cdf_calc[ibeta] += v.Pdf(lambda)*dlambda;
00731 }
00732 }
00733
00734 double cdf = v.Cdf(lambda1);
00735 double cdf_c = v.Cdf_c(lambda1);
00736 double val = cdf_calc[ibeta];
00737
00738 if (fabs(cdf-val) > absdiffmax) absdiffmax = fabs(cdf-val);
00739 if (fabs(cdf+cdf_c-1) > cdfdiffmax) cdfdiffmax = cdf+cdf_c-1;
00740 if (val > 0 && fabs(cdf/val-1) > reldiffmax) reldiffmax = fabs(cdf/val-1);
00741
00742 if (val == 0)
00743 os << " ";
00744 else
00745 os << std::scientific << std::setw(10) << std::setprecision(2) << cdf-val;
00746 }
00747 os << "\n";
00748 }
00749 os.flags (defaultflags);
00750 if (absdiffmax > maxabsdiff) pass = false;
00751 if (cdfdiffmax > maxcdfdiff) pass = false;
00752 if (!pass) ++nfail;
00753 os << "Max abs diff: " << absdiffmax << ", max rel diff: " << reldiffmax
00754 << ", max diff cdf+cdf_c-1: " << cdfdiffmax
00755 << ", pass=" << pass << std::endl;
00756 }
00757 os << "\n\nNumber of failed tests: " << nfail << std::endl;
00758
00759 os.flags (defaultflags);
00760 os.width(defaultwidth);
00761 os.precision(defaultprecision);
00762
00763 return nfail;
00764 }
00765
00766 int VavilovTest::QuantileTest (ROOT::Math::Vavilov& v, std::ostream& os) {
00767 double maxabsdiff;
00768 GetQuantileTestParams (v, maxabsdiff);
00769 return VavilovTest::QuantileTest (v, os, maxabsdiff);
00770 }
00771
00772 int VavilovTest::QuantileTest (ROOT::Math::Vavilov& v, std::ostream& os, double maxabsdiff) {
00773 double qmin = 0;
00774
00775 std::ios::fmtflags defaultflags = os.flags();
00776 int defaultwidth = os.width();
00777 int defaultprecision = os.precision();
00778
00779 int nfail = 0;
00780
00781 static const double qvalues[45] = {0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007, 0.008, 0.009,
00782 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09,
00783 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9,
00784 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98, 0.99,
00785 0.991, 0.992, 0.993, 0.994, 0.995, 0.996, 0.997, 0.998, 0.999};
00786
00787 os << "\n\nTesting Quantile\n\n";
00788
00789 for (int ikappa = 0; ikappa < GetSBNKappa(); ++ikappa) {
00790 double kappa = GetSBKappa (ikappa);
00791 os << "\n\nkappa = " << kappa << "\n\n";
00792
00793 double absdiffmax = 0;
00794 bool pass = true;
00795
00796 for (int iq = 0; iq < 45; ++iq) {
00797 double qval = qvalues[iq];
00798 os << std::setw(5) << std::fixed << std::setprecision(3) << qval;
00799 for (int ibeta = 0; ibeta < GetSBNBeta2(); ++ibeta) {
00800 double beta2 = GetSBBeta2 (ibeta);
00801 v.SetKappaBeta2 (kappa, beta2);
00802 double lambda = v.Quantile (qval);
00803 double cdfval = v.Cdf(lambda);
00804 if (qval > qmin && (1-qval) > qmin) {
00805 if (fabs(cdfval-qval) > absdiffmax) absdiffmax = fabs(cdfval-qval);
00806 os << " " << std::fixed << std::setw(7) << std::setprecision(4) << cdfval-qval << " ";
00807 }
00808 else {
00809 os << " (" << std::fixed << std::setw(7) << std::setprecision(4) << cdfval-qval << ")";
00810 }
00811 }
00812 os << "\n";
00813 }
00814 os.flags (defaultflags);
00815 if (absdiffmax > maxabsdiff) pass = false;
00816 if (!pass) ++nfail;
00817 os << "Max abs diff: " << absdiffmax
00818 << ", pass=" << pass << std::endl;
00819 }
00820
00821 os << "\n\nTesting Quantile_c\n\n";
00822
00823 for (int ikappa = 0; ikappa < GetSBNKappa(); ++ikappa) {
00824 double kappa = GetSBKappa (ikappa);
00825 os << "\n\nkappa = " << kappa << "\n\n";
00826
00827 double absdiffmax = 0;
00828 bool pass = true;
00829
00830 for (int iq = 0; iq < 45; ++iq) {
00831 double qval = qvalues[iq];
00832 os << std::setw(5) << std::fixed << std::setprecision(3) << qval;
00833 for (int ibeta = 0; ibeta < GetSBNBeta2(); ++ibeta) {
00834 double beta2 = GetSBBeta2 (ibeta);
00835 v.SetKappaBeta2 (kappa, beta2);
00836 double lambda_c = v.Quantile_c (qval);
00837 double cdf_c_val = v.Cdf_c(lambda_c);
00838 if (qval > qmin && (1-qval) > qmin) {
00839 if (fabs(cdf_c_val-qval) > absdiffmax) absdiffmax = fabs(cdf_c_val-qval);
00840
00841 os << " " << std::fixed << std::setw(7) << std::setprecision(4) << cdf_c_val-qval << " ";
00842 }
00843 else {
00844 os << " (" << std::fixed << std::setw(7) << std::setprecision(4) << cdf_c_val-qval << ")";
00845 }
00846 }
00847 os << "\n";
00848 }
00849 os.flags (defaultflags);
00850 if (absdiffmax > maxabsdiff) pass = false;
00851 if (!pass) ++nfail;
00852 os << "Max abs diff: " << absdiffmax
00853 << ", pass=" << pass << std::endl;
00854 }
00855 os << "\n\nNumber of failed tests: " << nfail << std::endl;
00856
00857 os.flags (defaultflags);
00858 os.width(defaultwidth);
00859 os.precision(defaultprecision);
00860
00861 return nfail;
00862 }
00863
00864 void VavilovTest::GetPdfTestParams (const Vavilov& v, double& maxabsdiff, double& maxdiffmantissa, double& agreefraction, double& agreediffmantissa) {
00865 if (dynamic_cast <const VavilovFast *>(&v)) {
00866 maxabsdiff = 0.08;
00867 maxdiffmantissa = 0.1;
00868 agreefraction = 1;
00869 agreediffmantissa = 0.9;
00870 }
00871 else {
00872 maxabsdiff = 2E-3;
00873 maxdiffmantissa = 0.03;
00874 agreefraction = 5;
00875 agreediffmantissa = 0.015;
00876 }
00877 }
00878
00879 void VavilovTest::GetCdfTestParams (const Vavilov& v, double& maxabsdiff, double& maxcdfdiff) {
00880 if (dynamic_cast <const VavilovFast *>(&v)) {
00881 maxabsdiff = 0.018;
00882 maxcdfdiff = 1E-16;
00883 }
00884 else {
00885 maxabsdiff = 1E-5;
00886 maxcdfdiff = 5E-15;
00887 }
00888 }
00889
00890 void VavilovTest::GetQuantileTestParams (const Vavilov& v, double& maxabsdiff) {
00891 if (dynamic_cast <const VavilovFast *>(&v)) {
00892 maxabsdiff = 0.03;
00893 }
00894 else {
00895 maxabsdiff = 2E-10;
00896 }
00897 }
00898
00899
00900 }
00901 }