// @(#)root/mathmore:$Id$
// Authors: B. List 29.4.2010

 /**********************************************************************
  *                                                                    *
  * Copyright (c) 2004 ROOT Foundation,  CERN/PH-SFT                   *
  *                                                                    *
  * This library is free software; you can redistribute it and/or      *
  * modify it under the terms of the GNU General Public License        *
  * as published by the Free Software Foundation; either version 2     *
  * of the License, or (at your option) any later version.             *
  *                                                                    *
  * This library is distributed in the hope that it will be useful,    *
  * but WITHOUT ANY WARRANTY; without even the implied warranty of     *
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   *
  * General Public License for more details.                           *
  *                                                                    *
  * You should have received a copy of the GNU General Public License  *
  * along with this library (see file COPYING); if not, write          *
  * to the Free Software Foundation, Inc., 59 Temple Place, Suite      *
  * 330, Boston, MA 02111-1307 USA, or contact the author.             *
  *                                                                    *
  **********************************************************************/

// Header file for class VavilovAccurate
//
// Created by: blist  at Thu Apr 29 11:19:00 2010
//
// Last update: Thu Apr 29 11:19:00 2010
//
#ifndef ROOT_Math_VavilovAccurate
#define ROOT_Math_VavilovAccurate


#include "Math/Vavilov.h"

namespace ROOT {
namespace Math {

//____________________________________________________________________________
/**
   Class describing a Vavilov distribution.

   The probability density function of the Vavilov distribution
   as function of Landau's parameter is given by:
  \f[ p(\lambda_L; \kappa, \beta^2) =
  \frac{1}{2 \pi i}\int_{c-i\infty}^{c+i\infty} \phi(s) e^{\lambda_L s} ds\f]
   where \f$\phi(s) = e^{C} e^{\psi(s)}\f$
   with  \f$ C = \kappa (1+\beta^2 \gamma )\f$
   and \f$\psi(s)= s \ln \kappa + (s+\beta^2 \kappa)
               \cdot \left ( \int \limits_{0}^{1}
               \frac{1 - e^{\frac{-st}{\kappa}}}{t} \,d t- \gamma \right )
               - \kappa \, e^{\frac{-s}{\kappa}}\f$.
   \f$ \gamma = 0.5772156649\dots\f$ is Euler's constant.

   For the class VavilovAccurate,
   Pdf returns the Vavilov distribution as function of Landau's parameter
   \f$\lambda_L = \lambda_V/\kappa  - \ln \kappa\f$,
   which is the convention used in the CERNLIB routines, and in the tables
   by S.M. Seltzer and M.J. Berger: Energy loss stragglin of protons and mesons:
   Tabulation of the Vavilov distribution, pp 187-203
   in: National Research Council (U.S.), Committee on Nuclear Science:
   Studies in penetration of charged particles in matter,
   Nat. Akad. Sci. Publication 1133,
   Nucl. Sci. Series Report No. 39,
   Washington (Nat. Akad. Sci.) 1964, 388 pp.
   Available from
   <A HREF="http://books.google.de/books?id=kmMrAAAAYAAJ&lpg=PP9&pg=PA187#v=onepage&q&f=false">Google books</A>

   Therefore, for small values of \f$\kappa < 0.01\f$,
   pdf approaches the Landau distribution.

   For values \f$\kappa > 10\f$, the Gauss approximation should be used
   with \f$\mu\f$ and \f$\sigma\f$ given by Vavilov::mean(kappa, beta2)
   and sqrt(Vavilov::variance(kappa, beta2).

   The original Vavilov pdf is obtained by
   v.Pdf(lambdaV/kappa-log(kappa))/kappa.

   For detailed description see
   B. Schorr, Programs for the Landau and the Vavilov distributions and the corresponding random numbers,
   <A HREF="http://dx.doi.org/10.1016/0010-4655(74)90091-5">Computer Phys. Comm. 7 (1974) 215-224</A>,
   which has been implemented in
   <A HREF="http://wwwasdoc.web.cern.ch/wwwasdoc/shortwrupsdir/g116/top.html">
   CERNLIB (G116)</A>.

   The class stores coefficients needed to calculate \f$p(\lambda; \kappa, \beta^2)\f$
   for fixed values of \f$\kappa\f$ and \f$\beta^2\f$.
   Changing these values is computationally expensive.

   The parameter \f$\kappa\f$ should be in the range \f$0.01 \le \kappa \le 10\f$.
   In contrast to the CERNLIB implementation, all values of \f$\kappa \ge 0.001\f$ may be used,
   but may result in slower running and/or inaccurate results.

   The parameter \f$\beta^2\f$ must be in the range \f$0 \le \beta^2 \le 1\f$.

   Two parameters which are fixed in the CERNLIB implementation may be set by the user:
   - epsilonPM corresponds to \f$\epsilon^+ = \epsilon^-\f$ in Eqs. (2.1) and (2.2) of Schorr's paper.
   epsilonPM gives an estimate on the integral of the cummulative distribution function
   outside the range \f$\lambda_{min} \le \lambda \le \lambda_{max}\f$
   where the approximation is valid.
   Thus, it determines the support of the approximation used here (called $T_0 - T_1$ in the paper).
   Schorr recommends  \f$\epsilon^+ = \epsilon^- = 5\cdot 10^{-4}\f$.
   The code from CERNLIB has been extended such that also smaller values are possible.

   - epsilon corresponds to \f$\epsilon\f$ in Eq. (4.10) of Schorr's paper.
   It determines the accuracy of the series expansion.
   Schorr recommends  \f$\epsilon = 10^{-5}\f$.

   For the quantile calculation, the algorithm given by Schorr is not used,
   because it turns out to be very slow and still inaccurate.
   Instead, an initial estimate is calculated based on a precalculated table,
   which is subsequently improved by Newton iterations.

   While the CERNLIB implementation calculates at most 156 terms in the series expansion
   for the pdf and cdf calculation, this class calculates up to 500 terms, depending
   on the values of epsilonPM and epsilon.

   Average times on a Pentium Core2 Duo P8400 2.26GHz:
   - 38us per call to SetKappaBeta2 or constructor
   - 0.49us per call to Pdf, Cdf
   - 8.2us per first call to Quantile after SetKappaBeta2 or constructor
   - 0.83us per subsequent call to Quantile

   Benno List, June 2010

   @ingroup StatFunc
 */


class VavilovAccurate: public Vavilov {

public:


