ROOT logo
// @(#)root/tmva $Id: MethodCFMlpANN_Utils.cxx 29161 2009-06-23 10:53:19Z brun $ 
// Author: Andreas Hoecker, Joerg Stelzer, Helge Voss, Kai Voss 

/**********************************************************************************
 * Project: TMVA - a Root-integrated toolkit for multivariate data analysis       *
 * Package: TMVA                                                                  *
 * Class  : TMVA::MethodCFMlpANN_utils                                            *
 * Web    : http://tmva.sourceforge.net                                           *
 *                                                                                *
 * Reference for the original FORTRAN version "mlpl3.F":                          *
 *      Authors  : J. Proriol and contributions from ALEPH-Clermont-Ferrand       *
 *                 Team members                                                   *
 *      Copyright: Laboratoire Physique Corpusculaire                             *
 *                 Universite de Blaise Pascal, IN2P3/CNRS                        *
 *                                                                                *
 * Modifications by present authors:                                              *
 *      use dynamical data tables (not for all of them, but for the big ones)     *
 *                                                                                *
 * Description:                                                                   *
 *      Utility routine translated from original mlpl3.F FORTRAN routine          *
 *                                                                                *
 *      MultiLayerPerceptron : Training code                                      *
 *                                                                                *
 *        NTRAIN: Nb of events used during the learning                           *
 *        NTEST:  Nb of events used for the test                                  *
 *        TIN:    Input variables                                                 *
 *        TOUT:   type of the event                                               *
 *                                                                                *
 *  ----------------------------------------------------------------------------  *
 *                                                                                *
 * Authors (alphabetical):                                                        *
 *      Andreas Hoecker <Andreas.Hocker@cern.ch> - CERN, Switzerland              *
 *      Xavier Prudent  <prudent@lapp.in2p3.fr>  - LAPP, France                   *
 *      Helge Voss      <Helge.Voss@cern.ch>     - MPI-K Heidelberg, Germany      *
 *      Kai Voss        <Kai.Voss@cern.ch>       - U. of Victoria, Canada         *
 *                                                                                *
 * Copyright (c) 2005:                                                            *
 *      CERN, Switzerland                                                         * 
 *      U. of Victoria, Canada                                                    * 
 *      MPI-K Heidelberg, Germany                                                 * 
 *      LAPP, Annecy, France                                                      *
 *                                                                                *
 * Redistribution and use in source and binary forms, with or without             *
 * modification, are permitted according to the terms listed in LICENSE           *
 * (http://tmva.sourceforge.net/LICENSE)                                          *
 *                                                                                *
 **********************************************************************************/

//_______________________________________________________________________
//                                                                      
// Implementation of Clermond-Ferrand artificial neural network 
//
// Reference for the original FORTRAN version "mlpl3.F":              
//      Authors  : J. Proriol and contributions from ALEPH-Clermont-Ferrand
//                 Team members                               
//      Copyright: Laboratoire Physique Corpusculaire         
//                 Universite de Blaise Pascal, IN2P3/CNRS    
//_______________________________________________________________________

#include <string>
#include <iostream>
#include <cstdlib>

#include "TMath.h"
#include "TString.h"

#include "TMVA/MethodCFMlpANN_Utils.h"
#include "TMVA/Timer.h"

using std::cout;
using std::endl;

ClassImp(TMVA::MethodCFMlpANN_Utils)
   
Int_t       TMVA::MethodCFMlpANN_Utils::fg_100         = 100;
Int_t       TMVA::MethodCFMlpANN_Utils::fg_0           = 0;
Int_t       TMVA::MethodCFMlpANN_Utils::fg_max_nVar_   = max_nVar_;
Int_t       TMVA::MethodCFMlpANN_Utils::fg_max_nNodes_ = max_nNodes_;
Int_t       TMVA::MethodCFMlpANN_Utils::fg_999         = 999;
const char* TMVA::MethodCFMlpANN_Utils::fg_MethodName  = "--- CFMlpANN                 ";

TMVA::MethodCFMlpANN_Utils::MethodCFMlpANN_Utils()  
{
   // default constructor
}

TMVA::MethodCFMlpANN_Utils::~MethodCFMlpANN_Utils() 
{
   // destructor
}

void TMVA::MethodCFMlpANN_Utils::Train_nn( Double_t *tin2, Double_t *tout2, Int_t *ntrain, 
                                           Int_t *ntest, Int_t *nvar2, Int_t *nlayer, 
                                           Int_t *nodes, Int_t *ncycle )
{
   // training interface - called from MethodCFMlpANN class object

   // sanity checks
   if (*ntrain + *ntest > max_Events_) {
      printf( "*** CFMlpANN_f2c: Warning in Train_nn: number of training + testing" \
              " events exceeds hardcoded maximum - reset to maximum allowed number");
      *ntrain = *ntrain*(max_Events_/(*ntrain + *ntest));
      *ntest  = *ntest *(max_Events_/(*ntrain + *ntest));
   }
   if (*nvar2 > max_nVar_) {
      printf( "*** CFMlpANN_f2c: ERROR in Train_nn: number of variables" \
              " exceeds hardcoded maximum ==> abort");
      std::exit(1);
   }
   if (*nlayer > max_nLayers_) {
      printf( "*** CFMlpANN_f2c: Warning in Train_nn: number of layers" \
              " exceeds hardcoded maximum - reset to maximum allowed number");
      *nlayer = max_nLayers_;
   }
   if (*nodes > max_nNodes_) {
      printf( "*** CFMlpANN_f2c: Warning in Train_nn: number of nodes" \
              " exceeds hardcoded maximum - reset to maximum allowed number");
      *nodes = max_nNodes_;
   }

   // create dynamic data tables (AH)
   fVarn2_1.Create( *ntrain + *ntest, *nvar2 );
   fVarn3_1.Create( *ntrain + *ntest, *nvar2 );

   Int_t imax;
   char det[20];

   Entree_new(nvar2, det, ntrain, ntest, nlayer, nodes, ncycle, (Int_t)20);
   if (fNeur_1.neuron[fParam_1.layerm - 1] == 1) {
      imax = 2;
      fParam_1.lclass = 2;
   } 
   else {
      imax = fNeur_1.neuron[fParam_1.layerm - 1] << 1;
      fParam_1.lclass = fNeur_1.neuron[fParam_1.layerm - 1];
   }
   fParam_1.nvar = fNeur_1.neuron[0];
   TestNN();
   Innit(det, tout2, tin2, (Int_t)20);

   // delete data tables
   fVarn2_1.Delete();
   fVarn3_1.Delete();
}

void TMVA::MethodCFMlpANN_Utils::Entree_new( Int_t *, char *, Int_t *ntrain, 
                                             Int_t *ntest, Int_t *numlayer, Int_t *nodes, 
                                             Int_t *numcycle, Int_t /*det_len*/)
{
   // first initialisation of ANN
   Int_t i__1;

   Int_t rewrite, i__, j, ncoef;
   Int_t ntemp, num, retrain;

   /* NTRAIN: Nb of events used during the learning */
   /* NTEST: Nb of events used for the test */
   /* TIN: Input variables */
   /* TOUT: type of the event */
 
   fCost_1.ancout = 1e30;

   /* .............. HardCoded Values .................... */
   retrain  = 0;
   rewrite  = 1000;
   for (i__ = 1; i__ <= max_nNodes_; ++i__) {
      fDel_1.coef[i__ - 1] = (Float_t)0.;
   }
   for (i__ = 1; i__ <= max_nLayers_; ++i__) {
      fDel_1.temp[i__ - 1] = (Float_t)0.;
   }
   fParam_1.layerm = *numlayer;
   if (fParam_1.layerm > max_nLayers_) {
      printf("Error: number of layers exceeds maximum: %i, %i ==> abort", 
             fParam_1.layerm, max_nLayers_ );
      Arret("modification of mlpl3_param_lim.inc is needed ");
   }
   fParam_1.nevl = *ntrain;
   fParam_1.nevt = *ntest;
   fParam_1.nblearn = *numcycle;
   fVarn_1.iclass = 2;
   fParam_1.nunilec = 10;
   fParam_1.epsmin = 1e-10;
   fParam_1.epsmax = 1e-4;
   fParam_1.eta = .5;
   fCost_1.tolcou = 1e-6;
   fCost_1.ieps = 2;
   fParam_1.nunisor = 30;
   fParam_1.nunishort = 48;
   fParam_1.nunap = 40;
   
   printf("%s: Total number of events for training: %i\n", fg_MethodName, fParam_1.nevl);
   printf("%s: Total number of training cycles    : %i\n", fg_MethodName, fParam_1.nblearn);
   if (fParam_1.nevl > max_Events_) {
      printf("Error: number of learning events exceeds maximum: %i, %i ==> abort", 
             fParam_1.nevl, max_Events_ );
      Arret("modification of mlpl3_param_lim.inc is needed ");
   }
   if (fParam_1.nevt > max_Events_) {
      printf("Error: number of testing events exceeds maximum: %i, %i ==> abort", 
             fParam_1.nevt, max_Events_ );
      Arret("modification of mlpl3_param_lim.inc is needed ");
   }
   i__1 = fParam_1.layerm;
   for (j = 1; j <= i__1; ++j) {
      num = nodes[j-1];
      if (num < 2) {
         num = 2;
      }
      if (j == fParam_1.layerm && num != 2) {
         num = 2;
      }
      fNeur_1.neuron[j - 1] = num;
   }
   i__1 = fParam_1.layerm;
   for (j = 1; j <= i__1; ++j) {
      printf("%s: Number of layers for neuron(%2i): %i\n",fg_MethodName, j, fNeur_1.neuron[j - 1]);
   }
   if (fNeur_1.neuron[fParam_1.layerm - 1] != 2) {
      printf("Error: wrong number of classes at ouput layer: %i != 2 ==> abort\n",
             fNeur_1.neuron[fParam_1.layerm - 1]);
      Arret("stop");
   }
   i__1 = fNeur_1.neuron[fParam_1.layerm - 1];
   for (j = 1; j <= i__1; ++j) {
      fDel_1.coef[j - 1] = 1.;
   }
   i__1 = fParam_1.layerm;
   for (j = 1; j <= i__1; ++j) {
      fDel_1.temp[j - 1] = 1.;
   }
   fParam_1.ichoi = retrain;
   fParam_1.ndivis = rewrite;
   fDel_1.idde = 1;
   if (! (fParam_1.ichoi == 0 || fParam_1.ichoi == 1)) {
      printf( "Big troubles !!! \n" );
      Arret("new training or continued one !");
   }
   if (fParam_1.ichoi == 0) {
      printf("%s: New training will be performed\n", fg_MethodName);
   } 
   else {
      printf("%s: New training will be continued from a weight file\n", fg_MethodName);
   }
   ncoef = 0;
   ntemp = 0;
   for (i__ = 1; i__ <= max_nNodes_; ++i__) {
      if (fDel_1.coef[i__ - 1] != (Float_t)0.) {
         ++ncoef;
      }
   }
   for (i__ = 1; i__ <= max_nLayers_; ++i__) {
      if (fDel_1.temp[i__ - 1] != (Float_t)0.) {
         ++ntemp;
      }
   }
   if (ncoef != fNeur_1.neuron[fParam_1.layerm - 1]) {
      Arret(" entree error code 1 : need to reported");
   }
   if (ntemp != fParam_1.layerm) {
      Arret("entree error code 2 : need to reported");
   }
}

#define w_ref(a_1,a_2,a_3) fNeur_1.w[((a_3)*max_nNodes_ + (a_2))*max_nLayers_ + a_1 - 187]
#define ww_ref(a_1,a_2) fNeur_1.ww[(a_2)*max_nLayers_ + a_1 - 7]

void TMVA::MethodCFMlpANN_Utils::Wini()
{
   // [smart comments to be added]
   Int_t i__1, i__2, i__3;
   Int_t i__, j;
   Int_t layer;

   i__1 = fParam_1.layerm;
   for (layer = 2; layer <= i__1; ++layer) {
      i__2 = fNeur_1.neuron[layer - 2];
      for (i__ = 1; i__ <= i__2; ++i__) {
         i__3 = fNeur_1.neuron[layer - 1];
         for (j = 1; j <= i__3; ++j) {
            w_ref(layer, j, i__) = (Sen3a() * 2. - 1.) * .2;
            ww_ref(layer, j) = (Sen3a() * 2. - 1.) * .2;
         }
      }
   }
}

