/**********************************************************************************
 * Project: TMVA - a Root-integrated toolkit for multivariate data analysis       *
 * Package: TMVA                                                                  *
 * Class  : OptimizeConfigParameters                                              *
 * Web    : http://tmva.sourceforge.net                                           *
 *                                                                                *
 * Description: The OptimizeConfigParameters takes care of "scanning/fitting"     *
 *              different tuning parameters in order to find the best set of      *
 *              tuning paraemters which will be used in the end                   *
 *                                                                                *
 * Authors (alphabetical):                                                        *
 *      Helge Voss      <Helge.Voss@cern.ch>     - MPI-K Heidelberg, Germany      *
 *                                                                                *
 * Copyright (c) 2005:                                                            *
 *      CERN, Switzerland                                                         * 
 *      MPI-K Heidelberg, Germany                                                 * 
 *                                                                                *
 * Redistribution and use in source and binary forms, with or without             *
 * modification, are permitted according to the terms listed in LICENSE           *
 * (http://ttmva.sourceforge.net/LICENSE)                                         *
 **********************************************************************************/

#include "TMVA/OptimizeConfigParameters.h"

#include <limits>
#include <cstdlib>
#include "TMath.h"
#include "TGraph.h"
#include "TH1.h"
#include "TH2.h"
#include "TDirectory.h"

#include "TMVA/IMethod.h"   
#include "TMVA/MethodBase.h"   
#include "TMVA/GeneticFitter.h"
#include "TMVA/MinuitFitter.h"
#include "TMVA/Interval.h"
#include "TMVA/PDF.h"   
#include "TMVA/MsgLogger.h"
#include "TMVA/Tools.h"   

ClassImp(TMVA::OptimizeConfigParameters)
   
//_______________________________________________________________________
TMVA::OptimizeConfigParameters::OptimizeConfigParameters(MethodBase * const method, std::map<TString,TMVA::Interval*> tuneParameters, TString fomType, TString optimizationFitType) 
:  fMethod(method),
   fTuneParameters(tuneParameters),
   fFOMType(fomType),
   fOptimizationFitType(optimizationFitType),
   fMvaSig(NULL),
   fMvaBkg(NULL),
   fMvaSigFineBin(NULL),
   fMvaBkgFineBin(NULL),
   fNotDoneYet(kFALSE)
{
   // Constructor which sets either "Classification or Regression"
  std::string name = "OptimizeConfigParameters_";
  name += std::string(GetMethod()->GetName());
  fLogger = new MsgLogger(name);
   if (fMethod->DoRegression()){
      Log() << kFATAL << " ERROR: Sorry, Regression is not yet implement for automatic parameter optimization"
            << " --> exit" << Endl;
   }

   Log() << kINFO << "Automatic optimisation of tuning parameters in " 
         << GetMethod()->GetName() << " uses:" << Endl;

   std::map<TString,TMVA::Interval*>::iterator it;
   for (it=fTuneParameters.begin(); it!=fTuneParameters.end();it++) {
      Log() << kINFO << it->first 
            << " in range from: " << it->second->GetMin()
            << " to: " << it->second->GetMax()
            << " in : " << it->second->GetNbins()  << " steps"
            << Endl;
   }
   Log() << kINFO << " using the options: " << fFOMType << " and " << fOptimizationFitType << Endl;



}

//_______________________________________________________________________
TMVA::OptimizeConfigParameters::~OptimizeConfigParameters() 
{
   // the destructor (delete the OptimizeConfigParameters, store the graph and .. delete it)
   
   GetMethod()->BaseDir()->cd();
   Int_t n=Int_t(fFOMvsIter.size());
   Float_t *x = new Float_t[n];
   Float_t *y = new Float_t[n];
   Float_t  ymin=+999999999;
   Float_t  ymax=-999999999;

   for (Int_t i=0;i<n;i++){
      x[i] = Float_t(i);
      y[i] = fFOMvsIter[i];
      if (ymin>y[i]) ymin=y[i];
      if (ymax<y[i]) ymax=y[i];
   }

   TH2D   *h=new TH2D(TString(GetMethod()->GetName())+"_FOMvsIterFrame","",2,0,n,2,ymin*0.95,ymax*1.05);
   h->SetXTitle("#iteration "+fOptimizationFitType);
   h->SetYTitle(fFOMType);
   TGraph *gFOMvsIter = new TGraph(n,x,y);
   gFOMvsIter->SetName((TString(GetMethod()->GetName())+"_FOMvsIter").Data());
   gFOMvsIter->Write();
   h->Write();

   delete [] x;
   delete [] y;
   // delete fFOMvsIter;
} 
//_______________________________________________________________________
std::map<TString,Double_t> TMVA::OptimizeConfigParameters::optimize()
{
   if      (fOptimizationFitType == "Scan"    ) this->optimizeScan();
   else if (fOptimizationFitType == "FitGA" || fOptimizationFitType == "Minuit" ) this->optimizeFit();
   else {
      Log() << kFATAL << "You have chosen as optimization type " << fOptimizationFitType
                << " that is not (yet) coded --> exit()" << Endl;
   }
   
   Log() << kINFO << "For " << GetMethod()->GetName() << " the optimized Parameters are: " << Endl;
   std::map<TString,Double_t>::iterator it;
   for(it=fTunedParameters.begin(); it!= fTunedParameters.end(); it++){
      Log() << kINFO << it->first << " = " << it->second << Endl;
   }
   return fTunedParameters;

}

//_______________________________________________________________________
std::vector< int > TMVA::OptimizeConfigParameters::GetScanIndices( int val, std::vector<int> base){
   // helper function to scan through the all the combinations in the
   // parameter space
   std::vector < int > indices;
   for (UInt_t i=0; i< base.size(); i++){
      indices.push_back(val % base[i] );
      val = int( floor( float(val) / float(base[i]) ) );
   }
   return indices;
}