   /**
      Initialize an object to calculate the Vavilov distribution

       @param kappa The parameter \f$\kappa\f$, which must be in the range \f$\kappa \ge 0.001 \f$
       @param beta2 The parameter \f$\beta^2\f$, which must be in the range \f$0 \le \beta^2 \le 1 \f$
       @param epsilonPM: \f$\epsilon^+ = \epsilon^-\f$ in Eqs. (2.1) and (2.2) of Schorr's paper; gives an estimate on the integral of the cummulative distribution function
              outside the range \f$\lambda_{min} \le \lambda \le \lambda_{max}\f$
              where the approximation is valid.
       @param epsilon: \f$\epsilon\f$ in Eq. (4.10) of Schorr's paper; determines the accuracy of the series expansion.
   */

  VavilovAccurate(double kappa=1, double beta2=1, double epsilonPM=5E-4, double epsilon=1E-5);

   /**
     Destructor
   */
   virtual ~VavilovAccurate();


public:

   /**
       Evaluate the Vavilov probability density function

       @param x The Landau parameter \f$x = \lambda_L\f$
   */
   double Pdf (double x) const;

   /**
       Evaluate the Vavilov probability density function,
       and set kappa and beta2, if necessary

       @param x The Landau parameter \f$x = \lambda_L\f$
       @param kappa The parameter \f$\kappa\f$, which must be in the range \f$\kappa \ge 0.001 \f$
       @param beta2 The parameter \f$\beta^2\f$, which must be in the range \f$0 \le \beta^2 \le 1 \f$
   */
   double Pdf (double x, double kappa, double beta2);