#undef ww_ref
#undef w_ref

#define xeev_ref(a_1,a_2) fVarn2_1(a_1,a_2)
#define w_ref(a_1,a_2,a_3) fNeur_1.w[((a_3)*max_nNodes_ + (a_2))*max_nLayers_ + a_1 - 187]
#define x_ref(a_1,a_2) fNeur_1.x[(a_2)*max_nLayers_ + a_1 - 7]
#define y_ref(a_1,a_2) fNeur_1.y[(a_2)*max_nLayers_ + a_1 - 7]
#define ww_ref(a_1,a_2) fNeur_1.ww[(a_2)*max_nLayers_ + a_1 - 7]

void TMVA::MethodCFMlpANN_Utils::En_avant(Int_t *ievent)
{
   // [smart comments to be added]
   Int_t i__1, i__2, i__3;

   Double_t f;
   Int_t i__, j;
   Int_t layer;
   
   i__1 = fNeur_1.neuron[0];
   for (i__ = 1; i__ <= i__1; ++i__) {
      y_ref(1, i__) = xeev_ref(*ievent, i__);
   }
   i__1 = fParam_1.layerm - 1;
   for (layer = 1; layer <= i__1; ++layer) {
      i__2 = fNeur_1.neuron[layer];
      for (j = 1; j <= i__2; ++j) {
         x_ref(layer + 1, j) = 0.;
         i__3 = fNeur_1.neuron[layer - 1];
         for (i__ = 1; i__ <= i__3; ++i__) {
            x_ref(layer + 1, j) = ( x_ref(layer + 1, j) + y_ref(layer, i__) 
                                    * w_ref(layer + 1, j, i__) );
         }
         x_ref(layer + 1, j) = x_ref(layer + 1, j) + ww_ref(layer + 1, j);
         i__3 = layer + 1;
         Foncf(&i__3, &x_ref(layer + 1, j), &f);
         y_ref(layer + 1, j) = f;
      }
   }
} 

#undef ww_ref
#undef y_ref
#undef x_ref
#undef w_ref
#undef xeev_ref

#define xeev_ref(a_1,a_2) fVarn2_1(a_1,a_2)

void TMVA::MethodCFMlpANN_Utils::Leclearn( Int_t *ktest, Double_t *tout2, Double_t *tin2 )
{
   // [smart comments to be added]
   Int_t i__1, i__2;

   Int_t i__, j, k, l;
   Int_t nocla[max_nNodes_], ikend;
   Double_t xpg[max_nVar_];

   *ktest = 0;
   i__1 = fParam_1.lclass;
   for (k = 1; k <= i__1; ++k) {
      nocla[k - 1] = 0;
   }
   i__1 = fParam_1.nvar;
   for (i__ = 1; i__ <= i__1; ++i__) {
      fVarn_1.xmin[i__ - 1] = 1e30;
      fVarn_1.xmax[i__ - 1] = -fVarn_1.xmin[i__ - 1];
   }
   i__1 = fParam_1.nevl;
   for (i__ = 1; i__ <= i__1; ++i__) {
      DataInterface(tout2, tin2, &fg_100, &fg_0, &fParam_1.nevl, &fParam_1.nvar, 
                    xpg, &fVarn_1.nclass[i__ - 1], &ikend);
      if (ikend == -1) {
         break;
      }

      CollectVar(&fParam_1.nvar, &fVarn_1.nclass[i__ - 1], xpg);

      i__2 = fParam_1.nvar;
      for (j = 1; j <= i__2; ++j) {        
         xeev_ref(i__, j) = xpg[j - 1];
      }
      if (fVarn_1.iclass == 1) {
         i__2 = fParam_1.lclass;
         for (k = 1; k <= i__2; ++k) {
            if (fVarn_1.nclass[i__ - 1] == k) {
               ++nocla[k - 1];
            }
         }
      }
      i__2 = fParam_1.nvar;
      for (k = 1; k <= i__2; ++k) {
         if (xeev_ref(i__, k) < fVarn_1.xmin[k - 1]) {
            fVarn_1.xmin[k - 1] = xeev_ref(i__, k);
         }
         if (xeev_ref(i__, k) > fVarn_1.xmax[k - 1]) {
            fVarn_1.xmax[k - 1] = xeev_ref(i__, k);
         }
      }
   }

   if (fVarn_1.iclass == 1) {
      i__2 = fParam_1.lclass;
      for (k = 1; k <= i__2; ++k) {
         i__1 = fParam_1.lclass;
         for (l = 1; l <= i__1; ++l) {
            if (nocla[k - 1] != nocla[l - 1]) {
               *ktest = 1;
            }
         }
      }
   }
   i__1 = fParam_1.nevl;
   for (i__ = 1; i__ <= i__1; ++i__) {
      i__2 = fParam_1.nvar;
      for (l = 1; l <= i__2; ++l) {
         if (fVarn_1.xmax[l - 1] == (Float_t)0. && fVarn_1.xmin[l - 1] == (
                                                                           Float_t)0.) {
            xeev_ref(i__, l) = (Float_t)0.;
         } 
         else {
            xeev_ref(i__, l) = xeev_ref(i__, l) - (fVarn_1.xmax[l - 1] + 
                                                   fVarn_1.xmin[l - 1]) / 2.;
            xeev_ref(i__, l) = xeev_ref(i__, l) / ((fVarn_1.xmax[l - 1] - 
                                                    fVarn_1.xmin[l - 1]) / 2.);
         }
      }
   }
}

#undef xeev_ref

#define delw_ref(a_1,a_2,a_3) fDel_1.delw[((a_3)*max_nNodes_ + (a_2))*max_nLayers_ + a_1 - 187]
#define w_ref(a_1,a_2,a_3) fNeur_1.w[((a_3)*max_nNodes_ + (a_2))*max_nLayers_ + a_1 - 187]
#define x_ref(a_1,a_2) fNeur_1.x[(a_2)*max_nLayers_ + a_1 - 7]
#define y_ref(a_1,a_2) fNeur_1.y[(a_2)*max_nLayers_ + a_1 - 7]
#define delta_ref(a_1,a_2,a_3) fDel_1.delta[((a_3)*max_nNodes_ + (a_2))*max_nLayers_ + a_1 - 187]
#define delww_ref(a_1,a_2) fDel_1.delww[(a_2)*max_nLayers_ + a_1 - 7]
#define ww_ref(a_1,a_2) fNeur_1.ww[(a_2)*max_nLayers_ + a_1 - 7]
#define del_ref(a_1,a_2) fDel_1.del[(a_2)*max_nLayers_ + a_1 - 7]
#define deltaww_ref(a_1,a_2) fNeur_1.deltaww[(a_2)*max_nLayers_ + a_1 - 7]

void TMVA::MethodCFMlpANN_Utils::En_arriere( Int_t *ievent )
{
   // [smart comments to be added]
   Int_t i__1, i__2, i__3;

   Double_t f;
   Int_t i__, j, k, l;
   Double_t df, uu;

   i__1 = fNeur_1.neuron[fParam_1.layerm - 1];
   for (i__ = 1; i__ <= i__1; ++i__) {
      if (fVarn_1.nclass[*ievent - 1] == i__) {
         fNeur_1.o[i__ - 1] = 1.;
      } 
      else {
         fNeur_1.o[i__ - 1] = -1.;
      }
   }
   l = fParam_1.layerm;
   i__1 = fNeur_1.neuron[l - 1];
   for (i__ = 1; i__ <= i__1; ++i__) {
      f = y_ref(l, i__);
      df = (f + 1.) * (1. - f) / (fDel_1.temp[l - 1] * 2.);
      del_ref(l, i__) = df * (fNeur_1.o[i__ - 1] - y_ref(l, i__)) * 
         fDel_1.coef[i__ - 1];
      delww_ref(l, i__) = fParam_1.eeps * del_ref(l, i__);
      i__2 = fNeur_1.neuron[l - 2];
      for (j = 1; j <= i__2; ++j) {
         delw_ref(l, i__, j) = fParam_1.eeps * del_ref(l, i__) * y_ref(l - 
                                                                       1, j);
         /* L20: */
      }
   }
   for (l = fParam_1.layerm - 1; l >= 2; --l) {
      i__2 = fNeur_1.neuron[l - 1];
      for (i__ = 1; i__ <= i__2; ++i__) {
         uu = 0.;
         i__1 = fNeur_1.neuron[l];
         for (k = 1; k <= i__1; ++k) {
            uu += w_ref(l + 1, k, i__) * del_ref(l + 1, k);
         }
         Foncf(&l, &x_ref(l, i__), &f);
         df = (f + 1.) * (1. - f) / (fDel_1.temp[l - 1] * 2.);
         del_ref(l, i__) = df * uu;
         delww_ref(l, i__) = fParam_1.eeps * del_ref(l, i__);
         i__1 = fNeur_1.neuron[l - 2];
         for (j = 1; j <= i__1; ++j) {
            delw_ref(l, i__, j) = fParam_1.eeps * del_ref(l, i__) * y_ref(
                                                                          l - 1, j);
         }
      }
   }
   i__1 = fParam_1.layerm;
   for (l = 2; l <= i__1; ++l) {
      i__2 = fNeur_1.neuron[l - 1];
      for (i__ = 1; i__ <= i__2; ++i__) {
         deltaww_ref(l, i__) = delww_ref(l, i__) + fParam_1.eta * 
            deltaww_ref(l, i__);
         ww_ref(l, i__) = ww_ref(l, i__) + deltaww_ref(l, i__);
         i__3 = fNeur_1.neuron[l - 2];
         for (j = 1; j <= i__3; ++j) {
            delta_ref(l, i__, j) = delw_ref(l, i__, j) + fParam_1.eta * 
               delta_ref(l, i__, j);
            w_ref(l, i__, j) = w_ref(l, i__, j) + delta_ref(l, i__, j);
         }
      }
   }
}

#undef deltaww_ref
#undef del_ref
#undef ww_ref
#undef delww_ref
#undef delta_ref
#undef y_ref
#undef x_ref
#undef w_ref
#undef delw_ref

#define w_ref(a_1,a_2,a_3) fNeur_1.w[((a_3)*max_nNodes_ + (a_2))*max_nLayers_ + a_1 - 187]
#define ww_ref(a_1,a_2) fNeur_1.ww[(a_2)*max_nLayers_ + a_1 - 7]

void TMVA::MethodCFMlpANN_Utils::Out( Int_t *iii, Int_t *maxcycle )
{
   // write weights to file

   if (*iii == *maxcycle) {
      // now in MethodCFMlpANN.cxx
   }
}

#undef ww_ref
#undef w_ref

#define delta_ref(a_1,a_2,a_3) fDel_1.delta[((a_3)*max_nNodes_ + (a_2))*max_nLayers_ + a_1 - 187]
#define deltaww_ref(a_1,a_2) fNeur_1.deltaww[(a_2)*max_nLayers_ + a_1 - 7]