//_______________________________________________________________________
void TMVA::OptimizeConfigParameters::optimizeScan()
{
   // do the actual optimization using a simple scan method, 
   // i.e. calcualte the FOM for 
   // different tuning paraemters and remember which one is
   // gave the best FOM


   Double_t      bestFOM=-1000000, currentFOM;

   std::map<TString,Double_t> currentParameters;
   std::map<TString,TMVA::Interval*>::iterator it;

   // for the scan, start at the lower end of the interval and then "move upwards" 
   // initialize all parameters in currentParameter
   currentParameters.clear();
   fTunedParameters.clear();

   for (it=fTuneParameters.begin(); it!=fTuneParameters.end(); it++){
      currentParameters.insert(std::pair<TString,Double_t>(it->first,it->second->GetMin()));
      fTunedParameters.insert(std::pair<TString,Double_t>(it->first,it->second->GetMin()));
   }
   // now loop over all the parameters and get for each combination the figure of merit

   // in order to loop over all the parameters, I first create an "array" (tune parameters)
   // of arrays (the different values of the tune parameter)

   std::vector< std::vector <Double_t> > v;
   for (it=fTuneParameters.begin(); it!=fTuneParameters.end(); it++){
      std::vector< Double_t > tmp;
      for (Int_t k=0; k<it->second->GetNbins(); k++){
         tmp.push_back(it->second->GetElement(k));
      }
      v.push_back(tmp);
   }
   Int_t Ntot = 1;
   std::vector< int > Nindividual;
   for (UInt_t i=0; i<v.size(); i++) {
      Ntot *= v[i].size();
      Nindividual.push_back(v[i].size());
    }
   //loop on the total number of differnt combinations
   
   for (int i=0; i<Ntot; i++){
       UInt_t index=0;
      std::vector<int> indices = GetScanIndices(i, Nindividual );
      for (it=fTuneParameters.begin(), index=0; index< indices.size(); index++, it++){
         currentParameters[it->first] = v[index][indices[index]];
      }
      Log() << kINFO << "--------------------------" << Endl;
      Log() << kINFO <<"Settings being evaluated:" << Endl;
      for (std::map<TString,Double_t>::iterator it_print=currentParameters.begin(); 
           it_print!=currentParameters.end(); it_print++){
         Log() << kINFO << "  " << it_print->first  << " = " << it_print->second << Endl;
       }

      GetMethod()->Reset();
      GetMethod()->SetTuneParameters(currentParameters);
      // now do the training for the current parameters:
      GetMethod()->BaseDir()->cd();
      if (i==0) GetMethod()->GetTransformationHandler().CalcTransformations(
                                                                  GetMethod()->Data()->GetEventCollection());
      Event::SetIsTraining(kTRUE);
      GetMethod()->Train();
      Event::SetIsTraining(kFALSE);
      currentFOM = GetFOM(); 
      Log() << kINFO << "FOM was found : " << currentFOM << "; current best is " << bestFOM << Endl;
      
      if (currentFOM > bestFOM) {
         bestFOM = currentFOM;
         for (std::map<TString,Double_t>::iterator iter=currentParameters.begin();
              iter != currentParameters.end(); iter++){
            fTunedParameters[iter->first]=iter->second;
         }
      }
   }

   GetMethod()->Reset();
   GetMethod()->SetTuneParameters(fTunedParameters);
}

void TMVA::OptimizeConfigParameters::optimizeFit()
{
   // ranges (intervals) in which the fit varies the parameters
   std::vector<TMVA::Interval*> ranges; // intervals of the fit ranges
   std::map<TString, TMVA::Interval*>::iterator it;
   std::vector<Double_t> pars;    // current (starting) fit parameters

   for (it=fTuneParameters.begin(); it != fTuneParameters.end(); it++){
      ranges.push_back(new TMVA::Interval(*(it->second))); 
      pars.push_back( (it->second)->GetMean() );  // like this the order is "right". Always keep the
                                                 // order in the vector "pars" the same as the iterator
                                                 // iterates through the tuneParameters !!!!
   }

   // create the fitter

   FitterBase* fitter = NULL;

   if ( fOptimizationFitType == "Minuit"  ) {
     TString opt="";
     fitter = new MinuitFitter(  *this, 
                                 "FitterMinuit_BDTOptimize", 
                                 ranges, opt );
   }else if ( fOptimizationFitType == "FitGA"  ) {
     TString opt="PopSize=20:Steps=30:Cycles=3:ConvCrit=0.01:SaveBestCycle=5";
     fitter = new GeneticFitter( *this, 
                                 "FitterGA_BDTOptimize", 
                                 ranges, opt );
   } else {
      Log() << kWARNING << " you did not specify a valid OptimizationFitType " 
            << " will use the default (FitGA) " << Endl;
      TString opt="PopSize=20:Steps=30:Cycles=3:ConvCrit=0.01:SaveBestCycle=5";
      fitter = new GeneticFitter( *this, 
                                  "FitterGA_BDTOptimize", 
                                  ranges, opt );      
   } 
   
   fitter->CheckForUnusedOptions();
   
   // perform the fit
   fitter->Run(pars);      
   
   // clean up
   for (UInt_t ipar=0; ipar<ranges.size(); ipar++) delete ranges[ipar];
   
   
   GetMethod()->Reset();
   
   fTunedParameters.clear();
   Int_t jcount=0;
   for (it=fTuneParameters.begin(); it!=fTuneParameters.end(); it++){
      fTunedParameters.insert(std::pair<TString,Double_t>(it->first,pars[jcount++]));
   }
   
   GetMethod()->SetTuneParameters(fTunedParameters);
      
}

//_______________________________________________________________________
Double_t TMVA::OptimizeConfigParameters::EstimatorFunction( std::vector<Double_t> & pars)
{
   // return the estimator (from current FOM) for the fitting interface

   std::map< std::vector<Double_t> , Double_t>::const_iterator iter;
   iter = fAlreadyTrainedParCombination.find(pars);

   if (iter != fAlreadyTrainedParCombination.end()) {
      // std::cout << "I  had trained  Depth=" <<Int_t(pars[0])
      //           <<" MinEv=" <<Int_t(pars[1])
      //           <<" already --> FOM="<< iter->second <<std::endl; 
      return iter->second;
   }else{
      std::map<TString,Double_t> currentParameters;
      Int_t icount =0; // map "pars" to the  map of Tuneparameter, make sure
                       // you never screw up this order!!
      std::map<TString, TMVA::Interval*>::iterator it;
      for (it=fTuneParameters.begin(); it!=fTuneParameters.end(); it++){
         currentParameters[it->first] = pars[icount++];
      }
      GetMethod()->Reset();
      GetMethod()->SetTuneParameters(currentParameters);
      GetMethod()->BaseDir()->cd();
      
      if (fNotDoneYet){
         GetMethod()->GetTransformationHandler().
            CalcTransformations(GetMethod()->Data()->GetEventCollection());
         fNotDoneYet=kFALSE;
      }
      Event::SetIsTraining(kTRUE);
      GetMethod()->Train();
      Event::SetIsTraining(kFALSE);

      
      Double_t currentFOM = GetFOM(); 
      
      fAlreadyTrainedParCombination.insert(std::make_pair(pars,-currentFOM));
      return  -currentFOM;
   }
}