   /**
       Evaluate the Vavilov cummulative probability density function

       @param x The Landau parameter \f$x = \lambda_L\f$
   */
   double Cdf (double x) const;

   /**
       Evaluate the Vavilov cummulative probability density function,
       and set kappa and beta2, if necessary

       @param x The Landau parameter \f$x = \lambda_L\f$
       @param kappa The parameter \f$\kappa\f$, which must be in the range \f$\kappa \ge 0.001 \f$
       @param beta2 The parameter \f$\beta^2\f$, which must be in the range \f$0 \le \beta^2 \le 1 \f$
   */
   double Cdf (double x, double kappa, double beta2);

   /**
       Evaluate the Vavilov complementary cummulative probability density function

       @param x The Landau parameter \f$x = \lambda_L\f$
   */
   double Cdf_c (double x) const;

   /**
       Evaluate the Vavilov complementary cummulative probability density function,
       and set kappa and beta2, if necessary

       @param x The Landau parameter \f$x = \lambda_L\f$
       @param kappa The parameter \f$\kappa\f$, which must be in the range \f$\kappa \ge 0.001 \f$
       @param beta2 The parameter \f$\beta^2\f$, which must be in the range \f$0 \le \beta^2 \le 1 \f$
   */
   double Cdf_c (double x, double kappa, double beta2);

   /**
       Evaluate the inverse of the Vavilov cummulative probability density function

       @param z The argument \f$z\f$, which must be in the range \f$0 \le z \le 1\f$
   */
   double Quantile (double z) const;

   /**
       Evaluate the inverse of the Vavilov cummulative probability density function,
       and set kappa and beta2, if necessary

       @param z The argument \f$z\f$, which must be in the range \f$0 \le z \le 1\f$
       @param kappa The parameter \f$\kappa\f$, which must be in the range \f$\kappa \ge 0.001 \f$
       @param beta2 The parameter \f$\beta^2\f$, which must be in the range \f$0 \le \beta^2 \le 1 \f$
   */
   double Quantile (double z, double kappa, double beta2);

   /**
       Evaluate the inverse of the complementary Vavilov cummulative probability density function

       @param z The argument \f$z\f$, which must be in the range \f$0 \le z \le 1\f$
   */
   double Quantile_c (double z) const;

   /**
       Evaluate the inverse of the complementary Vavilov cummulative probability density function,
       and set kappa and beta2, if necessary

       @param z The argument \f$z\f$, which must be in the range \f$0 \le z \le 1\f$
       @param kappa The parameter \f$\kappa\f$, which must be in the range \f$\kappa \ge 0.001 \f$
       @param beta2 The parameter \f$\beta^2\f$, which must be in the range \f$0 \le \beta^2 \le 1 \f$
   */
   double Quantile_c (double z, double kappa, double beta2);

   /**
      Change \f$\kappa\f$ and \f$\beta^2\f$ and recalculate coefficients if necessary

       @param kappa The parameter \f$\kappa\f$, which must be in the range \f$\kappa \ge 0.001 \f$
       @param beta2 The parameter \f$\beta^2\f$, which must be in the range \f$0 \le \beta^2 \le 1 \f$
   */
   virtual void SetKappaBeta2 (double kappa, double beta2);


   /**
      (Re)Initialize the object

       @param kappa The parameter \f$\kappa\f$, which must be in the range \f$\kappa \ge 0.001 \f$
       @param beta2 The parameter \f$\beta^2\f$, which must be in the range \f$0 \le \beta^2 \le 1 \f$
       @param epsilonPM \f$\epsilon^+ = \epsilon^-\f$ in Eqs. (2.1) and (2.2) of Schorr's paper; gives an estimate on the integral of the cummulative distribution function
              outside the range \f$\lambda_{min} \le \lambda \le \lambda_{max}\f$
              where the approximation is valid.
       @param epsilon \f$\epsilon\f$ in Eq. (4.10) of Schorr's paper; determines the accuracy of the series expansion.
   */
   void Set(double kappa, double beta2, double epsilonPM=5E-4, double epsilon=1E-5);