void TMVA::MethodCFMlpANN_Utils::Innit( char *det, Double_t *tout2, Double_t *tin2, Int_t )
{
   // Initialization
   Int_t i__1, i__2, i__3;

   Int_t i__, j;
   Int_t nevod, layer, ktest, i1, nrest;
   Int_t ievent;
   Int_t kkk;
   Double_t xxx, yyy;

   Leclearn(&ktest, tout2, tin2);
   Lecev2(&ktest, tout2, tin2);
   if (ktest == 1) {
      printf( " .... strange to be here (1) ... \n");
      std::exit(1);
   }
   i__1 = fParam_1.layerm - 1;
   for (layer = 1; layer <= i__1; ++layer) {
      i__2 = fNeur_1.neuron[layer];
      for (j = 1; j <= i__2; ++j) {
         deltaww_ref(layer + 1, j) = 0.;
         i__3 = fNeur_1.neuron[layer - 1];
         for (i__ = 1; i__ <= i__3; ++i__) {
            delta_ref(layer + 1, j, i__) = 0.;
         }
      }
   }
   if (fParam_1.ichoi == 1) {
      Inl();
   } 
   else {
      Wini();
   }
   kkk = 0;
   i__3 = fParam_1.nblearn;
   Timer timer( i__3, "CFMlpANN" ); 
   Int_t num = i__3/100;

   for (i1 = 1; i1 <= i__3; ++i1) {

      if ( ( num>0 && (i1-1)%num == 0) || (i1 == i__3) ) timer.DrawProgressBar( i1-1 );

      i__2 = fParam_1.nevl;
      for (i__ = 1; i__ <= i__2; ++i__) {
         ++kkk;
         if (fCost_1.ieps == 2) {
            fParam_1.eeps = Fdecroi(&kkk);
         }
         if (fCost_1.ieps == 1) {
            fParam_1.eeps = fParam_1.epsmin;
         }
         Bool_t doCont = kTRUE;
         if (fVarn_1.iclass == 2) {
            ievent = (Int_t) ((Double_t) fParam_1.nevl * Sen3a());
            if (ievent == 0) {
               doCont = kFALSE;
            }
         }
         if (doCont) {
            if (fVarn_1.iclass == 1) {
               nevod = fParam_1.nevl / fParam_1.lclass;
               nrest = i__ % fParam_1.lclass;
               fParam_1.ndiv = i__ / fParam_1.lclass;
               if (nrest != 0) {
                  ievent = fParam_1.ndiv + 1 + (fParam_1.lclass - nrest) * 
                     nevod;
               } 
               else {
                  ievent = fParam_1.ndiv;
               }
            }
            En_avant(&ievent);
            En_arriere(&ievent);
         }
      }
      yyy = 0.;
      if (i1 % fParam_1.ndivis == 0 || i1 == 1 || i1 == fParam_1.nblearn) {
         Cout(&i1, &xxx);
         Cout2(&i1, &yyy);
         GraphNN(&i1, &xxx, &yyy, det, (Int_t)20);
         Out(&i1, &fParam_1.nblearn);
      }
      if (xxx < fCost_1.tolcou) {
         GraphNN(&fParam_1.nblearn, &xxx, &yyy, det, (Int_t)20);
         Out(&fParam_1.nblearn, &fParam_1.nblearn);
         break;
      }
   }
}

#undef deltaww_ref
#undef delta_ref

void TMVA::MethodCFMlpANN_Utils::TestNN()
{
   // [smart comments to be added]
   Int_t i__1;

   Int_t i__;
   Int_t ktest;

   ktest = 0;
   if (fParam_1.layerm > max_nLayers_) {
      ktest = 1;
      printf("Error: number of layers exceeds maximum: %i, %i ==> abort", 
             fParam_1.layerm, max_nLayers_ );
      Arret("modification of mlpl3_param_lim.inc is needed ");
   }
   if (fParam_1.nevl > max_Events_) {
      ktest = 1;
      printf("Error: number of training events exceeds maximum: %i, %i ==> abort", 
             fParam_1.nevl, max_Events_ );
      Arret("modification of mlpl3_param_lim.inc is needed ");
   }
   if (fParam_1.nevt > max_Events_) {
      printf("Error: number of testing events exceeds maximum: %i, %i ==> abort", 
             fParam_1.nevt, max_Events_ );
      Arret("modification of mlpl3_param_lim.inc is needed ");
   }
   if (fParam_1.lclass < fNeur_1.neuron[fParam_1.layerm - 1]) {
      ktest = 1;
      printf("Error: wrong number of classes at ouput layer: %i != %i ==> abort\n",
             fNeur_1.neuron[fParam_1.layerm - 1], fParam_1.lclass);
      Arret("problem needs to reported ");
   }
   if (fParam_1.nvar > max_nVar_) {
      ktest = 1;
      printf("Error: number of variables exceeds maximum: %i, %i ==> abort", 
             fParam_1.nvar, fg_max_nVar_ );
      Arret("modification of mlpl3_param_lim.inc is needed");
   }
   i__1 = fParam_1.layerm;
   for (i__ = 1; i__ <= i__1; ++i__) {
      if (fNeur_1.neuron[i__ - 1] > max_nNodes_) {
         ktest = 1;
         printf("Error: number of neurons at layer exceeds maximum: %i, %i ==> abort", 
                i__, fg_max_nNodes_ );
      }
   }
   if (ktest == 1) {
      printf( " .... strange to be here (2) ... \n");
      std::exit(1);
   }
}

#define y_ref(a_1,a_2) fNeur_1.y[(a_2)*max_nLayers_ + a_1 - 7]

void TMVA::MethodCFMlpANN_Utils::Cout( Int_t * /*i1*/, Double_t *xxx )
{
   // [smart comments to be added]
   Int_t i__1, i__2;
   Double_t d__1;
   
   Double_t c__;
   Int_t i__, j;
   
   c__ = 0.;
   i__1 = fParam_1.nevl;
   for (i__ = 1; i__ <= i__1; ++i__) {
      En_avant(&i__);
      i__2 = fNeur_1.neuron[fParam_1.layerm - 1];
      for (j = 1; j <= i__2; ++j) {
         if (fVarn_1.nclass[i__ - 1] == j) {
            fNeur_1.o[j - 1] = 1.;
         } 
         else {
            fNeur_1.o[j - 1] = -1.;
         }
         // Computing 2nd power 
         d__1 = y_ref(fParam_1.layerm, j) - fNeur_1.o[j - 1];
         c__ += fDel_1.coef[j - 1] * (d__1 * d__1);
      }
   }
   c__ /= (Double_t) (fParam_1.nevl * fParam_1.lclass) * 2.;
   *xxx = c__;
   fCost_1.ancout = c__;
}

#undef y_ref

#define w_ref(a_1,a_2,a_3) fNeur_1.w[((a_3)*max_nNodes_ + (a_2))*max_nLayers_ + a_1 - 187]
#define ww_ref(a_1,a_2) fNeur_1.ww[(a_2)*max_nLayers_ + a_1 - 7]

void TMVA::MethodCFMlpANN_Utils::Inl()
{
   // [smart comments to be added]
   Int_t i__1, i__2, i__3;

   Int_t jmin, jmax, k, layer, kk, nq, nr;

   i__1 = fParam_1.nvar;
   i__1 = fParam_1.layerm;
   i__1 = fParam_1.layerm - 1;
   for (layer = 1; layer <= i__1; ++layer) {
      nq = fNeur_1.neuron[layer] / 10;
      nr = fNeur_1.neuron[layer] - nq * 10;
      if (nr == 0) {
         kk = nq;
      } 
      else {
         kk = nq + 1;
      }
      i__2 = kk;
      for (k = 1; k <= i__2; ++k) {
         jmin = k * 10 - 9;
         jmax = k * 10;
         if (fNeur_1.neuron[layer] < jmax) {
            jmax = fNeur_1.neuron[layer];
         }
         i__3 = fNeur_1.neuron[layer - 1];
      }
   }
}

#undef ww_ref
#undef w_ref

Double_t TMVA::MethodCFMlpANN_Utils::Fdecroi( Int_t *i__ )
{
   // [smart comments to be added]
   Double_t ret_val;
   
   Double_t aaa, bbb;
   
   aaa = (fParam_1.epsmin - fParam_1.epsmax) / (Double_t) (fParam_1.nblearn * 
                                                           fParam_1.nevl - 1);
   bbb = fParam_1.epsmax - aaa;
   ret_val = aaa * (Double_t) (*i__) + bbb;
   return ret_val;
}

#define y_ref(a_1,a_2) fNeur_1.y[(a_2)*max_nLayers_ + a_1 - 7]

void TMVA::MethodCFMlpANN_Utils::GraphNN( Int_t *ilearn, Double_t * /*xxx*/, 
                                          Double_t * /*yyy*/, char * /*det*/, Int_t  /*det_len*/ )
{
   // [smart comments to be added]
   Int_t i__1, i__2;
   
   Double_t xmok[max_nNodes_];
   Float_t xpaw;
   Double_t xmko[max_nNodes_];
   Int_t i__, j;
   Int_t ix;
   Int_t jjj;
   Float_t vbn[10];
   Int_t nko[max_nNodes_], nok[max_nNodes_];

   for (i__ = 1; i__ <= 10; ++i__) {
      vbn[i__ - 1] = (Float_t)0.;
   }
   if (*ilearn == 1) {
      // AH: removed output 
   }
   i__1 = fNeur_1.neuron[fParam_1.layerm - 1];
   for (i__ = 1; i__ <= i__1; ++i__) {
      nok[i__ - 1] = 0;
      nko[i__ - 1] = 0;
      xmok[i__ - 1] = 0.;
      xmko[i__ - 1] = 0.;
   }
   i__1 = fParam_1.nevl;
   for (i__ = 1; i__ <= i__1; ++i__) {
      En_avant(&i__);
      i__2 = fNeur_1.neuron[fParam_1.layerm - 1];
      for (j = 1; j <= i__2; ++j) {
         xpaw = (Float_t) y_ref(fParam_1.layerm, j);
         if (fVarn_1.nclass[i__ - 1] == j) {
            ++nok[j - 1];
            xmok[j - 1] += y_ref(fParam_1.layerm, j);
         } 
         else {
            ++nko[j - 1];
            xmko[j - 1] += y_ref(fParam_1.layerm, j);
            jjj = j + fNeur_1.neuron[fParam_1.layerm - 1];
         }
         if (j <= 9) {
            vbn[j - 1] = xpaw;
         }
      }
      vbn[9] = (Float_t) fVarn_1.nclass[i__ - 1];
   }
   i__1 = fNeur_1.neuron[fParam_1.layerm - 1];
   for (j = 1; j <= i__1; ++j) {
      xmok[j - 1] /= (Double_t) nok[j - 1];
      xmko[j - 1] /= (Double_t) nko[j - 1];
      fNeur_1.cut[j - 1] = (xmok[j - 1] + xmko[j - 1]) / 2.;
   }
   ix = fNeur_1.neuron[fParam_1.layerm - 1];
   i__1 = ix;
}

#undef y_ref

Double_t TMVA::MethodCFMlpANN_Utils::Sen3a( void )
{
   // [smart comments to be added]

   // Initialized data
   Int_t    m12 = 4096;
   Double_t f1  = 2.44140625e-4;
   Double_t f2  = 5.96046448e-8;
   Double_t f3  = 1.45519152e-11;
   Int_t    j1  = 3823;
   Int_t    j2  = 4006;
   Int_t    j3  = 2903;
   static Int_t fg_i1 = 3823;
   static Int_t fg_i2 = 4006;
   static Int_t fg_i3 = 2903;

   Double_t ret_val;
   Int_t    k3, l3, k2, l2, k1, l1;

   // reference: /k.d.senne/j. stochastics/ vol 1,no 3 (1974),pp.215-38 
   k3 = fg_i3 * j3;
   l3 = k3 / m12;
   k2 = fg_i2 * j3 + fg_i3 * j2 + l3;
   l2 = k2 / m12;
   k1 = fg_i1 * j3 + fg_i2 * j2 + fg_i3 * j1 + l2;
   l1 = k1 / m12;
   fg_i1 = k1 - l1 * m12;
   fg_i2 = k2 - l2 * m12;
   fg_i3 = k3 - l3 * m12;
   ret_val = f1 * (Double_t) fg_i1 + f2 * (Float_t) fg_i2 + f3 * (Double_t) fg_i3;

   return ret_val;
} 

void TMVA::MethodCFMlpANN_Utils::Foncf( Int_t *i__, Double_t *u, Double_t *f )
{
   // [needs to be checked]
   Double_t yy;

   if (*u / fDel_1.temp[*i__ - 1] > 170.) {
      *f = .99999999989999999;
   } 
   else if (*u / fDel_1.temp[*i__ - 1] < -170.) {
      *f = -.99999999989999999;
   } 
   else {
      yy = TMath::Exp(-(*u) / fDel_1.temp[*i__ - 1]);
      *f = (1. - yy) / (yy + 1.);
   }
}

#undef w_ref

#define y_ref(a_1,a_2) fNeur_1.y[(a_2)*max_nLayers_ + a_1 - 7]