//_______________________________________________________________________
Double_t TMVA::OptimizeConfigParameters::GetFOM()
{
  // Return the Figure of Merit (FOM) used in the parameter 
  //  optimization process
  
   Double_t fom=0;
   if (fMethod->DoRegression()){
      std::cout << " ERROR: Sorry, Regression is not yet implement for automatic parameter optimisation"
                << " --> exit" << std::endl;
      std::exit(1);
   }else{
      if      (fFOMType == "Separation")  fom = GetSeparation();
      else if (fFOMType == "ROCIntegral") fom = GetROCIntegral();
      else if (fFOMType == "SigEffAtBkgEff01")  fom = GetSigEffAtBkgEff(0.1);
      else if (fFOMType == "SigEffAtBkgEff001") fom = GetSigEffAtBkgEff(0.01);
      else if (fFOMType == "SigEffAtBkgEff002") fom = GetSigEffAtBkgEff(0.02);
      else if (fFOMType == "BkgRejAtSigEff05")  fom = GetBkgRejAtSigEff(0.5);
      else if (fFOMType == "BkgEffAtSigEff05")  fom = GetBkgEffAtSigEff(0.5);
      else {
         Log()<<kFATAL << " ERROR, you've specified as Figure of Merit in the "
              << " parameter optimisation " << fFOMType << " which has not"
              << " been implemented yet!! ---> exit " << Endl;
      }
   }
   fFOMvsIter.push_back(fom);
   //   std::cout << "fom="<<fom<<std::endl; // should write that into a debug log (as option)
   return fom;
}

//_______________________________________________________________________
void TMVA::OptimizeConfigParameters::GetMVADists()
{
   // fill the private histograms with the mva distributinos for sig/bkg

   if (fMvaSig) fMvaSig->Delete();
   if (fMvaBkg) fMvaBkg->Delete();
   if (fMvaSigFineBin) fMvaSigFineBin->Delete();
   if (fMvaBkgFineBin) fMvaBkgFineBin->Delete();
 
   // maybe later on this should be done a bit more clever (time consuming) by
   // first determining proper ranges, removing outliers, as we do in the 
   // MVA output calculation in MethodBase::TestClassifier...
   // --> then it might be possible also to use the splined PDF's which currently
   // doesn't seem to work

   fMvaSig        = new TH1D("fMvaSig","",100,-1.5,1.5); //used for spline fit
   fMvaBkg        = new TH1D("fMvaBkg","",100,-1.5,1.5); //used for spline fit
   fMvaSigFineBin = new TH1D("fMvaSigFineBin","",100000,-1.5,1.5);
   fMvaBkgFineBin = new TH1D("fMvaBkgFineBin","",100000,-1.5,1.5);

   const std::vector< Event*> events=fMethod->Data()->GetEventCollection(Types::kTesting);
   
   UInt_t signalClassNr = fMethod->DataInfo().GetClassInfo("Signal")->GetNumber();

   //   fMethod->GetTransformationHandler().CalcTransformations(fMethod->Data()->GetEventCollection(Types::kTesting));

   for (UInt_t iev=0; iev < events.size() ; iev++){
      //      std::cout << " GetMVADists event " << iev << std::endl;
      //      std::cout << " Class  = " << events[iev]->GetClass() << std::endl;
      //         std::cout << " MVA Value = " << fMethod->GetMvaValue(events[iev]) << std::endl;
      if (events[iev]->GetClass() == signalClassNr) {
         fMvaSig->Fill(fMethod->GetMvaValue(events[iev]),events[iev]->GetWeight());
         fMvaSigFineBin->Fill(fMethod->GetMvaValue(events[iev]),events[iev]->GetWeight());
      } else {
         fMvaBkg->Fill(fMethod->GetMvaValue(events[iev]),events[iev]->GetWeight());
         fMvaBkgFineBin->Fill(fMethod->GetMvaValue(events[iev]),events[iev]->GetWeight());
      }
   }
}
//_______________________________________________________________________
Double_t TMVA::OptimizeConfigParameters::GetSeparation()
{
   // return the searation between the signal and background 
   // MVA ouput distribution
   GetMVADists();
   if (1){
      PDF *splS = new PDF( " PDF Sig", fMvaSig, PDF::kSpline2 );
      PDF *splB = new PDF( " PDF Bkg", fMvaBkg, PDF::kSpline2 );
      return gTools().GetSeparation(*splS,*splB);
   }else{
      std::cout << "Separation caclulcaton via histograms (not PDFs) seems to give still strange results!! Don't do that, check!!"<<std::endl;
      return gTools().GetSeparation(fMvaSigFineBin,fMvaBkgFineBin); // somehow sitll gives strange results!!!! Check!!!
   }
}


//_______________________________________________________________________
Double_t TMVA::OptimizeConfigParameters::GetROCIntegral() 
{
   // calculate the area (integral) under the ROC curve as a
   // overall quality measure of the classification
   //
   // makeing pdfs out of the MVA-ouput distributions doesn't work
   // reliably for cases where the MVA-ouput isn't a smooth distribution.
   // this happens "frequently" in BDTs for example when the number of
   // trees is small resulting in only some discrete possible MVA ouput values.
   // (I still leave the code here, but use this with care!!! The default
   // however is to use the distributions!!!

   GetMVADists();

   Double_t integral = 0;
   if (0){
      PDF *pdfS = new PDF( " PDF Sig", fMvaSig, PDF::kSpline2 );
      PDF *pdfB = new PDF( " PDF Bkg", fMvaBkg, PDF::kSpline2 );

      Double_t xmin = TMath::Min(pdfS->GetXmin(), pdfB->GetXmin());
      Double_t xmax = TMath::Max(pdfS->GetXmax(), pdfB->GetXmax());
      
      UInt_t   nsteps = 1000;
      Double_t step = (xmax-xmin)/Double_t(nsteps);
      Double_t cut = xmin;
      for (UInt_t i=0; i<nsteps; i++){
         integral += (1-pdfB->GetIntegral(cut,xmax)) * pdfS->GetVal(cut);
         cut+=step;
      } 
      integral*=step;
   }else{
      // sanity checks
      if ( (fMvaSigFineBin->GetXaxis()->GetXmin() !=  fMvaBkgFineBin->GetXaxis()->GetXmin()) ||
           (fMvaSigFineBin->GetNbinsX() !=  fMvaBkgFineBin->GetNbinsX()) ){
         std::cout << " Error in OptimizeConfigParameters GetROCIntegral, unequal histograms for sig and bkg.." << std::endl;
         std::exit(1);
      }else{
          
         Double_t *cumulator  = fMvaBkgFineBin->GetIntegral();
         Int_t    nbins       = fMvaSigFineBin->GetNbinsX();
         // get the true signal integral (CompuetIntegral just return 1 as they 
         // automatically normalize. IN ADDITION, they do not account for variable
         // bin sizes (which you migh perhaps use later on for the fMvaSig/Bkg histograms)
         Double_t sigIntegral = 0;
         for (Int_t ibin=1; ibin<=nbins; ibin++){
            sigIntegral += fMvaSigFineBin->GetBinContent(ibin) * fMvaSigFineBin->GetBinWidth(ibin);
         }
         //gTools().NormHist( fMvaSigFineBin  ); // also doesn't  use variable bin width. And callse TH1::Scale, which oddly enough does not change the SumOfWeights !!!

         for (Int_t ibin=1; ibin <= nbins; ibin++){ // don't include under- and overflow bin
            integral += (cumulator[ibin]) * fMvaSigFineBin->GetBinContent(ibin)/sigIntegral * fMvaSigFineBin->GetBinWidth(ibin) ;
         }
      }
   }

   return integral;
}