   /**
      Return the minimum value of \f$\lambda\f$ for which \f$p(\lambda; \kappa, \beta^2)\f$
      is nonzero in the current approximation
   */
   virtual double GetLambdaMin() const;

   /**
      Return the maximum value of \f$\lambda\f$ for which \f$p(\lambda; \kappa, \beta^2)\f$
      is nonzero in the current approximation
   */
   virtual double GetLambdaMax() const;

   /**
      Return the current value of \f$\kappa\f$
   */
   virtual double GetKappa()     const;

   /**
      Return the current value of \f$\beta^2\f$
   */
   virtual double GetBeta2()     const;

   /**
      Return the value of \f$\lambda\f$ where the pdf is maximal
   */
   virtual double Mode() const;

   /**
      Return the value of \f$\lambda\f$ where the pdf is maximal function,
       and set kappa and beta2, if necessary

       @param kappa The parameter \f$\kappa\f$, which must be in the range \f$\kappa \ge 0.001 \f$
       @param beta2 The parameter \f$\beta^2\f$, which must be in the range \f$0 \le \beta^2 \le 1 \f$
   */
   virtual double Mode(double kappa, double beta2);

   /**
      Return the current value of \f$\epsilon^+ = \epsilon^-\f$
   */

   double GetEpsilonPM() const;

   /**
      Return the current value of \f$\epsilon\f$
   */
   double GetEpsilon()   const;

   /**
      Return the number of terms used in the series expansion
   */
   double GetNTerms()    const;

   /**
      Returns a static instance of class VavilovFast
   */
   static VavilovAccurate *GetInstance();

   /**
      Returns a static instance of class VavilovFast,
      and sets the values of kappa and beta2

       @param kappa The parameter \f$\kappa\f$, which must be in the range \f$\kappa \ge 0.001 \f$
       @param beta2 The parameter \f$\beta^2\f$, which must be in the range \f$0 \le \beta^2 \le 1 \f$
   */
   static VavilovAccurate *GetInstance(double kappa, double beta2);


private:
   enum{MAXTERMS=500};
   double fH[8], fT0, fT1, fT, fOmega, fA_pdf[MAXTERMS+1], fB_pdf[MAXTERMS+1], fA_cdf[MAXTERMS+1], fB_cdf[MAXTERMS+1], fX0;
   double fKappa, fBeta2;
   double fEpsilonPM, fEpsilon;

   mutable bool fQuantileInit;
   mutable int fNQuant;
   enum{kNquantMax=32};
   mutable double fQuant[kNquantMax];
   mutable double fLambda[kNquantMax];

   void InitQuantile() const;

   static VavilovAccurate *fgInstance;

   double G116f1 (double x) const;
   double G116f2 (double x) const;

   int Rzero (double a, double b, double& x0,
              double eps, int mxf, double (VavilovAccurate::*f)(double)const) const;
   static double E1plLog (double x); // Calculates log(|x|)+E_1(x)

};

   /**
       The Vavilov probability density function

       @param x The Landau parameter \f$x = \lambda_L\f$
       @param kappa The parameter \f$\kappa\f$, which must be in the range \f$\kappa \ge 0.001 \f$
       @param beta2 The parameter \f$\beta^2\f$, which must be in the range \f$0 \le \beta^2 \le 1 \f$

       @ingroup PdfFunc
   */
double vavilov_accurate_pdf (double x, double kappa, double beta2);

   /**
       The Vavilov cummulative probability density function

       @param x The Landau parameter \f$x = \lambda_L\f$
       @param kappa The parameter \f$\kappa\f$, which must be in the range \f$\kappa \ge 0.001 \f$
       @param beta2 The parameter \f$\beta^2\f$, which must be in the range \f$0 \le \beta^2 \le 1 \f$

       @ingroup ProbFunc
   */
double vavilov_accurate_cdf (double x, double kappa, double beta2);