void TMVA::MethodCFMlpANN_Utils::Cout2( Int_t * /*i1*/, Double_t *yyy )
{
   // [smart comments to be added]
   Int_t i__1, i__2;
   Double_t d__1;

   Double_t c__;
   Int_t i__, j;

   c__ = 0.;
   i__1 = fParam_1.nevt;
   for (i__ = 1; i__ <= i__1; ++i__) {
      En_avant2(&i__);
      i__2 = fNeur_1.neuron[fParam_1.layerm - 1];
      for (j = 1; j <= i__2; ++j) {
         if (fVarn_1.mclass[i__ - 1] == j) {
            fNeur_1.o[j - 1] = 1.;
         } 
         else {
            fNeur_1.o[j - 1] = -1.;
         }
         /* Computing 2nd power */
         d__1 = y_ref(fParam_1.layerm, j) - fNeur_1.o[j - 1];
         c__ += fDel_1.coef[j - 1] * (d__1 * d__1);
      }
   }
   c__ /= (Double_t) (fParam_1.nevt * fParam_1.lclass) * 2.;
   *yyy = c__;
}

#undef y_ref

#define xx_ref(a_1,a_2) fVarn3_1(a_1,a_2)

void TMVA::MethodCFMlpANN_Utils::Lecev2( Int_t *ktest, Double_t *tout2, Double_t *tin2 )
{
   // [smart comments to be added]
   Int_t i__1, i__2;

   Int_t i__, j, k, l, mocla[max_nNodes_], ikend;
   Double_t xpg[max_nVar_];

   /* NTRAIN: Nb of events used during the learning */
   /* NTEST: Nb of events used for the test */
   /* TIN: Input variables */
   /* TOUT: type of the event */

   *ktest = 0;
   i__1 = fParam_1.lclass;
   for (k = 1; k <= i__1; ++k) {
      mocla[k - 1] = 0;
   }
   i__1 = fParam_1.nevt;
   for (i__ = 1; i__ <= i__1; ++i__) {
      DataInterface(tout2, tin2, &fg_999, &fg_0, &fParam_1.nevt, &fParam_1.nvar, 
                    xpg, &fVarn_1.mclass[i__ - 1], &ikend);

      if (ikend == -1) {
         break;
      }

      i__2 = fParam_1.nvar;
      for (j = 1; j <= i__2; ++j) {
         xx_ref(i__, j) = xpg[j - 1];
      }
   }
 
   i__1 = fParam_1.nevt;
   for (i__ = 1; i__ <= i__1; ++i__) {
      i__2 = fParam_1.nvar;
      for (l = 1; l <= i__2; ++l) {
         if (fVarn_1.xmax[l - 1] == (Float_t)0. && fVarn_1.xmin[l - 1] == (
                                                                           Float_t)0.) {
            xx_ref(i__, l) = (Float_t)0.;
         } 
         else {
            xx_ref(i__, l) = xx_ref(i__, l) - (fVarn_1.xmax[l - 1] + 
                                               fVarn_1.xmin[l - 1]) / 2.;
            xx_ref(i__, l) = xx_ref(i__, l) / ((fVarn_1.xmax[l - 1] - 
                                                fVarn_1.xmin[l - 1]) / 2.);
         }
      }
   }
} 

#undef xx_ref

#define w_ref(a_1,a_2,a_3) fNeur_1.w[((a_3)*max_nNodes_ + (a_2))*max_nLayers_ + a_1 - 187]
#define x_ref(a_1,a_2) fNeur_1.x[(a_2)*max_nLayers_ + a_1 - 7]
#define y_ref(a_1,a_2) fNeur_1.y[(a_2)*max_nLayers_ + a_1 - 7]
#define ww_ref(a_1,a_2) fNeur_1.ww[(a_2)*max_nLayers_ + a_1 - 7]
#define xx_ref(a_1,a_2) fVarn3_1(a_1,a_2)

void TMVA::MethodCFMlpANN_Utils::En_avant2( Int_t *ievent )
{
   // [smart comments to be added]
   Int_t i__1, i__2, i__3;

   Double_t f;
   Int_t i__, j;
   Int_t layer;

   i__1 = fNeur_1.neuron[0];
   for (i__ = 1; i__ <= i__1; ++i__) {
      y_ref(1, i__) = xx_ref(*ievent, i__);
   }
   i__1 = fParam_1.layerm - 1;
   for (layer = 1; layer <= i__1; ++layer) {
      i__2 = fNeur_1.neuron[layer];
      for (j = 1; j <= i__2; ++j) {
         x_ref(layer + 1, j) = 0.;
         i__3 = fNeur_1.neuron[layer - 1];
         for (i__ = 1; i__ <= i__3; ++i__) {
            x_ref(layer + 1, j) = x_ref(layer + 1, j) + y_ref(layer, i__) 
               * w_ref(layer + 1, j, i__);
         }
         x_ref(layer + 1, j) = x_ref(layer + 1, j) + ww_ref(layer + 1, j);
         i__3 = layer + 1;
         Foncf(&i__3, &x_ref(layer + 1, j), &f);
         y_ref(layer + 1, j) = f;
         /* L2: */
      }
   }
}

#undef xx_ref
#undef ww_ref
#undef y_ref
#undef x_ref
#undef w_ref

void TMVA::MethodCFMlpANN_Utils::Arret( const char* mot )
{
   // fatal error occurred: stop execution
   printf("%s: %s",fg_MethodName, mot);
   std::exit(1);
}