//_______________________________________________________________________
Double_t TMVA::OptimizeConfigParameters::GetSigEffAtBkgEff(Double_t bkgEff) 
{
   // calculate the signal efficiency for a given background efficiency 

   GetMVADists();
   Double_t sigEff=0;

   // sanity checks
   if ( (fMvaSigFineBin->GetXaxis()->GetXmin() !=  fMvaBkgFineBin->GetXaxis()->GetXmin()) ||
        (fMvaSigFineBin->GetNbinsX() !=  fMvaBkgFineBin->GetNbinsX()) ){
      std::cout << " Error in OptimizeConfigParameters GetSigEffAt, unequal histograms for sig and bkg.." << std::endl;
      std::exit(1);
   }else{
      Double_t *bkgCumulator   = fMvaBkgFineBin->GetIntegral();
      Double_t *sigCumulator   = fMvaSigFineBin->GetIntegral();

      Int_t nbins=fMvaBkgFineBin->GetNbinsX();
      Int_t ibin=0;
   
      // std::cout << " bkgIntegral="<<bkgIntegral
      //           << " sigIntegral="<<sigIntegral
      //           << " bkgCumulator[nbins]="<<bkgCumulator[nbins]
      //           << " sigCumulator[nbins]="<<sigCumulator[nbins]
      //           << std::endl;

      while (bkgCumulator[nbins-ibin] > (1-bkgEff)) {
         sigEff = sigCumulator[nbins]-sigCumulator[nbins-ibin];
         ibin++;
      }
   } 
   return sigEff;
}


//__adaptated_by_marc-olivier.bettler@cern.ch__________________________
//__________________________________________________________________________
Double_t TMVA::OptimizeConfigParameters::GetBkgEffAtSigEff(Double_t sigEff) 
{
   // calculate the background efficiency for a given signal efficiency 

   GetMVADists();
   Double_t bkgEff=0;

   // sanity checks
   if ( (fMvaSigFineBin->GetXaxis()->GetXmin() !=  fMvaBkgFineBin->GetXaxis()->GetXmin()) ||
        (fMvaSigFineBin->GetNbinsX() !=  fMvaBkgFineBin->GetNbinsX()) ){
      std::cout << " Error in OptimizeConfigParameters GetBkgEffAt, unequal histograms for sig and bkg.." << std::endl;
      std::exit(1);
   }else{

      Double_t *bkgCumulator   = fMvaBkgFineBin->GetIntegral();
      Double_t *sigCumulator   = fMvaSigFineBin->GetIntegral();

      Int_t nbins=fMvaBkgFineBin->GetNbinsX();
      Int_t ibin=0;
   
      // std::cout << " bkgIntegral="<<bkgIntegral
      //           << " sigIntegral="<<sigIntegral
      //           << " bkgCumulator[nbins]="<<bkgCumulator[nbins]
      //           << " sigCumulator[nbins]="<<sigCumulator[nbins]
      //           << std::endl;

      while ( sigCumulator[nbins]-sigCumulator[nbins-ibin] < sigEff) {
         bkgEff = bkgCumulator[nbins]-bkgCumulator[nbins-ibin];
         ibin++;
      }
   } 
   return bkgEff;
}