   /**
       The Vavilov complementary cummulative probability density function

       @param x The Landau parameter \f$x = \lambda_L\f$
       @param kappa The parameter \f$\kappa\f$, which must be in the range \f$\kappa \ge 0.001 \f$
       @param beta2 The parameter \f$\beta^2\f$, which must be in the range \f$0 \le \beta^2 \le 1 \f$

       @ingroup ProbFunc
   */
double vavilov_accurate_cdf_c (double x, double kappa, double beta2);

   /**
       The inverse of the Vavilov cummulative probability density function

       @param z The argument \f$z\f$, which must be in the range \f$0 \le z \le 1\f$
       @param kappa The parameter \f$\kappa\f$, which must be in the range \f$\kappa \ge 0.001 \f$
       @param beta2 The parameter \f$\beta^2\f$, which must be in the range \f$0 \le \beta^2 \le 1 \f$

      @ingroup QuantFunc
   */
double vavilov_accurate_quantile (double z, double kappa, double beta2);

   /**
       The inverse of the complementary Vavilov cummulative probability density function

       @param z The argument \f$z\f$, which must be in the range \f$0 \le z \le 1\f$
       @param kappa The parameter \f$\kappa\f$, which must be in the range \f$\kappa \ge 0.001 \f$
       @param beta2 The parameter \f$\beta^2\f$, which must be in the range \f$0 \le \beta^2 \le 1 \f$

      @ingroup QuantFunc
   */
double vavilov_accurate_quantile_c (double z, double kappa, double beta2);

} // namespace Math
} // namespace ROOT