void TMVA::MethodCFMlpANN_Utils::CollectVar( Int_t *nvar, Int_t *class__, Double_t *xpg )
{
   // [smart comments to be added]
   Int_t i__1;
   
   Int_t i__;
   Float_t x[201];

   // Parameter adjustments
   --xpg;

   for (i__ = 1; i__ <= 201; ++i__) {
      x[i__ - 1] = 0.0;
   }
   x[0] = (Float_t) (*class__);
   i__1 = *nvar;
   for (i__ = 1; i__ <= i__1; ++i__) {
      x[i__] = (Float_t) xpg[i__];
   }
}
 MethodCFMlpANN_Utils.cxx:1
 MethodCFMlpANN_Utils.cxx:2
 MethodCFMlpANN_Utils.cxx:3
 MethodCFMlpANN_Utils.cxx:4
 MethodCFMlpANN_Utils.cxx:5
 MethodCFMlpANN_Utils.cxx:6
 MethodCFMlpANN_Utils.cxx:7
 MethodCFMlpANN_Utils.cxx:8
 MethodCFMlpANN_Utils.cxx:9
 MethodCFMlpANN_Utils.cxx:10
 MethodCFMlpANN_Utils.cxx:11
 MethodCFMlpANN_Utils.cxx:12
 MethodCFMlpANN_Utils.cxx:13
 MethodCFMlpANN_Utils.cxx:14
 MethodCFMlpANN_Utils.cxx:15
 MethodCFMlpANN_Utils.cxx:16
 MethodCFMlpANN_Utils.cxx:17
 MethodCFMlpANN_Utils.cxx:18
 MethodCFMlpANN_Utils.cxx:19
 MethodCFMlpANN_Utils.cxx:20
 MethodCFMlpANN_Utils.cxx:21
 MethodCFMlpANN_Utils.cxx:22
 MethodCFMlpANN_Utils.cxx:23
 MethodCFMlpANN_Utils.cxx:24
 MethodCFMlpANN_Utils.cxx:25
 MethodCFMlpANN_Utils.cxx:26
 MethodCFMlpANN_Utils.cxx:27
 MethodCFMlpANN_Utils.cxx:28
 MethodCFMlpANN_Utils.cxx:29
 MethodCFMlpANN_Utils.cxx:30
 MethodCFMlpANN_Utils.cxx:31
 MethodCFMlpANN_Utils.cxx:32
 MethodCFMlpANN_Utils.cxx:33
 MethodCFMlpANN_Utils.cxx:34
 MethodCFMlpANN_Utils.cxx:35
 MethodCFMlpANN_Utils.cxx:36
 MethodCFMlpANN_Utils.cxx:37
 MethodCFMlpANN_Utils.cxx:38
 MethodCFMlpANN_Utils.cxx:39
 MethodCFMlpANN_Utils.cxx:40
 MethodCFMlpANN_Utils.cxx:41
 MethodCFMlpANN_Utils.cxx:42
 MethodCFMlpANN_Utils.cxx:43
 MethodCFMlpANN_Utils.cxx:44
 MethodCFMlpANN_Utils.cxx:45
 MethodCFMlpANN_Utils.cxx:46
 MethodCFMlpANN_Utils.cxx:47
 MethodCFMlpANN_Utils.cxx:48
 MethodCFMlpANN_Utils.cxx:49
 MethodCFMlpANN_Utils.cxx:50
 MethodCFMlpANN_Utils.cxx:51
 MethodCFMlpANN_Utils.cxx:52
 MethodCFMlpANN_Utils.cxx:53
 MethodCFMlpANN_Utils.cxx:54
 MethodCFMlpANN_Utils.cxx:55
 MethodCFMlpANN_Utils.cxx:56
 MethodCFMlpANN_Utils.cxx:57
 MethodCFMlpANN_Utils.cxx:58
 MethodCFMlpANN_Utils.cxx:59
 MethodCFMlpANN_Utils.cxx:60
 MethodCFMlpANN_Utils.cxx:61
 MethodCFMlpANN_Utils.cxx:62
 MethodCFMlpANN_Utils.cxx:63
 MethodCFMlpANN_Utils.cxx:64
 MethodCFMlpANN_Utils.cxx:65
 MethodCFMlpANN_Utils.cxx:66
 MethodCFMlpANN_Utils.cxx:67
 MethodCFMlpANN_Utils.cxx:68
 MethodCFMlpANN_Utils.cxx:69
 MethodCFMlpANN_Utils.cxx:70
 MethodCFMlpANN_Utils.cxx:71
 MethodCFMlpANN_Utils.cxx:72
 MethodCFMlpANN_Utils.cxx:73
 MethodCFMlpANN_Utils.cxx:74
 MethodCFMlpANN_Utils.cxx:75
 MethodCFMlpANN_Utils.cxx:76
 MethodCFMlpANN_Utils.cxx:77
 MethodCFMlpANN_Utils.cxx:78
 MethodCFMlpANN_Utils.cxx:79
 MethodCFMlpANN_Utils.cxx:80
 MethodCFMlpANN_Utils.cxx:81
 MethodCFMlpANN_Utils.cxx:82
 MethodCFMlpANN_Utils.cxx:83
 MethodCFMlpANN_Utils.cxx:84
 MethodCFMlpANN_Utils.cxx:85
 MethodCFMlpANN_Utils.cxx:86
 MethodCFMlpANN_Utils.cxx:87
 MethodCFMlpANN_Utils.cxx:88
 MethodCFMlpANN_Utils.cxx:89
 MethodCFMlpANN_Utils.cxx:90
 MethodCFMlpANN_Utils.cxx:91
 MethodCFMlpANN_Utils.cxx:92
 MethodCFMlpANN_Utils.cxx:93
 MethodCFMlpANN_Utils.cxx:94
 MethodCFMlpANN_Utils.cxx:95
 MethodCFMlpANN_Utils.cxx:96
 MethodCFMlpANN_Utils.cxx:97
 MethodCFMlpANN_Utils.cxx:98
 MethodCFMlpANN_Utils.cxx:99
 MethodCFMlpANN_Utils.cxx:100
 MethodCFMlpANN_Utils.cxx:101
 MethodCFMlpANN_Utils.cxx:102
 MethodCFMlpANN_Utils.cxx:103
 MethodCFMlpANN_Utils.cxx:104
 MethodCFMlpANN_Utils.cxx:105
 MethodCFMlpANN_Utils.cxx:106
 MethodCFMlpANN_Utils.cxx:107
 MethodCFMlpANN_Utils.cxx:108
 MethodCFMlpANN_Utils.cxx:109
 MethodCFMlpANN_Utils.cxx:110
 MethodCFMlpANN_Utils.cxx:111
 MethodCFMlpANN_Utils.cxx:112
 MethodCFMlpANN_Utils.cxx:113
 MethodCFMlpANN_Utils.cxx:114
 MethodCFMlpANN_Utils.cxx:115
 MethodCFMlpANN_Utils.cxx:116
 MethodCFMlpANN_Utils.cxx:117
 MethodCFMlpANN_Utils.cxx:118
 MethodCFMlpANN_Utils.cxx:119
 MethodCFMlpANN_Utils.cxx:120
 MethodCFMlpANN_Utils.cxx:121
 MethodCFMlpANN_Utils.cxx:122
 MethodCFMlpANN_Utils.cxx:123
 MethodCFMlpANN_Utils.cxx:124
 MethodCFMlpANN_Utils.cxx:125
 MethodCFMlpANN_Utils.cxx:126
 MethodCFMlpANN_Utils.cxx:127
 MethodCFMlpANN_Utils.cxx:128
 MethodCFMlpANN_Utils.cxx:129
 MethodCFMlpANN_Utils.cxx:130
 MethodCFMlpANN_Utils.cxx:131
 MethodCFMlpANN_Utils.cxx:132
 MethodCFMlpANN_Utils.cxx:133
 MethodCFMlpANN_Utils.cxx:134
 MethodCFMlpANN_Utils.cxx:135
 MethodCFMlpANN_Utils.cxx:136
 MethodCFMlpANN_Utils.cxx:137
 MethodCFMlpANN_Utils.cxx:138
 MethodCFMlpANN_Utils.cxx:139
 MethodCFMlpANN_Utils.cxx:140
 MethodCFMlpANN_Utils.cxx:141
 MethodCFMlpANN_Utils.cxx:142
 MethodCFMlpANN_Utils.cxx:143
 MethodCFMlpANN_Utils.cxx:144
 MethodCFMlpANN_Utils.cxx:145
 MethodCFMlpANN_Utils.cxx:146
 MethodCFMlpANN_Utils.cxx:147
 MethodCFMlpANN_Utils.cxx:148
 MethodCFMlpANN_Utils.cxx:149
 MethodCFMlpANN_Utils.cxx:150
 MethodCFMlpANN_Utils.cxx:151
 MethodCFMlpANN_Utils.cxx:152
 MethodCFMlpANN_Utils.cxx:153
 MethodCFMlpANN_Utils.cxx:154
 MethodCFMlpANN_Utils.cxx:155
 MethodCFMlpANN_Utils.cxx:156
 MethodCFMlpANN_Utils.cxx:157
 MethodCFMlpANN_Utils.cxx:158
 MethodCFMlpANN_Utils.cxx:159
 MethodCFMlpANN_Utils.cxx:160
 MethodCFMlpANN_Utils.cxx:161
 MethodCFMlpANN_Utils.cxx:162
 MethodCFMlpANN_Utils.cxx:163
 MethodCFMlpANN_Utils.cxx:164
 MethodCFMlpANN_Utils.cxx:165
 MethodCFMlpANN_Utils.cxx:166
 MethodCFMlpANN_Utils.cxx:167
 MethodCFMlpANN_Utils.cxx:168
 MethodCFMlpANN_Utils.cxx:169
 MethodCFMlpANN_Utils.cxx:170
 MethodCFMlpANN_Utils.cxx:171
 MethodCFMlpANN_Utils.cxx:172
 MethodCFMlpANN_Utils.cxx:173
 MethodCFMlpANN_Utils.cxx:174
 MethodCFMlpANN_Utils.cxx:175
 MethodCFMlpANN_Utils.cxx:176
 MethodCFMlpANN_Utils.cxx:177
 MethodCFMlpANN_Utils.cxx:178
 MethodCFMlpANN_Utils.cxx:179
 MethodCFMlpANN_Utils.cxx:180
 MethodCFMlpANN_Utils.cxx:181
 MethodCFMlpANN_Utils.cxx:182
 MethodCFMlpANN_Utils.cxx:183
 MethodCFMlpANN_Utils.cxx:184
 MethodCFMlpANN_Utils.cxx:185
 MethodCFMlpANN_Utils.cxx:186
 MethodCFMlpANN_Utils.cxx:187
 MethodCFMlpANN_Utils.cxx:188
 MethodCFMlpANN_Utils.cxx:189
 MethodCFMlpANN_Utils.cxx:190
 MethodCFMlpANN_Utils.cxx:191
 MethodCFMlpANN_Utils.cxx:192
 MethodCFMlpANN_Utils.cxx:193
 MethodCFMlpANN_Utils.cxx:194
 MethodCFMlpANN_Utils.cxx:195
 MethodCFMlpANN_Utils.cxx:196
 MethodCFMlpANN_Utils.cxx:197
 MethodCFMlpANN_Utils.cxx:198
 MethodCFMlpANN_Utils.cxx:199
 MethodCFMlpANN_Utils.cxx:200
 MethodCFMlpANN_Utils.cxx:201
 MethodCFMlpANN_Utils.cxx:202
 MethodCFMlpANN_Utils.cxx:203
 MethodCFMlpANN_Utils.cxx:204
 MethodCFMlpANN_Utils.cxx:205
 MethodCFMlpANN_Utils.cxx:206
 MethodCFMlpANN_Utils.cxx:207
 MethodCFMlpANN_Utils.cxx:208
 MethodCFMlpANN_Utils.cxx:209
 MethodCFMlpANN_Utils.cxx:210
 MethodCFMlpANN_Utils.cxx:211
 MethodCFMlpANN_Utils.cxx:212
 MethodCFMlpANN_Utils.cxx:213
 MethodCFMlpANN_Utils.cxx:214
 MethodCFMlpANN_Utils.cxx:215
 MethodCFMlpANN_Utils.cxx:216
 MethodCFMlpANN_Utils.cxx:217
 MethodCFMlpANN_Utils.cxx:218
 MethodCFMlpANN_Utils.cxx:219
 MethodCFMlpANN_Utils.cxx:220
 MethodCFMlpANN_Utils.cxx:221
 MethodCFMlpANN_Utils.cxx:222
 MethodCFMlpANN_Utils.cxx:223
 MethodCFMlpANN_Utils.cxx:224
 MethodCFMlpANN_Utils.cxx:225
 MethodCFMlpANN_Utils.cxx:226
 MethodCFMlpANN_Utils.cxx:227
 MethodCFMlpANN_Utils.cxx:228
 MethodCFMlpANN_Utils.cxx:229
 MethodCFMlpANN_Utils.cxx:230
 MethodCFMlpANN_Utils.cxx:231
 MethodCFMlpANN_Utils.cxx:232
 MethodCFMlpANN_Utils.cxx:233
 MethodCFMlpANN_Utils.cxx:234
 MethodCFMlpANN_Utils.cxx:235
 MethodCFMlpANN_Utils.cxx:236
 MethodCFMlpANN_Utils.cxx:237
 MethodCFMlpANN_Utils.cxx:238
 MethodCFMlpANN_Utils.cxx:239
 MethodCFMlpANN_Utils.cxx:240
 MethodCFMlpANN_Utils.cxx:241
 MethodCFMlpANN_Utils.cxx:242
 MethodCFMlpANN_Utils.cxx:243
 MethodCFMlpANN_Utils.cxx:244
 MethodCFMlpANN_Utils.cxx:245
 MethodCFMlpANN_Utils.cxx:246
 MethodCFMlpANN_Utils.cxx:247
 MethodCFMlpANN_Utils.cxx:248
 MethodCFMlpANN_Utils.cxx:249
 MethodCFMlpANN_Utils.cxx:250
 MethodCFMlpANN_Utils.cxx:251
 MethodCFMlpANN_Utils.cxx:252
 MethodCFMlpANN_Utils.cxx:253
 MethodCFMlpANN_Utils.cxx:254
 MethodCFMlpANN_Utils.cxx:255
 MethodCFMlpANN_Utils.cxx:256
 MethodCFMlpANN_Utils.cxx:257
 MethodCFMlpANN_Utils.cxx:258
 MethodCFMlpANN_Utils.cxx:259
 MethodCFMlpANN_Utils.cxx:260
 MethodCFMlpANN_Utils.cxx:261
 MethodCFMlpANN_Utils.cxx:262
 MethodCFMlpANN_Utils.cxx:263
 MethodCFMlpANN_Utils.cxx:264
 MethodCFMlpANN_Utils.cxx:265
 MethodCFMlpANN_Utils.cxx:266
 MethodCFMlpANN_Utils.cxx:267
 MethodCFMlpANN_Utils.cxx:268
 MethodCFMlpANN_Utils.cxx:269
 MethodCFMlpANN_Utils.cxx:270
 MethodCFMlpANN_Utils.cxx:271
 MethodCFMlpANN_Utils.cxx:272
 MethodCFMlpANN_Utils.cxx:273
 MethodCFMlpANN_Utils.cxx:274
 MethodCFMlpANN_Utils.cxx:275
 MethodCFMlpANN_Utils.cxx:276
 MethodCFMlpANN_Utils.cxx:277
 MethodCFMlpANN_Utils.cxx:278
 MethodCFMlpANN_Utils.cxx:279
 MethodCFMlpANN_Utils.cxx:280
 MethodCFMlpANN_Utils.cxx:281
 MethodCFMlpANN_Utils.cxx:282
 MethodCFMlpANN_Utils.cxx:283
 MethodCFMlpANN_Utils.cxx:284
 MethodCFMlpANN_Utils.cxx:285
 MethodCFMlpANN_Utils.cxx:286
 MethodCFMlpANN_Utils.cxx:287
 MethodCFMlpANN_Utils.cxx:288
 MethodCFMlpANN_Utils.cxx:289
 MethodCFMlpANN_Utils.cxx:290
 MethodCFMlpANN_Utils.cxx:291
 MethodCFMlpANN_Utils.cxx:292
 MethodCFMlpANN_Utils.cxx:293
 MethodCFMlpANN_Utils.cxx:294
 MethodCFMlpANN_Utils.cxx:295
 MethodCFMlpANN_Utils.cxx:296
 MethodCFMlpANN_Utils.cxx:297
 MethodCFMlpANN_Utils.cxx:298
 MethodCFMlpANN_Utils.cxx:299
 MethodCFMlpANN_Utils.cxx:300
 MethodCFMlpANN_Utils.cxx:301
 MethodCFMlpANN_Utils.cxx:302
 MethodCFMlpANN_Utils.cxx:303
 MethodCFMlpANN_Utils.cxx:304
 MethodCFMlpANN_Utils.cxx:305
 MethodCFMlpANN_Utils.cxx:306
 MethodCFMlpANN_Utils.cxx:307
 MethodCFMlpANN_Utils.cxx:308
 MethodCFMlpANN_Utils.cxx:309
 MethodCFMlpANN_Utils.cxx:310
 MethodCFMlpANN_Utils.cxx:311
 MethodCFMlpANN_Utils.cxx:312
 MethodCFMlpANN_Utils.cxx:313
 MethodCFMlpANN_Utils.cxx:314
 MethodCFMlpANN_Utils.cxx:315
 MethodCFMlpANN_Utils.cxx:316
 MethodCFMlpANN_Utils.cxx:317
 MethodCFMlpANN_Utils.cxx:318
 MethodCFMlpANN_Utils.cxx:319
 MethodCFMlpANN_Utils.cxx:320
 MethodCFMlpANN_Utils.cxx:321
 MethodCFMlpANN_Utils.cxx:322
 MethodCFMlpANN_Utils.cxx:323
 MethodCFMlpANN_Utils.cxx:324
 MethodCFMlpANN_Utils.cxx:325
 MethodCFMlpANN_Utils.cxx:326
 MethodCFMlpANN_Utils.cxx:327
 MethodCFMlpANN_Utils.cxx:328
 MethodCFMlpANN_Utils.cxx:329
 MethodCFMlpANN_Utils.cxx:330
 MethodCFMlpANN_Utils.cxx:331
 MethodCFMlpANN_Utils.cxx:332
 MethodCFMlpANN_Utils.cxx:333
 MethodCFMlpANN_Utils.cxx:334
 MethodCFMlpANN_Utils.cxx:335
 MethodCFMlpANN_Utils.cxx:336
 MethodCFMlpANN_Utils.cxx:337
 MethodCFMlpANN_Utils.cxx:338
 MethodCFMlpANN_Utils.cxx:339
 MethodCFMlpANN_Utils.cxx:340
 MethodCFMlpANN_Utils.cxx:341
 MethodCFMlpANN_Utils.cxx:342
 MethodCFMlpANN_Utils.cxx:343
 MethodCFMlpANN_Utils.cxx:344
 MethodCFMlpANN_Utils.cxx:345
 MethodCFMlpANN_Utils.cxx:346
 MethodCFMlpANN_Utils.cxx:347
 MethodCFMlpANN_Utils.cxx:348
 MethodCFMlpANN_Utils.cxx:349
 MethodCFMlpANN_Utils.cxx:350
 MethodCFMlpANN_Utils.cxx:351
 MethodCFMlpANN_Utils.cxx:352
 MethodCFMlpANN_Utils.cxx:353
 MethodCFMlpANN_Utils.cxx:354
 MethodCFMlpANN_Utils.cxx:355
 MethodCFMlpANN_Utils.cxx:356
 MethodCFMlpANN_Utils.cxx:357
 MethodCFMlpANN_Utils.cxx:358
 MethodCFMlpANN_Utils.cxx:359
 MethodCFMlpANN_Utils.cxx:360
 MethodCFMlpANN_Utils.cxx:361
 MethodCFMlpANN_Utils.cxx:362
 MethodCFMlpANN_Utils.cxx:363
 MethodCFMlpANN_Utils.cxx:364
 MethodCFMlpANN_Utils.cxx:365
 MethodCFMlpANN_Utils.cxx:366
 MethodCFMlpANN_Utils.cxx:367
 MethodCFMlpANN_Utils.cxx:368
 MethodCFMlpANN_Utils.cxx:369
 MethodCFMlpANN_Utils.cxx:370
 MethodCFMlpANN_Utils.cxx:371
 MethodCFMlpANN_Utils.cxx:372
 MethodCFMlpANN_Utils.cxx:373
 MethodCFMlpANN_Utils.cxx:374
 MethodCFMlpANN_Utils.cxx:375
 MethodCFMlpANN_Utils.cxx:376
 MethodCFMlpANN_Utils.cxx:377
 MethodCFMlpANN_Utils.cxx:378
 MethodCFMlpANN_Utils.cxx:379
 MethodCFMlpANN_Utils.cxx:380
 MethodCFMlpANN_Utils.cxx:381
 MethodCFMlpANN_Utils.cxx:382
 MethodCFMlpANN_Utils.cxx:383
 MethodCFMlpANN_Utils.cxx:384
 MethodCFMlpANN_Utils.cxx:385
 MethodCFMlpANN_Utils.cxx:386
 MethodCFMlpANN_Utils.cxx:387
 MethodCFMlpANN_Utils.cxx:388
 MethodCFMlpANN_Utils.cxx:389
 MethodCFMlpANN_Utils.cxx:390
 MethodCFMlpANN_Utils.cxx:391
 MethodCFMlpANN_Utils.cxx:392
 MethodCFMlpANN_Utils.cxx:393
 MethodCFMlpANN_Utils.cxx:394
 MethodCFMlpANN_Utils.cxx:395
 MethodCFMlpANN_Utils.cxx:396
 MethodCFMlpANN_Utils.cxx:397
 MethodCFMlpANN_Utils.cxx:398
 MethodCFMlpANN_Utils.cxx:399
 MethodCFMlpANN_Utils.cxx:400
 MethodCFMlpANN_Utils.cxx:401
 MethodCFMlpANN_Utils.cxx:402
 MethodCFMlpANN_Utils.cxx:403
 MethodCFMlpANN_Utils.cxx:404
 MethodCFMlpANN_Utils.cxx:405
 MethodCFMlpANN_Utils.cxx:406
 MethodCFMlpANN_Utils.cxx:407
 MethodCFMlpANN_Utils.cxx:408
 MethodCFMlpANN_Utils.cxx:409
 MethodCFMlpANN_Utils.cxx:410
 MethodCFMlpANN_Utils.cxx:411
 MethodCFMlpANN_Utils.cxx:412
 MethodCFMlpANN_Utils.cxx:413
 MethodCFMlpANN_Utils.cxx:414
 MethodCFMlpANN_Utils.cxx:415
 MethodCFMlpANN_Utils.cxx:416
 MethodCFMlpANN_Utils.cxx:417
 MethodCFMlpANN_Utils.cxx:418
 MethodCFMlpANN_Utils.cxx:419
 MethodCFMlpANN_Utils.cxx:420
 MethodCFMlpANN_Utils.cxx:421
 MethodCFMlpANN_Utils.cxx:422
 MethodCFMlpANN_Utils.cxx:423
 MethodCFMlpANN_Utils.cxx:424
 MethodCFMlpANN_Utils.cxx:425
 MethodCFMlpANN_Utils.cxx:426
 MethodCFMlpANN_Utils.cxx:427
 MethodCFMlpANN_Utils.cxx:428
 MethodCFMlpANN_Utils.cxx:429
 MethodCFMlpANN_Utils.cxx:430
 MethodCFMlpANN_Utils.cxx:431
 MethodCFMlpANN_Utils.cxx:432
 MethodCFMlpANN_Utils.cxx:433
 MethodCFMlpANN_Utils.cxx:434
 MethodCFMlpANN_Utils.cxx:435
 MethodCFMlpANN_Utils.cxx:436
 MethodCFMlpANN_Utils.cxx:437
 MethodCFMlpANN_Utils.cxx:438
 MethodCFMlpANN_Utils.cxx:439
 MethodCFMlpANN_Utils.cxx:440
 MethodCFMlpANN_Utils.cxx:441
 MethodCFMlpANN_Utils.cxx:442
 MethodCFMlpANN_Utils.cxx:443
 MethodCFMlpANN_Utils.cxx:444
 MethodCFMlpANN_Utils.cxx:445
 MethodCFMlpANN_Utils.cxx:446
 MethodCFMlpANN_Utils.cxx:447
 MethodCFMlpANN_Utils.cxx:448
 MethodCFMlpANN_Utils.cxx:449
 MethodCFMlpANN_Utils.cxx:450
 MethodCFMlpANN_Utils.cxx:451
 MethodCFMlpANN_Utils.cxx:452
 MethodCFMlpANN_Utils.cxx:453
 MethodCFMlpANN_Utils.cxx:454
 MethodCFMlpANN_Utils.cxx:455
 MethodCFMlpANN_Utils.cxx:456
 MethodCFMlpANN_Utils.cxx:457
 MethodCFMlpANN_Utils.cxx:458
 MethodCFMlpANN_Utils.cxx:459
 MethodCFMlpANN_Utils.cxx:460
 MethodCFMlpANN_Utils.cxx:461
 MethodCFMlpANN_Utils.cxx:462
 MethodCFMlpANN_Utils.cxx:463
 MethodCFMlpANN_Utils.cxx:464
 MethodCFMlpANN_Utils.cxx:465
 MethodCFMlpANN_Utils.cxx:466
 MethodCFMlpANN_Utils.cxx:467
 MethodCFMlpANN_Utils.cxx:468
 MethodCFMlpANN_Utils.cxx:469
 MethodCFMlpANN_Utils.cxx:470
 MethodCFMlpANN_Utils.cxx:471
 MethodCFMlpANN_Utils.cxx:472
 MethodCFMlpANN_Utils.cxx:473
 MethodCFMlpANN_Utils.cxx:474
 MethodCFMlpANN_Utils.cxx:475
 MethodCFMlpANN_Utils.cxx:476
 MethodCFMlpANN_Utils.cxx:477
 MethodCFMlpANN_Utils.cxx:478
 MethodCFMlpANN_Utils.cxx:479
 MethodCFMlpANN_Utils.cxx:480
 MethodCFMlpANN_Utils.cxx:481
 MethodCFMlpANN_Utils.cxx:482
 MethodCFMlpANN_Utils.cxx:483
 MethodCFMlpANN_Utils.cxx:484
 MethodCFMlpANN_Utils.cxx:485
 MethodCFMlpANN_Utils.cxx:486
 MethodCFMlpANN_Utils.cxx:487
 MethodCFMlpANN_Utils.cxx:488
 MethodCFMlpANN_Utils.cxx:489
 MethodCFMlpANN_Utils.cxx:490
 MethodCFMlpANN_Utils.cxx:491
 MethodCFMlpANN_Utils.cxx:492
 MethodCFMlpANN_Utils.cxx:493
 MethodCFMlpANN_Utils.cxx:494
 MethodCFMlpANN_Utils.cxx:495
 MethodCFMlpANN_Utils.cxx:496
 MethodCFMlpANN_Utils.cxx:497
 MethodCFMlpANN_Utils.cxx:498
 MethodCFMlpANN_Utils.cxx:499
 MethodCFMlpANN_Utils.cxx:500
 MethodCFMlpANN_Utils.cxx:501
 MethodCFMlpANN_Utils.cxx:502
 MethodCFMlpANN_Utils.cxx:503
 MethodCFMlpANN_Utils.cxx:504
 MethodCFMlpANN_Utils.cxx:505
 MethodCFMlpANN_Utils.cxx:506
 MethodCFMlpANN_Utils.cxx:507
 MethodCFMlpANN_Utils.cxx:508
 MethodCFMlpANN_Utils.cxx:509
 MethodCFMlpANN_Utils.cxx:510
 MethodCFMlpANN_Utils.cxx:511
 MethodCFMlpANN_Utils.cxx:512
 MethodCFMlpANN_Utils.cxx:513
 MethodCFMlpANN_Utils.cxx:514
 MethodCFMlpANN_Utils.cxx:515
 MethodCFMlpANN_Utils.cxx:516
 MethodCFMlpANN_Utils.cxx:517
 MethodCFMlpANN_Utils.cxx:518
 MethodCFMlpANN_Utils.cxx:519
 MethodCFMlpANN_Utils.cxx:520
 MethodCFMlpANN_Utils.cxx:521
 MethodCFMlpANN_Utils.cxx:522
 MethodCFMlpANN_Utils.cxx:523
 MethodCFMlpANN_Utils.cxx:524
 MethodCFMlpANN_Utils.cxx:525
 MethodCFMlpANN_Utils.cxx:526
 MethodCFMlpANN_Utils.cxx:527
 MethodCFMlpANN_Utils.cxx:528
 MethodCFMlpANN_Utils.cxx:529
 MethodCFMlpANN_Utils.cxx:530
 MethodCFMlpANN_Utils.cxx:531
 MethodCFMlpANN_Utils.cxx:532
 MethodCFMlpANN_Utils.cxx:533
 MethodCFMlpANN_Utils.cxx:534
 MethodCFMlpANN_Utils.cxx:535
 MethodCFMlpANN_Utils.cxx:536
 MethodCFMlpANN_Utils.cxx:537
 MethodCFMlpANN_Utils.cxx:538
 MethodCFMlpANN_Utils.cxx:539
 MethodCFMlpANN_Utils.cxx:540
 MethodCFMlpANN_Utils.cxx:541
 MethodCFMlpANN_Utils.cxx:542
 MethodCFMlpANN_Utils.cxx:543
 MethodCFMlpANN_Utils.cxx:544
 MethodCFMlpANN_Utils.cxx:545
 MethodCFMlpANN_Utils.cxx:546
 MethodCFMlpANN_Utils.cxx:547
 MethodCFMlpANN_Utils.cxx:548
 MethodCFMlpANN_Utils.cxx:549
 MethodCFMlpANN_Utils.cxx:550
 MethodCFMlpANN_Utils.cxx:551
 MethodCFMlpANN_Utils.cxx:552
 MethodCFMlpANN_Utils.cxx:553
 MethodCFMlpANN_Utils.cxx:554
 MethodCFMlpANN_Utils.cxx:555
 MethodCFMlpANN_Utils.cxx:556
 MethodCFMlpANN_Utils.cxx:557
 MethodCFMlpANN_Utils.cxx:558
 MethodCFMlpANN_Utils.cxx:559
 MethodCFMlpANN_Utils.cxx:560
 MethodCFMlpANN_Utils.cxx:561
 MethodCFMlpANN_Utils.cxx:562
 MethodCFMlpANN_Utils.cxx:563
 MethodCFMlpANN_Utils.cxx:564
 MethodCFMlpANN_Utils.cxx:565
 MethodCFMlpANN_Utils.cxx:566
 MethodCFMlpANN_Utils.cxx:567
 MethodCFMlpANN_Utils.cxx:568
 MethodCFMlpANN_Utils.cxx:569
 MethodCFMlpANN_Utils.cxx:570
 MethodCFMlpANN_Utils.cxx:571
 MethodCFMlpANN_Utils.cxx:572
 MethodCFMlpANN_Utils.cxx:573
 MethodCFMlpANN_Utils.cxx:574
 MethodCFMlpANN_Utils.cxx:575
 MethodCFMlpANN_Utils.cxx:576
 MethodCFMlpANN_Utils.cxx:577
 MethodCFMlpANN_Utils.cxx:578
 MethodCFMlpANN_Utils.cxx:579
 MethodCFMlpANN_Utils.cxx:580
 MethodCFMlpANN_Utils.cxx:581
 MethodCFMlpANN_Utils.cxx:582
 MethodCFMlpANN_Utils.cxx:583
 MethodCFMlpANN_Utils.cxx:584
 MethodCFMlpANN_Utils.cxx:585
 MethodCFMlpANN_Utils.cxx:586
 MethodCFMlpANN_Utils.cxx:587
 MethodCFMlpANN_Utils.cxx:588
 MethodCFMlpANN_Utils.cxx:589
 MethodCFMlpANN_Utils.cxx:590
 MethodCFMlpANN_Utils.cxx:591
 MethodCFMlpANN_Utils.cxx:592
 MethodCFMlpANN_Utils.cxx:593
 MethodCFMlpANN_Utils.cxx:594
 MethodCFMlpANN_Utils.cxx:595
 MethodCFMlpANN_Utils.cxx:596
 MethodCFMlpANN_Utils.cxx:597
 MethodCFMlpANN_Utils.cxx:598
 MethodCFMlpANN_Utils.cxx:599
 MethodCFMlpANN_Utils.cxx:600
 MethodCFMlpANN_Utils.cxx:601
 MethodCFMlpANN_Utils.cxx:602
 MethodCFMlpANN_Utils.cxx:603
 MethodCFMlpANN_Utils.cxx:604
 MethodCFMlpANN_Utils.cxx:605
 MethodCFMlpANN_Utils.cxx:606
 MethodCFMlpANN_Utils.cxx:607
 MethodCFMlpANN_Utils.cxx:608
 MethodCFMlpANN_Utils.cxx:609
 MethodCFMlpANN_Utils.cxx:610
 MethodCFMlpANN_Utils.cxx:611
 MethodCFMlpANN_Utils.cxx:612
 MethodCFMlpANN_Utils.cxx:613
 MethodCFMlpANN_Utils.cxx:614
 MethodCFMlpANN_Utils.cxx:615
 MethodCFMlpANN_Utils.cxx:616
 MethodCFMlpANN_Utils.cxx:617
 MethodCFMlpANN_Utils.cxx:618
 MethodCFMlpANN_Utils.cxx:619
 MethodCFMlpANN_Utils.cxx:620
 MethodCFMlpANN_Utils.cxx:621
 MethodCFMlpANN_Utils.cxx:622
 MethodCFMlpANN_Utils.cxx:623
 MethodCFMlpANN_Utils.cxx:624
 MethodCFMlpANN_Utils.cxx:625
 MethodCFMlpANN_Utils.cxx:626
 MethodCFMlpANN_Utils.cxx:627
 MethodCFMlpANN_Utils.cxx:628
 MethodCFMlpANN_Utils.cxx:629
 MethodCFMlpANN_Utils.cxx:630
 MethodCFMlpANN_Utils.cxx:631
 MethodCFMlpANN_Utils.cxx:632
 MethodCFMlpANN_Utils.cxx:633
 MethodCFMlpANN_Utils.cxx:634
 MethodCFMlpANN_Utils.cxx:635
 MethodCFMlpANN_Utils.cxx:636
 MethodCFMlpANN_Utils.cxx:637
 MethodCFMlpANN_Utils.cxx:638
 MethodCFMlpANN_Utils.cxx:639
 MethodCFMlpANN_Utils.cxx:640
 MethodCFMlpANN_Utils.cxx:641
 MethodCFMlpANN_Utils.cxx:642
 MethodCFMlpANN_Utils.cxx:643
 MethodCFMlpANN_Utils.cxx:644
 MethodCFMlpANN_Utils.cxx:645
 MethodCFMlpANN_Utils.cxx:646
 MethodCFMlpANN_Utils.cxx:647
 MethodCFMlpANN_Utils.cxx:648
 MethodCFMlpANN_Utils.cxx:649
 MethodCFMlpANN_Utils.cxx:650
 MethodCFMlpANN_Utils.cxx:651
 MethodCFMlpANN_Utils.cxx:652
 MethodCFMlpANN_Utils.cxx:653
 MethodCFMlpANN_Utils.cxx:654
 MethodCFMlpANN_Utils.cxx:655
 MethodCFMlpANN_Utils.cxx:656
 MethodCFMlpANN_Utils.cxx:657
 MethodCFMlpANN_Utils.cxx:658
 MethodCFMlpANN_Utils.cxx:659
 MethodCFMlpANN_Utils.cxx:660
 MethodCFMlpANN_Utils.cxx:661
 MethodCFMlpANN_Utils.cxx:662
 MethodCFMlpANN_Utils.cxx:663
 MethodCFMlpANN_Utils.cxx:664
 MethodCFMlpANN_Utils.cxx:665
 MethodCFMlpANN_Utils.cxx:666
 MethodCFMlpANN_Utils.cxx:667
 MethodCFMlpANN_Utils.cxx:668
 MethodCFMlpANN_Utils.cxx:669
 MethodCFMlpANN_Utils.cxx:670
 MethodCFMlpANN_Utils.cxx:671
 MethodCFMlpANN_Utils.cxx:672
 MethodCFMlpANN_Utils.cxx:673
 MethodCFMlpANN_Utils.cxx:674
 MethodCFMlpANN_Utils.cxx:675
 MethodCFMlpANN_Utils.cxx:676
 MethodCFMlpANN_Utils.cxx:677
 MethodCFMlpANN_Utils.cxx:678
 MethodCFMlpANN_Utils.cxx:679
 MethodCFMlpANN_Utils.cxx:680
 MethodCFMlpANN_Utils.cxx:681
 MethodCFMlpANN_Utils.cxx:682
 MethodCFMlpANN_Utils.cxx:683
 MethodCFMlpANN_Utils.cxx:684
 MethodCFMlpANN_Utils.cxx:685
 MethodCFMlpANN_Utils.cxx:686
 MethodCFMlpANN_Utils.cxx:687
 MethodCFMlpANN_Utils.cxx:688
 MethodCFMlpANN_Utils.cxx:689
 MethodCFMlpANN_Utils.cxx:690
 MethodCFMlpANN_Utils.cxx:691
 MethodCFMlpANN_Utils.cxx:692
 MethodCFMlpANN_Utils.cxx:693
 MethodCFMlpANN_Utils.cxx:694
 MethodCFMlpANN_Utils.cxx:695
 MethodCFMlpANN_Utils.cxx:696
 MethodCFMlpANN_Utils.cxx:697
 MethodCFMlpANN_Utils.cxx:698
 MethodCFMlpANN_Utils.cxx:699
 MethodCFMlpANN_Utils.cxx:700
 MethodCFMlpANN_Utils.cxx:701
 MethodCFMlpANN_Utils.cxx:702
 MethodCFMlpANN_Utils.cxx:703
 MethodCFMlpANN_Utils.cxx:704
 MethodCFMlpANN_Utils.cxx:705
 MethodCFMlpANN_Utils.cxx:706
 MethodCFMlpANN_Utils.cxx:707
 MethodCFMlpANN_Utils.cxx:708
 MethodCFMlpANN_Utils.cxx:709
 MethodCFMlpANN_Utils.cxx:710
 MethodCFMlpANN_Utils.cxx:711
 MethodCFMlpANN_Utils.cxx:712
 MethodCFMlpANN_Utils.cxx:713
 MethodCFMlpANN_Utils.cxx:714
 MethodCFMlpANN_Utils.cxx:715
 MethodCFMlpANN_Utils.cxx:716
 MethodCFMlpANN_Utils.cxx:717
 MethodCFMlpANN_Utils.cxx:718
 MethodCFMlpANN_Utils.cxx:719
 MethodCFMlpANN_Utils.cxx:720
 MethodCFMlpANN_Utils.cxx:721
 MethodCFMlpANN_Utils.cxx:722
 MethodCFMlpANN_Utils.cxx:723
 MethodCFMlpANN_Utils.cxx:724
 MethodCFMlpANN_Utils.cxx:725
 MethodCFMlpANN_Utils.cxx:726
 MethodCFMlpANN_Utils.cxx:727
 MethodCFMlpANN_Utils.cxx:728
 MethodCFMlpANN_Utils.cxx:729
 MethodCFMlpANN_Utils.cxx:730
 MethodCFMlpANN_Utils.cxx:731
 MethodCFMlpANN_Utils.cxx:732
 MethodCFMlpANN_Utils.cxx:733
 MethodCFMlpANN_Utils.cxx:734
 MethodCFMlpANN_Utils.cxx:735
 MethodCFMlpANN_Utils.cxx:736
 MethodCFMlpANN_Utils.cxx:737
 MethodCFMlpANN_Utils.cxx:738
 MethodCFMlpANN_Utils.cxx:739
 MethodCFMlpANN_Utils.cxx:740
 MethodCFMlpANN_Utils.cxx:741
 MethodCFMlpANN_Utils.cxx:742
 MethodCFMlpANN_Utils.cxx:743
 MethodCFMlpANN_Utils.cxx:744
 MethodCFMlpANN_Utils.cxx:745
 MethodCFMlpANN_Utils.cxx:746
 MethodCFMlpANN_Utils.cxx:747
 MethodCFMlpANN_Utils.cxx:748
 MethodCFMlpANN_Utils.cxx:749
 MethodCFMlpANN_Utils.cxx:750
 MethodCFMlpANN_Utils.cxx:751
 MethodCFMlpANN_Utils.cxx:752
 MethodCFMlpANN_Utils.cxx:753
 MethodCFMlpANN_Utils.cxx:754
 MethodCFMlpANN_Utils.cxx:755
 MethodCFMlpANN_Utils.cxx:756
 MethodCFMlpANN_Utils.cxx:757
 MethodCFMlpANN_Utils.cxx:758
 MethodCFMlpANN_Utils.cxx:759
 MethodCFMlpANN_Utils.cxx:760
 MethodCFMlpANN_Utils.cxx:761
 MethodCFMlpANN_Utils.cxx:762
 MethodCFMlpANN_Utils.cxx:763
 MethodCFMlpANN_Utils.cxx:764
 MethodCFMlpANN_Utils.cxx:765
 MethodCFMlpANN_Utils.cxx:766
 MethodCFMlpANN_Utils.cxx:767
 MethodCFMlpANN_Utils.cxx:768
 MethodCFMlpANN_Utils.cxx:769
 MethodCFMlpANN_Utils.cxx:770
 MethodCFMlpANN_Utils.cxx:771
 MethodCFMlpANN_Utils.cxx:772
 MethodCFMlpANN_Utils.cxx:773
 MethodCFMlpANN_Utils.cxx:774
 MethodCFMlpANN_Utils.cxx:775
 MethodCFMlpANN_Utils.cxx:776
 MethodCFMlpANN_Utils.cxx:777
 MethodCFMlpANN_Utils.cxx:778
 MethodCFMlpANN_Utils.cxx:779
 MethodCFMlpANN_Utils.cxx:780
 MethodCFMlpANN_Utils.cxx:781
 MethodCFMlpANN_Utils.cxx:782
 MethodCFMlpANN_Utils.cxx:783
 MethodCFMlpANN_Utils.cxx:784
 MethodCFMlpANN_Utils.cxx:785
 MethodCFMlpANN_Utils.cxx:786
 MethodCFMlpANN_Utils.cxx:787
 MethodCFMlpANN_Utils.cxx:788
 MethodCFMlpANN_Utils.cxx:789
 MethodCFMlpANN_Utils.cxx:790
 MethodCFMlpANN_Utils.cxx:791
 MethodCFMlpANN_Utils.cxx:792
 MethodCFMlpANN_Utils.cxx:793
 MethodCFMlpANN_Utils.cxx:794
 MethodCFMlpANN_Utils.cxx:795
 MethodCFMlpANN_Utils.cxx:796
 MethodCFMlpANN_Utils.cxx:797
 MethodCFMlpANN_Utils.cxx:798
 MethodCFMlpANN_Utils.cxx:799
 MethodCFMlpANN_Utils.cxx:800
 MethodCFMlpANN_Utils.cxx:801
 MethodCFMlpANN_Utils.cxx:802
 MethodCFMlpANN_Utils.cxx:803
 MethodCFMlpANN_Utils.cxx:804
 MethodCFMlpANN_Utils.cxx:805
 MethodCFMlpANN_Utils.cxx:806
 MethodCFMlpANN_Utils.cxx:807
 MethodCFMlpANN_Utils.cxx:808
 MethodCFMlpANN_Utils.cxx:809
 MethodCFMlpANN_Utils.cxx:810
 MethodCFMlpANN_Utils.cxx:811
 MethodCFMlpANN_Utils.cxx:812
 MethodCFMlpANN_Utils.cxx:813
 MethodCFMlpANN_Utils.cxx:814
 MethodCFMlpANN_Utils.cxx:815
 MethodCFMlpANN_Utils.cxx:816
 MethodCFMlpANN_Utils.cxx:817
 MethodCFMlpANN_Utils.cxx:818
 MethodCFMlpANN_Utils.cxx:819
 MethodCFMlpANN_Utils.cxx:820
 MethodCFMlpANN_Utils.cxx:821
 MethodCFMlpANN_Utils.cxx:822
 MethodCFMlpANN_Utils.cxx:823
 MethodCFMlpANN_Utils.cxx:824
 MethodCFMlpANN_Utils.cxx:825
 MethodCFMlpANN_Utils.cxx:826
 MethodCFMlpANN_Utils.cxx:827
 MethodCFMlpANN_Utils.cxx:828
 MethodCFMlpANN_Utils.cxx:829
 MethodCFMlpANN_Utils.cxx:830
 MethodCFMlpANN_Utils.cxx:831
 MethodCFMlpANN_Utils.cxx:832
 MethodCFMlpANN_Utils.cxx:833
 MethodCFMlpANN_Utils.cxx:834
 MethodCFMlpANN_Utils.cxx:835
 MethodCFMlpANN_Utils.cxx:836
 MethodCFMlpANN_Utils.cxx:837
 MethodCFMlpANN_Utils.cxx:838
 MethodCFMlpANN_Utils.cxx:839
 MethodCFMlpANN_Utils.cxx:840
 MethodCFMlpANN_Utils.cxx:841
 MethodCFMlpANN_Utils.cxx:842
 MethodCFMlpANN_Utils.cxx:843
 MethodCFMlpANN_Utils.cxx:844
 MethodCFMlpANN_Utils.cxx:845
 MethodCFMlpANN_Utils.cxx:846
 MethodCFMlpANN_Utils.cxx:847
 MethodCFMlpANN_Utils.cxx:848
 MethodCFMlpANN_Utils.cxx:849
 MethodCFMlpANN_Utils.cxx:850
 MethodCFMlpANN_Utils.cxx:851
 MethodCFMlpANN_Utils.cxx:852
 MethodCFMlpANN_Utils.cxx:853
 MethodCFMlpANN_Utils.cxx:854
 MethodCFMlpANN_Utils.cxx:855
 MethodCFMlpANN_Utils.cxx:856
 MethodCFMlpANN_Utils.cxx:857
 MethodCFMlpANN_Utils.cxx:858
 MethodCFMlpANN_Utils.cxx:859
 MethodCFMlpANN_Utils.cxx:860
 MethodCFMlpANN_Utils.cxx:861
 MethodCFMlpANN_Utils.cxx:862
 MethodCFMlpANN_Utils.cxx:863
 MethodCFMlpANN_Utils.cxx:864
 MethodCFMlpANN_Utils.cxx:865
 MethodCFMlpANN_Utils.cxx:866
 MethodCFMlpANN_Utils.cxx:867
 MethodCFMlpANN_Utils.cxx:868
 MethodCFMlpANN_Utils.cxx:869
 MethodCFMlpANN_Utils.cxx:870
 MethodCFMlpANN_Utils.cxx:871
 MethodCFMlpANN_Utils.cxx:872
 MethodCFMlpANN_Utils.cxx:873
 MethodCFMlpANN_Utils.cxx:874
 MethodCFMlpANN_Utils.cxx:875
 MethodCFMlpANN_Utils.cxx:876
 MethodCFMlpANN_Utils.cxx:877
 MethodCFMlpANN_Utils.cxx:878
 MethodCFMlpANN_Utils.cxx:879
 MethodCFMlpANN_Utils.cxx:880
 MethodCFMlpANN_Utils.cxx:881
 MethodCFMlpANN_Utils.cxx:882
 MethodCFMlpANN_Utils.cxx:883
 MethodCFMlpANN_Utils.cxx:884
 MethodCFMlpANN_Utils.cxx:885
 MethodCFMlpANN_Utils.cxx:886
 MethodCFMlpANN_Utils.cxx:887
 MethodCFMlpANN_Utils.cxx:888
 MethodCFMlpANN_Utils.cxx:889
 MethodCFMlpANN_Utils.cxx:890
 MethodCFMlpANN_Utils.cxx:891
 MethodCFMlpANN_Utils.cxx:892
 MethodCFMlpANN_Utils.cxx:893
 MethodCFMlpANN_Utils.cxx:894
 MethodCFMlpANN_Utils.cxx:895
 MethodCFMlpANN_Utils.cxx:896
 MethodCFMlpANN_Utils.cxx:897
 MethodCFMlpANN_Utils.cxx:898
 MethodCFMlpANN_Utils.cxx:899
 MethodCFMlpANN_Utils.cxx:900
 MethodCFMlpANN_Utils.cxx:901
 MethodCFMlpANN_Utils.cxx:902
 MethodCFMlpANN_Utils.cxx:903
 MethodCFMlpANN_Utils.cxx:904
 MethodCFMlpANN_Utils.cxx:905
 MethodCFMlpANN_Utils.cxx:906
 MethodCFMlpANN_Utils.cxx:907
 MethodCFMlpANN_Utils.cxx:908
 MethodCFMlpANN_Utils.cxx:909
 MethodCFMlpANN_Utils.cxx:910
 MethodCFMlpANN_Utils.cxx:911
 MethodCFMlpANN_Utils.cxx:912
 MethodCFMlpANN_Utils.cxx:913
 MethodCFMlpANN_Utils.cxx:914
 MethodCFMlpANN_Utils.cxx:915
 MethodCFMlpANN_Utils.cxx:916
 MethodCFMlpANN_Utils.cxx:917
 MethodCFMlpANN_Utils.cxx:918
 MethodCFMlpANN_Utils.cxx:919
 MethodCFMlpANN_Utils.cxx:920
 MethodCFMlpANN_Utils.cxx:921
 MethodCFMlpANN_Utils.cxx:922
 MethodCFMlpANN_Utils.cxx:923
 MethodCFMlpANN_Utils.cxx:924
 MethodCFMlpANN_Utils.cxx:925
 MethodCFMlpANN_Utils.cxx:926
 MethodCFMlpANN_Utils.cxx:927
 MethodCFMlpANN_Utils.cxx:928
 MethodCFMlpANN_Utils.cxx:929
 MethodCFMlpANN_Utils.cxx:930
 MethodCFMlpANN_Utils.cxx:931
 MethodCFMlpANN_Utils.cxx:932
 MethodCFMlpANN_Utils.cxx:933
 MethodCFMlpANN_Utils.cxx:934
 MethodCFMlpANN_Utils.cxx:935
 MethodCFMlpANN_Utils.cxx:936
 MethodCFMlpANN_Utils.cxx:937
 MethodCFMlpANN_Utils.cxx:938
 MethodCFMlpANN_Utils.cxx:939
 MethodCFMlpANN_Utils.cxx:940
 MethodCFMlpANN_Utils.cxx:941
 MethodCFMlpANN_Utils.cxx:942
 MethodCFMlpANN_Utils.cxx:943
 MethodCFMlpANN_Utils.cxx:944
 MethodCFMlpANN_Utils.cxx:945
 MethodCFMlpANN_Utils.cxx:946
 MethodCFMlpANN_Utils.cxx:947
 MethodCFMlpANN_Utils.cxx:948
 MethodCFMlpANN_Utils.cxx:949
 MethodCFMlpANN_Utils.cxx:950
 MethodCFMlpANN_Utils.cxx:951
 MethodCFMlpANN_Utils.cxx:952
 MethodCFMlpANN_Utils.cxx:953
 MethodCFMlpANN_Utils.cxx:954
 MethodCFMlpANN_Utils.cxx:955
 MethodCFMlpANN_Utils.cxx:956
 MethodCFMlpANN_Utils.cxx:957
 MethodCFMlpANN_Utils.cxx:958
 MethodCFMlpANN_Utils.cxx:959
 MethodCFMlpANN_Utils.cxx:960
 MethodCFMlpANN_Utils.cxx:961
 MethodCFMlpANN_Utils.cxx:962
 MethodCFMlpANN_Utils.cxx:963
 MethodCFMlpANN_Utils.cxx:964
 MethodCFMlpANN_Utils.cxx:965
 MethodCFMlpANN_Utils.cxx:966
 MethodCFMlpANN_Utils.cxx:967
 MethodCFMlpANN_Utils.cxx:968
 MethodCFMlpANN_Utils.cxx:969
 MethodCFMlpANN_Utils.cxx:970
 MethodCFMlpANN_Utils.cxx:971
 MethodCFMlpANN_Utils.cxx:972
 MethodCFMlpANN_Utils.cxx:973
 MethodCFMlpANN_Utils.cxx:974
 MethodCFMlpANN_Utils.cxx:975
 MethodCFMlpANN_Utils.cxx:976
 MethodCFMlpANN_Utils.cxx:977
 MethodCFMlpANN_Utils.cxx:978
 MethodCFMlpANN_Utils.cxx:979
 MethodCFMlpANN_Utils.cxx:980
 MethodCFMlpANN_Utils.cxx:981
 MethodCFMlpANN_Utils.cxx:982
 MethodCFMlpANN_Utils.cxx:983
 MethodCFMlpANN_Utils.cxx:984
 MethodCFMlpANN_Utils.cxx:985
 MethodCFMlpANN_Utils.cxx:986
 MethodCFMlpANN_Utils.cxx:987
 MethodCFMlpANN_Utils.cxx:988
 MethodCFMlpANN_Utils.cxx:989
 MethodCFMlpANN_Utils.cxx:990
 MethodCFMlpANN_Utils.cxx:991
 MethodCFMlpANN_Utils.cxx:992
 MethodCFMlpANN_Utils.cxx:993
 MethodCFMlpANN_Utils.cxx:994
 MethodCFMlpANN_Utils.cxx:995
 MethodCFMlpANN_Utils.cxx:996
 MethodCFMlpANN_Utils.cxx:997
 MethodCFMlpANN_Utils.cxx:998
 MethodCFMlpANN_Utils.cxx:999
 MethodCFMlpANN_Utils.cxx:1000
 MethodCFMlpANN_Utils.cxx:1001
 MethodCFMlpANN_Utils.cxx:1002
 MethodCFMlpANN_Utils.cxx:1003
 MethodCFMlpANN_Utils.cxx:1004
 MethodCFMlpANN_Utils.cxx:1005
 MethodCFMlpANN_Utils.cxx:1006
 MethodCFMlpANN_Utils.cxx:1007
 MethodCFMlpANN_Utils.cxx:1008
 MethodCFMlpANN_Utils.cxx:1009
 MethodCFMlpANN_Utils.cxx:1010
 MethodCFMlpANN_Utils.cxx:1011
 MethodCFMlpANN_Utils.cxx:1012
 MethodCFMlpANN_Utils.cxx:1013
 MethodCFMlpANN_Utils.cxx:1014
 MethodCFMlpANN_Utils.cxx:1015
 MethodCFMlpANN_Utils.cxx:1016
 MethodCFMlpANN_Utils.cxx:1017
 MethodCFMlpANN_Utils.cxx:1018
 MethodCFMlpANN_Utils.cxx:1019
 MethodCFMlpANN_Utils.cxx:1020
 MethodCFMlpANN_Utils.cxx:1021
 MethodCFMlpANN_Utils.cxx:1022
 MethodCFMlpANN_Utils.cxx:1023
 MethodCFMlpANN_Utils.cxx:1024
 MethodCFMlpANN_Utils.cxx:1025
 MethodCFMlpANN_Utils.cxx:1026
 MethodCFMlpANN_Utils.cxx:1027
 MethodCFMlpANN_Utils.cxx:1028
 MethodCFMlpANN_Utils.cxx:1029
 MethodCFMlpANN_Utils.cxx:1030
 MethodCFMlpANN_Utils.cxx:1031
 MethodCFMlpANN_Utils.cxx:1032
 MethodCFMlpANN_Utils.cxx:1033