//__adaptated_by_marc-olivier.bettler@cern.ch__________________________
//__________________________________________________________________________
Double_t TMVA::OptimizeConfigParameters::GetBkgRejAtSigEff(Double_t sigEff) 
{
   // calculate the background rejection for a given signal efficiency 

   GetMVADists();
   Double_t bkgRej=0;

   // sanity checks
   if ( (fMvaSigFineBin->GetXaxis()->GetXmin() !=  fMvaBkgFineBin->GetXaxis()->GetXmin()) ||
        (fMvaSigFineBin->GetNbinsX() !=  fMvaBkgFineBin->GetNbinsX()) ){
      std::cout << " Error in OptimizeConfigParameters GetBkgEffAt, unequal histograms for sig and bkg.." << std::endl;
      std::exit(1);
   }else{

      Double_t *bkgCumulator   = fMvaBkgFineBin->GetIntegral();
      Double_t *sigCumulator   = fMvaSigFineBin->GetIntegral();

      Int_t nbins=fMvaBkgFineBin->GetNbinsX();
      Int_t ibin=0;
   
      // std::cout << " bkgIntegral="<<bkgIntegral
      //           << " sigIntegral="<<sigIntegral
      //           << " bkgCumulator[nbins]="<<bkgCumulator[nbins]
      //           << " sigCumulator[nbins]="<<sigCumulator[nbins]
      //           << std::endl;

      while ( sigCumulator[nbins]-sigCumulator[nbins-ibin] < sigEff) {
         bkgRej = bkgCumulator[nbins-ibin];
         ibin++;
      }
   } 
   return bkgRej;
}
 OptimizeConfigParameters.cxx:1
 OptimizeConfigParameters.cxx:2
 OptimizeConfigParameters.cxx:3
 OptimizeConfigParameters.cxx:4
 OptimizeConfigParameters.cxx:5
 OptimizeConfigParameters.cxx:6
 OptimizeConfigParameters.cxx:7
 OptimizeConfigParameters.cxx:8
 OptimizeConfigParameters.cxx:9
 OptimizeConfigParameters.cxx:10
 OptimizeConfigParameters.cxx:11
 OptimizeConfigParameters.cxx:12
 OptimizeConfigParameters.cxx:13
 OptimizeConfigParameters.cxx:14
 OptimizeConfigParameters.cxx:15
 OptimizeConfigParameters.cxx:16
 OptimizeConfigParameters.cxx:17
 OptimizeConfigParameters.cxx:18
 OptimizeConfigParameters.cxx:19
 OptimizeConfigParameters.cxx:20
 OptimizeConfigParameters.cxx:21
 OptimizeConfigParameters.cxx:22
 OptimizeConfigParameters.cxx:23
 OptimizeConfigParameters.cxx:24
 OptimizeConfigParameters.cxx:25
 OptimizeConfigParameters.cxx:26
 OptimizeConfigParameters.cxx:27
 OptimizeConfigParameters.cxx:28
 OptimizeConfigParameters.cxx:29
 OptimizeConfigParameters.cxx:30
 OptimizeConfigParameters.cxx:31
 OptimizeConfigParameters.cxx:32
 OptimizeConfigParameters.cxx:33
 OptimizeConfigParameters.cxx:34
 OptimizeConfigParameters.cxx:35
 OptimizeConfigParameters.cxx:36
 OptimizeConfigParameters.cxx:37
 OptimizeConfigParameters.cxx:38
 OptimizeConfigParameters.cxx:39
 OptimizeConfigParameters.cxx:40
 OptimizeConfigParameters.cxx:41
 OptimizeConfigParameters.cxx:42
 OptimizeConfigParameters.cxx:43
 OptimizeConfigParameters.cxx:44
 OptimizeConfigParameters.cxx:45
 OptimizeConfigParameters.cxx:46
 OptimizeConfigParameters.cxx:47
 OptimizeConfigParameters.cxx:48
 OptimizeConfigParameters.cxx:49
 OptimizeConfigParameters.cxx:50
 OptimizeConfigParameters.cxx:51
 OptimizeConfigParameters.cxx:52
 OptimizeConfigParameters.cxx:53
 OptimizeConfigParameters.cxx:54
 OptimizeConfigParameters.cxx:55
 OptimizeConfigParameters.cxx:56
 OptimizeConfigParameters.cxx:57
 OptimizeConfigParameters.cxx:58
 OptimizeConfigParameters.cxx:59
 OptimizeConfigParameters.cxx:60
 OptimizeConfigParameters.cxx:61
 OptimizeConfigParameters.cxx:62
 OptimizeConfigParameters.cxx:63
 OptimizeConfigParameters.cxx:64
 OptimizeConfigParameters.cxx:65
 OptimizeConfigParameters.cxx:66
 OptimizeConfigParameters.cxx:67
 OptimizeConfigParameters.cxx:68
 OptimizeConfigParameters.cxx:69
 OptimizeConfigParameters.cxx:70
 OptimizeConfigParameters.cxx:71
 OptimizeConfigParameters.cxx:72
 OptimizeConfigParameters.cxx:73
 OptimizeConfigParameters.cxx:74
 OptimizeConfigParameters.cxx:75
 OptimizeConfigParameters.cxx:76
 OptimizeConfigParameters.cxx:77
 OptimizeConfigParameters.cxx:78
 OptimizeConfigParameters.cxx:79
 OptimizeConfigParameters.cxx:80
 OptimizeConfigParameters.cxx:81
 OptimizeConfigParameters.cxx:82
 OptimizeConfigParameters.cxx:83
 OptimizeConfigParameters.cxx:84
 OptimizeConfigParameters.cxx:85
 OptimizeConfigParameters.cxx:86
 OptimizeConfigParameters.cxx:87
 OptimizeConfigParameters.cxx:88
 OptimizeConfigParameters.cxx:89
 OptimizeConfigParameters.cxx:90
 OptimizeConfigParameters.cxx:91
 OptimizeConfigParameters.cxx:92
 OptimizeConfigParameters.cxx:93
 OptimizeConfigParameters.cxx:94
 OptimizeConfigParameters.cxx:95
 OptimizeConfigParameters.cxx:96
 OptimizeConfigParameters.cxx:97
 OptimizeConfigParameters.cxx:98
 OptimizeConfigParameters.cxx:99
 OptimizeConfigParameters.cxx:100
 OptimizeConfigParameters.cxx:101
 OptimizeConfigParameters.cxx:102
 OptimizeConfigParameters.cxx:103
 OptimizeConfigParameters.cxx:104
 OptimizeConfigParameters.cxx:105
 OptimizeConfigParameters.cxx:106
 OptimizeConfigParameters.cxx:107
 OptimizeConfigParameters.cxx:108
 OptimizeConfigParameters.cxx:109
 OptimizeConfigParameters.cxx:110
 OptimizeConfigParameters.cxx:111
 OptimizeConfigParameters.cxx:112
 OptimizeConfigParameters.cxx:113
 OptimizeConfigParameters.cxx:114
 OptimizeConfigParameters.cxx:115
 OptimizeConfigParameters.cxx:116
 OptimizeConfigParameters.cxx:117
 OptimizeConfigParameters.cxx:118
 OptimizeConfigParameters.cxx:119
 OptimizeConfigParameters.cxx:120
 OptimizeConfigParameters.cxx:121
 OptimizeConfigParameters.cxx:122
 OptimizeConfigParameters.cxx:123
 OptimizeConfigParameters.cxx:124
 OptimizeConfigParameters.cxx:125
 OptimizeConfigParameters.cxx:126
 OptimizeConfigParameters.cxx:127
 OptimizeConfigParameters.cxx:128
 OptimizeConfigParameters.cxx:129
 OptimizeConfigParameters.cxx:130
 OptimizeConfigParameters.cxx:131
 OptimizeConfigParameters.cxx:132
 OptimizeConfigParameters.cxx:133
 OptimizeConfigParameters.cxx:134
 OptimizeConfigParameters.cxx:135
 OptimizeConfigParameters.cxx:136
 OptimizeConfigParameters.cxx:137
 OptimizeConfigParameters.cxx:138
 OptimizeConfigParameters.cxx:139
 OptimizeConfigParameters.cxx:140
 OptimizeConfigParameters.cxx:141
 OptimizeConfigParameters.cxx:142
 OptimizeConfigParameters.cxx:143
 OptimizeConfigParameters.cxx:144
 OptimizeConfigParameters.cxx:145
 OptimizeConfigParameters.cxx:146
 OptimizeConfigParameters.cxx:147
 OptimizeConfigParameters.cxx:148
 OptimizeConfigParameters.cxx:149
 OptimizeConfigParameters.cxx:150
 OptimizeConfigParameters.cxx:151
 OptimizeConfigParameters.cxx:152
 OptimizeConfigParameters.cxx:153
 OptimizeConfigParameters.cxx:154
 OptimizeConfigParameters.cxx:155
 OptimizeConfigParameters.cxx:156
 OptimizeConfigParameters.cxx:157
 OptimizeConfigParameters.cxx:158
 OptimizeConfigParameters.cxx:159
 OptimizeConfigParameters.cxx:160
 OptimizeConfigParameters.cxx:161
 OptimizeConfigParameters.cxx:162
 OptimizeConfigParameters.cxx:163
 OptimizeConfigParameters.cxx:164
 OptimizeConfigParameters.cxx:165
 OptimizeConfigParameters.cxx:166
 OptimizeConfigParameters.cxx:167
 OptimizeConfigParameters.cxx:168
 OptimizeConfigParameters.cxx:169
 OptimizeConfigParameters.cxx:170
 OptimizeConfigParameters.cxx:171
 OptimizeConfigParameters.cxx:172
 OptimizeConfigParameters.cxx:173
 OptimizeConfigParameters.cxx:174
 OptimizeConfigParameters.cxx:175
 OptimizeConfigParameters.cxx:176
 OptimizeConfigParameters.cxx:177
 OptimizeConfigParameters.cxx:178
 OptimizeConfigParameters.cxx:179
 OptimizeConfigParameters.cxx:180
 OptimizeConfigParameters.cxx:181
 OptimizeConfigParameters.cxx:182
 OptimizeConfigParameters.cxx:183
 OptimizeConfigParameters.cxx:184
 OptimizeConfigParameters.cxx:185
 OptimizeConfigParameters.cxx:186
 OptimizeConfigParameters.cxx:187
 OptimizeConfigParameters.cxx:188
 OptimizeConfigParameters.cxx:189
 OptimizeConfigParameters.cxx:190
 OptimizeConfigParameters.cxx:191
 OptimizeConfigParameters.cxx:192
 OptimizeConfigParameters.cxx:193
 OptimizeConfigParameters.cxx:194
 OptimizeConfigParameters.cxx:195
 OptimizeConfigParameters.cxx:196
 OptimizeConfigParameters.cxx:197
 OptimizeConfigParameters.cxx:198
 OptimizeConfigParameters.cxx:199
 OptimizeConfigParameters.cxx:200
 OptimizeConfigParameters.cxx:201
 OptimizeConfigParameters.cxx:202
 OptimizeConfigParameters.cxx:203
 OptimizeConfigParameters.cxx:204
 OptimizeConfigParameters.cxx:205
 OptimizeConfigParameters.cxx:206
 OptimizeConfigParameters.cxx:207
 OptimizeConfigParameters.cxx:208
 OptimizeConfigParameters.cxx:209
 OptimizeConfigParameters.cxx:210
 OptimizeConfigParameters.cxx:211
 OptimizeConfigParameters.cxx:212
 OptimizeConfigParameters.cxx:213
 OptimizeConfigParameters.cxx:214
 OptimizeConfigParameters.cxx:215
 OptimizeConfigParameters.cxx:216
 OptimizeConfigParameters.cxx:217
 OptimizeConfigParameters.cxx:218
 OptimizeConfigParameters.cxx:219
 OptimizeConfigParameters.cxx:220
 OptimizeConfigParameters.cxx:221
 OptimizeConfigParameters.cxx:222
 OptimizeConfigParameters.cxx:223
 OptimizeConfigParameters.cxx:224
 OptimizeConfigParameters.cxx:225
 OptimizeConfigParameters.cxx:226
 OptimizeConfigParameters.cxx:227
 OptimizeConfigParameters.cxx:228
 OptimizeConfigParameters.cxx:229
 OptimizeConfigParameters.cxx:230
 OptimizeConfigParameters.cxx:231
 OptimizeConfigParameters.cxx:232
 OptimizeConfigParameters.cxx:233
 OptimizeConfigParameters.cxx:234
 OptimizeConfigParameters.cxx:235
 OptimizeConfigParameters.cxx:236
 OptimizeConfigParameters.cxx:237
 OptimizeConfigParameters.cxx:238
 OptimizeConfigParameters.cxx:239
 OptimizeConfigParameters.cxx:240
 OptimizeConfigParameters.cxx:241
 OptimizeConfigParameters.cxx:242
 OptimizeConfigParameters.cxx:243
 OptimizeConfigParameters.cxx:244
 OptimizeConfigParameters.cxx:245
 OptimizeConfigParameters.cxx:246
 OptimizeConfigParameters.cxx:247
 OptimizeConfigParameters.cxx:248
 OptimizeConfigParameters.cxx:249
 OptimizeConfigParameters.cxx:250
 OptimizeConfigParameters.cxx:251
 OptimizeConfigParameters.cxx:252
 OptimizeConfigParameters.cxx:253
 OptimizeConfigParameters.cxx:254
 OptimizeConfigParameters.cxx:255
 OptimizeConfigParameters.cxx:256
 OptimizeConfigParameters.cxx:257
 OptimizeConfigParameters.cxx:258
 OptimizeConfigParameters.cxx:259
 OptimizeConfigParameters.cxx:260
 OptimizeConfigParameters.cxx:261
 OptimizeConfigParameters.cxx:262
 OptimizeConfigParameters.cxx:263
 OptimizeConfigParameters.cxx:264
 OptimizeConfigParameters.cxx:265
 OptimizeConfigParameters.cxx:266
 OptimizeConfigParameters.cxx:267
 OptimizeConfigParameters.cxx:268
 OptimizeConfigParameters.cxx:269
 OptimizeConfigParameters.cxx:270
 OptimizeConfigParameters.cxx:271
 OptimizeConfigParameters.cxx:272
 OptimizeConfigParameters.cxx:273
 OptimizeConfigParameters.cxx:274
 OptimizeConfigParameters.cxx:275
 OptimizeConfigParameters.cxx:276
 OptimizeConfigParameters.cxx:277
 OptimizeConfigParameters.cxx:278
 OptimizeConfigParameters.cxx:279
 OptimizeConfigParameters.cxx:280
 OptimizeConfigParameters.cxx:281
 OptimizeConfigParameters.cxx:282
 OptimizeConfigParameters.cxx:283
 OptimizeConfigParameters.cxx:284
 OptimizeConfigParameters.cxx:285
 OptimizeConfigParameters.cxx:286
 OptimizeConfigParameters.cxx:287
 OptimizeConfigParameters.cxx:288
 OptimizeConfigParameters.cxx:289
 OptimizeConfigParameters.cxx:290
 OptimizeConfigParameters.cxx:291
 OptimizeConfigParameters.cxx:292
 OptimizeConfigParameters.cxx:293
 OptimizeConfigParameters.cxx:294
 OptimizeConfigParameters.cxx:295
 OptimizeConfigParameters.cxx:296
 OptimizeConfigParameters.cxx:297
 OptimizeConfigParameters.cxx:298
 OptimizeConfigParameters.cxx:299
 OptimizeConfigParameters.cxx:300
 OptimizeConfigParameters.cxx:301
 OptimizeConfigParameters.cxx:302
 OptimizeConfigParameters.cxx:303
 OptimizeConfigParameters.cxx:304
 OptimizeConfigParameters.cxx:305
 OptimizeConfigParameters.cxx:306
 OptimizeConfigParameters.cxx:307
 OptimizeConfigParameters.cxx:308
 OptimizeConfigParameters.cxx:309
 OptimizeConfigParameters.cxx:310
 OptimizeConfigParameters.cxx:311
 OptimizeConfigParameters.cxx:312
 OptimizeConfigParameters.cxx:313
 OptimizeConfigParameters.cxx:314
 OptimizeConfigParameters.cxx:315
 OptimizeConfigParameters.cxx:316
 OptimizeConfigParameters.cxx:317
 OptimizeConfigParameters.cxx:318
 OptimizeConfigParameters.cxx:319
 OptimizeConfigParameters.cxx:320
 OptimizeConfigParameters.cxx:321
 OptimizeConfigParameters.cxx:322
 OptimizeConfigParameters.cxx:323
 OptimizeConfigParameters.cxx:324
 OptimizeConfigParameters.cxx:325
 OptimizeConfigParameters.cxx:326
 OptimizeConfigParameters.cxx:327
 OptimizeConfigParameters.cxx:328
 OptimizeConfigParameters.cxx:329
 OptimizeConfigParameters.cxx:330
 OptimizeConfigParameters.cxx:331
 OptimizeConfigParameters.cxx:332
 OptimizeConfigParameters.cxx:333
 OptimizeConfigParameters.cxx:334
 OptimizeConfigParameters.cxx:335
 OptimizeConfigParameters.cxx:336
 OptimizeConfigParameters.cxx:337
 OptimizeConfigParameters.cxx:338
 OptimizeConfigParameters.cxx:339
 OptimizeConfigParameters.cxx:340
 OptimizeConfigParameters.cxx:341
 OptimizeConfigParameters.cxx:342
 OptimizeConfigParameters.cxx:343
 OptimizeConfigParameters.cxx:344
 OptimizeConfigParameters.cxx:345
 OptimizeConfigParameters.cxx:346
 OptimizeConfigParameters.cxx:347
 OptimizeConfigParameters.cxx:348
 OptimizeConfigParameters.cxx:349
 OptimizeConfigParameters.cxx:350
 OptimizeConfigParameters.cxx:351
 OptimizeConfigParameters.cxx:352
 OptimizeConfigParameters.cxx:353
 OptimizeConfigParameters.cxx:354
 OptimizeConfigParameters.cxx:355
 OptimizeConfigParameters.cxx:356
 OptimizeConfigParameters.cxx:357
 OptimizeConfigParameters.cxx:358
 OptimizeConfigParameters.cxx:359
 OptimizeConfigParameters.cxx:360
 OptimizeConfigParameters.cxx:361
 OptimizeConfigParameters.cxx:362
 OptimizeConfigParameters.cxx:363
 OptimizeConfigParameters.cxx:364
 OptimizeConfigParameters.cxx:365
 OptimizeConfigParameters.cxx:366
 OptimizeConfigParameters.cxx:367
 OptimizeConfigParameters.cxx:368
 OptimizeConfigParameters.cxx:369
 OptimizeConfigParameters.cxx:370
 OptimizeConfigParameters.cxx:371
 OptimizeConfigParameters.cxx:372
 OptimizeConfigParameters.cxx:373
 OptimizeConfigParameters.cxx:374
 OptimizeConfigParameters.cxx:375
 OptimizeConfigParameters.cxx:376
 OptimizeConfigParameters.cxx:377
 OptimizeConfigParameters.cxx:378
 OptimizeConfigParameters.cxx:379
 OptimizeConfigParameters.cxx:380
 OptimizeConfigParameters.cxx:381
 OptimizeConfigParameters.cxx:382
 OptimizeConfigParameters.cxx:383
 OptimizeConfigParameters.cxx:384
 OptimizeConfigParameters.cxx:385
 OptimizeConfigParameters.cxx:386
 OptimizeConfigParameters.cxx:387
 OptimizeConfigParameters.cxx:388
 OptimizeConfigParameters.cxx:389
 OptimizeConfigParameters.cxx:390
 OptimizeConfigParameters.cxx:391
 OptimizeConfigParameters.cxx:392
 OptimizeConfigParameters.cxx:393
 OptimizeConfigParameters.cxx:394
 OptimizeConfigParameters.cxx:395
 OptimizeConfigParameters.cxx:396
 OptimizeConfigParameters.cxx:397
 OptimizeConfigParameters.cxx:398
 OptimizeConfigParameters.cxx:399
 OptimizeConfigParameters.cxx:400
 OptimizeConfigParameters.cxx:401
 OptimizeConfigParameters.cxx:402
 OptimizeConfigParameters.cxx:403
 OptimizeConfigParameters.cxx:404
 OptimizeConfigParameters.cxx:405
 OptimizeConfigParameters.cxx:406
 OptimizeConfigParameters.cxx:407
 OptimizeConfigParameters.cxx:408
 OptimizeConfigParameters.cxx:409
 OptimizeConfigParameters.cxx:410
 OptimizeConfigParameters.cxx:411
 OptimizeConfigParameters.cxx:412
 OptimizeConfigParameters.cxx:413
 OptimizeConfigParameters.cxx:414
 OptimizeConfigParameters.cxx:415
 OptimizeConfigParameters.cxx:416
 OptimizeConfigParameters.cxx:417
 OptimizeConfigParameters.cxx:418
 OptimizeConfigParameters.cxx:419
 OptimizeConfigParameters.cxx:420
 OptimizeConfigParameters.cxx:421
 OptimizeConfigParameters.cxx:422
 OptimizeConfigParameters.cxx:423
 OptimizeConfigParameters.cxx:424
 OptimizeConfigParameters.cxx:425
 OptimizeConfigParameters.cxx:426
 OptimizeConfigParameters.cxx:427
 OptimizeConfigParameters.cxx:428
 OptimizeConfigParameters.cxx:429
 OptimizeConfigParameters.cxx:430
 OptimizeConfigParameters.cxx:431
 OptimizeConfigParameters.cxx:432
 OptimizeConfigParameters.cxx:433
 OptimizeConfigParameters.cxx:434
 OptimizeConfigParameters.cxx:435
 OptimizeConfigParameters.cxx:436
 OptimizeConfigParameters.cxx:437
 OptimizeConfigParameters.cxx:438
 OptimizeConfigParameters.cxx:439
 OptimizeConfigParameters.cxx:440
 OptimizeConfigParameters.cxx:441
 OptimizeConfigParameters.cxx:442
 OptimizeConfigParameters.cxx:443
 OptimizeConfigParameters.cxx:444
 OptimizeConfigParameters.cxx:445
 OptimizeConfigParameters.cxx:446
 OptimizeConfigParameters.cxx:447
 OptimizeConfigParameters.cxx:448
 OptimizeConfigParameters.cxx:449
 OptimizeConfigParameters.cxx:450
 OptimizeConfigParameters.cxx:451
 OptimizeConfigParameters.cxx:452
 OptimizeConfigParameters.cxx:453
 OptimizeConfigParameters.cxx:454
 OptimizeConfigParameters.cxx:455
 OptimizeConfigParameters.cxx:456
 OptimizeConfigParameters.cxx:457
 OptimizeConfigParameters.cxx:458
 OptimizeConfigParameters.cxx:459
 OptimizeConfigParameters.cxx:460
 OptimizeConfigParameters.cxx:461
 OptimizeConfigParameters.cxx:462
 OptimizeConfigParameters.cxx:463
 OptimizeConfigParameters.cxx:464
 OptimizeConfigParameters.cxx:465
 OptimizeConfigParameters.cxx:466
 OptimizeConfigParameters.cxx:467
 OptimizeConfigParameters.cxx:468
 OptimizeConfigParameters.cxx:469
 OptimizeConfigParameters.cxx:470
 OptimizeConfigParameters.cxx:471
 OptimizeConfigParameters.cxx:472
 OptimizeConfigParameters.cxx:473
 OptimizeConfigParameters.cxx:474
 OptimizeConfigParameters.cxx:475
 OptimizeConfigParameters.cxx:476
 OptimizeConfigParameters.cxx:477
 OptimizeConfigParameters.cxx:478
 OptimizeConfigParameters.cxx:479
 OptimizeConfigParameters.cxx:480
 OptimizeConfigParameters.cxx:481
 OptimizeConfigParameters.cxx:482
 OptimizeConfigParameters.cxx:483
 OptimizeConfigParameters.cxx:484
 OptimizeConfigParameters.cxx:485
 OptimizeConfigParameters.cxx:486
 OptimizeConfigParameters.cxx:487
 OptimizeConfigParameters.cxx:488
 OptimizeConfigParameters.cxx:489
 OptimizeConfigParameters.cxx:490
 OptimizeConfigParameters.cxx:491
 OptimizeConfigParameters.cxx:492
 OptimizeConfigParameters.cxx:493
 OptimizeConfigParameters.cxx:494
 OptimizeConfigParameters.cxx:495
 OptimizeConfigParameters.cxx:496
 OptimizeConfigParameters.cxx:497
 OptimizeConfigParameters.cxx:498
 OptimizeConfigParameters.cxx:499
 OptimizeConfigParameters.cxx:500
 OptimizeConfigParameters.cxx:501
 OptimizeConfigParameters.cxx:502
 OptimizeConfigParameters.cxx:503
 OptimizeConfigParameters.cxx:504
 OptimizeConfigParameters.cxx:505
 OptimizeConfigParameters.cxx:506
 OptimizeConfigParameters.cxx:507
 OptimizeConfigParameters.cxx:508
 OptimizeConfigParameters.cxx:509
 OptimizeConfigParameters.cxx:510
 OptimizeConfigParameters.cxx:511
 OptimizeConfigParameters.cxx:512
 OptimizeConfigParameters.cxx:513
 OptimizeConfigParameters.cxx:514
 OptimizeConfigParameters.cxx:515
 OptimizeConfigParameters.cxx:516
 OptimizeConfigParameters.cxx:517
 OptimizeConfigParameters.cxx:518
 OptimizeConfigParameters.cxx:519
 OptimizeConfigParameters.cxx:520
 OptimizeConfigParameters.cxx:521
 OptimizeConfigParameters.cxx:522
 OptimizeConfigParameters.cxx:523
 OptimizeConfigParameters.cxx:524
 OptimizeConfigParameters.cxx:525
 OptimizeConfigParameters.cxx:526
 OptimizeConfigParameters.cxx:527
 OptimizeConfigParameters.cxx:528
 OptimizeConfigParameters.cxx:529
 OptimizeConfigParameters.cxx:530
 OptimizeConfigParameters.cxx:531
 OptimizeConfigParameters.cxx:532
 OptimizeConfigParameters.cxx:533
 OptimizeConfigParameters.cxx:534
 OptimizeConfigParameters.cxx:535
 OptimizeConfigParameters.cxx:536
 OptimizeConfigParameters.cxx:537
 OptimizeConfigParameters.cxx:538
 OptimizeConfigParameters.cxx:539
 OptimizeConfigParameters.cxx:540
 OptimizeConfigParameters.cxx:541
 OptimizeConfigParameters.cxx:542
 OptimizeConfigParameters.cxx:543
 OptimizeConfigParameters.cxx:544
 OptimizeConfigParameters.cxx:545
 OptimizeConfigParameters.cxx:546
 OptimizeConfigParameters.cxx:547
 OptimizeConfigParameters.cxx:548
 OptimizeConfigParameters.cxx:549
 OptimizeConfigParameters.cxx:550
 OptimizeConfigParameters.cxx:551
 OptimizeConfigParameters.cxx:552
 OptimizeConfigParameters.cxx:553
 OptimizeConfigParameters.cxx:554
 OptimizeConfigParameters.cxx:555
 OptimizeConfigParameters.cxx:556
 OptimizeConfigParameters.cxx:557
 OptimizeConfigParameters.cxx:558
 OptimizeConfigParameters.cxx:559
 OptimizeConfigParameters.cxx:560
 OptimizeConfigParameters.cxx:561
 OptimizeConfigParameters.cxx:562
 OptimizeConfigParameters.cxx:563
 OptimizeConfigParameters.cxx:564
 OptimizeConfigParameters.cxx:565
 OptimizeConfigParameters.cxx:566
 OptimizeConfigParameters.cxx:567
 OptimizeConfigParameters.cxx:568
 OptimizeConfigParameters.cxx:569
 OptimizeConfigParameters.cxx:570
 OptimizeConfigParameters.cxx:571
 OptimizeConfigParameters.cxx:572
 OptimizeConfigParameters.cxx:573
 OptimizeConfigParameters.cxx:574
 OptimizeConfigParameters.cxx:575
 OptimizeConfigParameters.cxx:576
 OptimizeConfigParameters.cxx:577
 OptimizeConfigParameters.cxx:578