#endif /* ROOT_Math_VavilovAccurate */
 VavilovAccurate.h:1
 VavilovAccurate.h:2
 VavilovAccurate.h:3
 VavilovAccurate.h:4
 VavilovAccurate.h:5
 VavilovAccurate.h:6
 VavilovAccurate.h:7
 VavilovAccurate.h:8
 VavilovAccurate.h:9
 VavilovAccurate.h:10
 VavilovAccurate.h:11
 VavilovAccurate.h:12
 VavilovAccurate.h:13
 VavilovAccurate.h:14
 VavilovAccurate.h:15
 VavilovAccurate.h:16
 VavilovAccurate.h:17
 VavilovAccurate.h:18
 VavilovAccurate.h:19
 VavilovAccurate.h:20
 VavilovAccurate.h:21
 VavilovAccurate.h:22
 VavilovAccurate.h:23
 VavilovAccurate.h:24
 VavilovAccurate.h:25
 VavilovAccurate.h:26
 VavilovAccurate.h:27
 VavilovAccurate.h:28
 VavilovAccurate.h:29
 VavilovAccurate.h:30
 VavilovAccurate.h:31
 VavilovAccurate.h:32
 VavilovAccurate.h:33
 VavilovAccurate.h:34
 VavilovAccurate.h:35
 VavilovAccurate.h:36
 VavilovAccurate.h:37
 VavilovAccurate.h:38
 VavilovAccurate.h:39
 VavilovAccurate.h:40
 VavilovAccurate.h:41
 VavilovAccurate.h:42
 VavilovAccurate.h:43
 VavilovAccurate.h:44
 VavilovAccurate.h:45
 VavilovAccurate.h:46
 VavilovAccurate.h:47
 VavilovAccurate.h:48
 VavilovAccurate.h:49
 VavilovAccurate.h:50
 VavilovAccurate.h:51
 VavilovAccurate.h:52
 VavilovAccurate.h:53
 VavilovAccurate.h:54
 VavilovAccurate.h:55
 VavilovAccurate.h:56
 VavilovAccurate.h:57
 VavilovAccurate.h:58
 VavilovAccurate.h:59
 VavilovAccurate.h:60
 VavilovAccurate.h:61
 VavilovAccurate.h:62
 VavilovAccurate.h:63
 VavilovAccurate.h:64
 VavilovAccurate.h:65
 VavilovAccurate.h:66
 VavilovAccurate.h:67
 VavilovAccurate.h:68
 VavilovAccurate.h:69
 VavilovAccurate.h:70
 VavilovAccurate.h:71
 VavilovAccurate.h:72
 VavilovAccurate.h:73
 VavilovAccurate.h:74
 VavilovAccurate.h:75
 VavilovAccurate.h:76
 VavilovAccurate.h:77
 VavilovAccurate.h:78
 VavilovAccurate.h:79
 VavilovAccurate.h:80
 VavilovAccurate.h:81
 VavilovAccurate.h:82
 VavilovAccurate.h:83
 VavilovAccurate.h:84
 VavilovAccurate.h:85
 VavilovAccurate.h:86
 VavilovAccurate.h:87
 VavilovAccurate.h:88
 VavilovAccurate.h:89
 VavilovAccurate.h:90
 VavilovAccurate.h:91
 VavilovAccurate.h:92
 VavilovAccurate.h:93
 VavilovAccurate.h:94
 VavilovAccurate.h:95
 VavilovAccurate.h:96
 VavilovAccurate.h:97
 VavilovAccurate.h:98
 VavilovAccurate.h:99
 VavilovAccurate.h:100
 VavilovAccurate.h:101
 VavilovAccurate.h:102
 VavilovAccurate.h:103
 VavilovAccurate.h:104
 VavilovAccurate.h:105
 VavilovAccurate.h:106
 VavilovAccurate.h:107
 VavilovAccurate.h:108
 VavilovAccurate.h:109
 VavilovAccurate.h:110
 VavilovAccurate.h:111
 VavilovAccurate.h:112
 VavilovAccurate.h:113
 VavilovAccurate.h:114
 VavilovAccurate.h:115
 VavilovAccurate.h:116
 VavilovAccurate.h:117
 VavilovAccurate.h:118
 VavilovAccurate.h:119
 VavilovAccurate.h:120
 VavilovAccurate.h:121
 VavilovAccurate.h:122
 VavilovAccurate.h:123
 VavilovAccurate.h:124
 VavilovAccurate.h:125
 VavilovAccurate.h:126
 VavilovAccurate.h:127
 VavilovAccurate.h:128
 VavilovAccurate.h:129
 VavilovAccurate.h:130
 VavilovAccurate.h:131
 VavilovAccurate.h:132
 VavilovAccurate.h:133
 VavilovAccurate.h:134
 VavilovAccurate.h:135
 VavilovAccurate.h:136
 VavilovAccurate.h:137
 VavilovAccurate.h:138
 VavilovAccurate.h:139
 VavilovAccurate.h:140
 VavilovAccurate.h:141
 VavilovAccurate.h:142
 VavilovAccurate.h:143
 VavilovAccurate.h:144
 VavilovAccurate.h:145
 VavilovAccurate.h:146
 VavilovAccurate.h:147
 VavilovAccurate.h:148
 VavilovAccurate.h:149
 VavilovAccurate.h:150
 VavilovAccurate.h:151
 VavilovAccurate.h:152
 VavilovAccurate.h:153
 VavilovAccurate.h:154
 VavilovAccurate.h:155
 VavilovAccurate.h:156
 VavilovAccurate.h:157
 VavilovAccurate.h:158
 VavilovAccurate.h:159
 VavilovAccurate.h:160
 VavilovAccurate.h:161
 VavilovAccurate.h:162
 VavilovAccurate.h:163
 VavilovAccurate.h:164
 VavilovAccurate.h:165
 VavilovAccurate.h:166
 VavilovAccurate.h:167
 VavilovAccurate.h:168
 VavilovAccurate.h:169
 VavilovAccurate.h:170
 VavilovAccurate.h:171
 VavilovAccurate.h:172
 VavilovAccurate.h:173
 VavilovAccurate.h:174
 VavilovAccurate.h:175
 VavilovAccurate.h:176
 VavilovAccurate.h:177
 VavilovAccurate.h:178
 VavilovAccurate.h:179
 VavilovAccurate.h:180
 VavilovAccurate.h:181
 VavilovAccurate.h:182
 VavilovAccurate.h:183
 VavilovAccurate.h:184
 VavilovAccurate.h:185
 VavilovAccurate.h:186
 VavilovAccurate.h:187
 VavilovAccurate.h:188
 VavilovAccurate.h:189
 VavilovAccurate.h:190
 VavilovAccurate.h:191
 VavilovAccurate.h:192
 VavilovAccurate.h:193
 VavilovAccurate.h:194
 VavilovAccurate.h:195
 VavilovAccurate.h:196
 VavilovAccurate.h:197
 VavilovAccurate.h:198
 VavilovAccurate.h:199
 VavilovAccurate.h:200
 VavilovAccurate.h:201
 VavilovAccurate.h:202
 VavilovAccurate.h:203
 VavilovAccurate.h:204
 VavilovAccurate.h:205
 VavilovAccurate.h:206
 VavilovAccurate.h:207
 VavilovAccurate.h:208
 VavilovAccurate.h:209
 VavilovAccurate.h:210
 VavilovAccurate.h:211
 VavilovAccurate.h:212
 VavilovAccurate.h:213
 VavilovAccurate.h:214
 VavilovAccurate.h:215
 VavilovAccurate.h:216
 VavilovAccurate.h:217
 VavilovAccurate.h:218
 VavilovAccurate.h:219
 VavilovAccurate.h:220
 VavilovAccurate.h:221
 VavilovAccurate.h:222
 VavilovAccurate.h:223
 VavilovAccurate.h:224
 VavilovAccurate.h:225
 VavilovAccurate.h:226
 VavilovAccurate.h:227
 VavilovAccurate.h:228
 VavilovAccurate.h:229
 VavilovAccurate.h:230
 VavilovAccurate.h:231
 VavilovAccurate.h:232
 VavilovAccurate.h:233
 VavilovAccurate.h:234
 VavilovAccurate.h:235
 VavilovAccurate.h:236
 VavilovAccurate.h:237
 VavilovAccurate.h:238
 VavilovAccurate.h:239
 VavilovAccurate.h:240
 VavilovAccurate.h:241
 VavilovAccurate.h:242
 VavilovAccurate.h:243
 VavilovAccurate.h:244
 VavilovAccurate.h:245
 VavilovAccurate.h:246
 VavilovAccurate.h:247
 VavilovAccurate.h:248
 VavilovAccurate.h:249
 VavilovAccurate.h:250
 VavilovAccurate.h:251
 VavilovAccurate.h:252
 VavilovAccurate.h:253
 VavilovAccurate.h:254
 VavilovAccurate.h:255
 VavilovAccurate.h:256
 VavilovAccurate.h:257
 VavilovAccurate.h:258
 VavilovAccurate.h:259
 VavilovAccurate.h:260
 VavilovAccurate.h:261
 VavilovAccurate.h:262
 VavilovAccurate.h:263
 VavilovAccurate.h:264
 VavilovAccurate.h:265
 VavilovAccurate.h:266
 VavilovAccurate.h:267
 VavilovAccurate.h:268
 VavilovAccurate.h:269
 VavilovAccurate.h:270
 VavilovAccurate.h:271
 VavilovAccurate.h:272
 VavilovAccurate.h:273
 VavilovAccurate.h:274
 VavilovAccurate.h:275
 VavilovAccurate.h:276
 VavilovAccurate.h:277
 VavilovAccurate.h:278
 VavilovAccurate.h:279
 VavilovAccurate.h:280
 VavilovAccurate.h:281
 VavilovAccurate.h:282
 VavilovAccurate.h:283
 VavilovAccurate.h:284
 VavilovAccurate.h:285
 VavilovAccurate.h:286
 VavilovAccurate.h:287
 VavilovAccurate.h:288
 VavilovAccurate.h:289
 VavilovAccurate.h:290
 VavilovAccurate.h:291
 VavilovAccurate.h:292
 VavilovAccurate.h:293
 VavilovAccurate.h:294
 VavilovAccurate.h:295
 VavilovAccurate.h:296
 VavilovAccurate.h:297
 VavilovAccurate.h:298
 VavilovAccurate.h:299
 VavilovAccurate.h:300
 VavilovAccurate.h:301
 VavilovAccurate.h:302
 VavilovAccurate.h:303
 VavilovAccurate.h:304
 VavilovAccurate.h:305
 VavilovAccurate.h:306
 VavilovAccurate.h:307
 VavilovAccurate.h:308
 VavilovAccurate.h:309
 VavilovAccurate.h:310
 VavilovAccurate.h:311
 VavilovAccurate.h:312
 VavilovAccurate.h:313
 VavilovAccurate.h:314
 VavilovAccurate.h:315
 VavilovAccurate.h:316
 VavilovAccurate.h:317
 VavilovAccurate.h:318
 VavilovAccurate.h:319
 VavilovAccurate.h:320
 VavilovAccurate.h:321
 VavilovAccurate.h:322
 VavilovAccurate.h:323
 VavilovAccurate.h:324
 VavilovAccurate.h:325
 VavilovAccurate.h:326
 VavilovAccurate.h:327
 VavilovAccurate.h:328
 VavilovAccurate.h:329
 VavilovAccurate.h:330
 VavilovAccurate.h:331
 VavilovAccurate.h:332
 VavilovAccurate.h:333
 VavilovAccurate.h:334
 VavilovAccurate.h:335
 VavilovAccurate.h:336
 VavilovAccurate.h:337
 VavilovAccurate.h:338
 VavilovAccurate.h:339
 VavilovAccurate.h:340
 VavilovAccurate.h:341
 VavilovAccurate.h:342
 VavilovAccurate.h:343
 VavilovAccurate.h:344
 VavilovAccurate.h:345
 VavilovAccurate.h:346
 VavilovAccurate.h:347
 VavilovAccurate.h:348
 VavilovAccurate.h:349
 VavilovAccurate.h:350
 VavilovAccurate.h:351
 VavilovAccurate.h:352
 VavilovAccurate.h:353
 VavilovAccurate.h:354
 VavilovAccurate.h:355
 VavilovAccurate.h:356
 VavilovAccurate.h:357
 VavilovAccurate.h:358
 VavilovAccurate.h:359
 VavilovAccurate.h:360
 VavilovAccurate.h:361
 VavilovAccurate.h:362
 VavilovAccurate.h:363
 VavilovAccurate.h:364
 VavilovAccurate.h:365
 VavilovAccurate.h:366
 VavilovAccurate.h:367
 VavilovAccurate.h:368
 VavilovAccurate.h:369
 VavilovAccurate.h:370
 VavilovAccurate.h:371
 VavilovAccurate.h:372
 VavilovAccurate.h:373
 VavilovAccurate.h:374
 VavilovAccurate.h:375
 VavilovAccurate.h:376
 VavilovAccurate.h:377
 VavilovAccurate.h:378
 VavilovAccurate.h:379
 VavilovAccurate.h:380
 VavilovAccurate.h:381
 VavilovAccurate.h:382
 VavilovAccurate.h:383
 VavilovAccurate.h:384
 VavilovAccurate.h:385
 VavilovAccurate.h:386
 VavilovAccurate.h:387
 VavilovAccurate.h:388
 VavilovAccurate.h:389
 VavilovAccurate.h:390
 VavilovAccurate.h:391
 VavilovAccurate.h:392
 VavilovAccurate.h:393
 VavilovAccurate.h:394
 VavilovAccurate.h:395
 VavilovAccurate.h:396
 VavilovAccurate.h:397
 VavilovAccurate.h:398
 VavilovAccurate.h:399
 VavilovAccurate.h:400
 VavilovAccurate.h:401
 VavilovAccurate.h:402
 VavilovAccurate.h:403
 VavilovAccurate.h:404
 VavilovAccurate.h:405
 VavilovAccurate.h:406
 VavilovAccurate.h:407
 VavilovAccurate.h:408
 VavilovAccurate.h:409
 VavilovAccurate.h:410
 VavilovAccurate.h:411
 VavilovAccurate.h:412
 VavilovAccurate.h:413
 VavilovAccurate.h:414