VavilovTest.cxx

Go to the documentation of this file.
00001 // @(#)root/mathmore:$Id: VavilovTest.cxx 34123 2010-06-25 08:21:13Z moneta $
00002 // Authors: B. List 29.4.2010
00003  
00004 
00005  /**********************************************************************
00006   *                                                                    *
00007   * Copyright (c) 2004 ROOT Foundation,  CERN/PH-SFT                   *
00008   *                                                                    *
00009   * This library is free software; you can redistribute it and/or      *
00010   * modify it under the terms of the GNU General Public License        *
00011   * as published by the Free Software Foundation; either version 2     *
00012   * of the License, or (at your option) any later version.             *
00013   *                                                                    *
00014   * This library is distributed in the hope that it will be useful,    *
00015   * but WITHOUT ANY WARRANTY; without even the implied warranty of     *
00016   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   *
00017   * General Public License for more details.                           *
00018   *                                                                    *
00019   * You should have received a copy of the GNU General Public License  *
00020   * along with this library (see file COPYING); if not, write          *
00021   * to the Free Software Foundation, Inc., 59 Temple Place, Suite      *
00022   * 330, Boston, MA 02111-1307 USA, or contact the author.             *
00023   *                                                                    *
00024   **********************************************************************/
00025 
00026 // Implementation file for class VavilovTest
00027 // 
00028 // Created by: blist  at Thu Apr 29 11:19:00 2010
00029 // 
00030 // Last update: Thu Apr 29 11:19:00 2010
00031 // 
00032 
00033 
00034 #include "VavilovTest.h"
00035 #include "Math/Vavilov.h"
00036 #include "Math/VavilovAccurate.h"
00037 #include "Math/VavilovFast.h"
00038 //#include "Math/SpecFuncMathCore.h"
00039 //#include "Math/SpecFuncMathMore.h"
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;      // Euler's constant
00055 
00056 
00057 //kappa = 0.01
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 //kappa = 0.04
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 //kappa = 0.07
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 //kappa = 0.10
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 // kappa = 0.40
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 //kappa = 0.70
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 // kappa = 1.00
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 // kappa = 4.00
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 // kappa = 7.00
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 // kappa = 10.00
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                 //os << "FAIL";
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         //os << "agreefraction test failed.\n";
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 } // namespace Math
00901 } // namespace ROOT

Generated on Tue Jul 5 14:35:00 2011 for ROOT_528-00b_version by  doxygen 1.5.1