Skip to content
Snippets Groups Projects
XSM_SFR.cxx 6.95 KiB
Newer Older
Ernoult's avatar
Ernoult committed
#include <dirent.h>
#include <errno.h>
#include <sstream>
#include <string>
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>


#include <TGraph.h>
#include <TString.h>
#include "TFile.h"
#include "TSystem.h"
#include "TROOT.h"
#include "TStopwatch.h"

Ernoult's avatar
Ernoult committed
#include "XSModel.hxx"
#include "XSM_SFR.hxx"
#include "CLASSLogger.hxx"
#include "CLASSMethod.hxx"
BaM's avatar
BaM committed
#include "StringLine.hxx"

//________________________________________________________________________
//
BaM's avatar
BaM committed
//        XSM_SFR
//
//________________________________________________________________________
BaM's avatar
BaM committed
XSM_SFR::XSM_SFR(string TMVA_Weight_Directory,
                 map<string, double> FixedParameters,
BaM's avatar
BaM committed
                 string InformationFile) {
    
    fLog = new CLASSLogger("XSM_SFR.log");
BaM's avatar
BaM committed
    DBGL
    fTMVAWeightFolder = TMVA_Weight_Directory;
    
    fInformationFile = fTMVAWeightFolder+InformationFile;
    
    DBGL
    GetMLPWeightFiles();
    DBGL
    
    INFO << "__A cross section interpolator using" << endl;
    INFO << "Multi Layer Perceptron has been define__" << endl;
    INFO << " \t His TMVA folder is : \" " << fTMVAWeightFolder << "\"" << endl;
    
    LoadKeyword();
    DBGL
    ReadNFO();
    DBGL
    BookTMVAReader(); 
BaM's avatar
BaM committed
    SetFixedVariablesValues(FixedParameters);
BaM's avatar
BaM committed
    DBGL
}
//________________________________________________________________________
BaM's avatar
BaM committed
XSM_SFR::XSM_SFR(CLASSLogger* Log,
                 string TMVA_Weight_Directory,
                 map<string,double> FixedParameters,
BaM's avatar
BaM committed
                 string InformationFile) {
    DBGL
    fLog = Log;
      
    fTMVAWeightFolder = TMVA_Weight_Directory;
    
    fInformationFile = fTMVAWeightFolder+InformationFile;
    
    DBGL
    GetMLPWeightFiles();
    DBGL
    
    INFO << "__A cross section interpolator using" << endl;
    INFO << "Multi Layer Perceptron has been define__" << endl;
    INFO << " \t His TMVA folder is : \" " << fTMVAWeightFolder << "\"" << endl;
    
    LoadKeyword();
    DBGL
    ReadNFO();
    DBGL
    BookTMVAReader(); 
    SetFixedVariablesValues(FixedParameters);
    DBGL
//________________________________________________________________________
BaM's avatar
BaM committed
XSM_SFR::~XSM_SFR()
BaM's avatar
BaM committed
    DBGL
    fTMVAVariableNames.clear();
    fDKeyword.clear();
    DBGL
//________________________________________________________________________
BaM's avatar
BaM committed
void XSM_SFR::SetFixedVariablesValues(map<string, double> FixedParameters) {
  
  fTMVAFixedVariableValues = vector<double>(fTMVAVariableNames.size(), -1);
  for (unsigned int i = 0; i < fTMVAVariableNames.size(); i++) {
    if (FixedParameters.find(fTMVAVariableNames[i]) != FixedParameters.end()) {
      fTMVAFixedVariableValues[i] = FixedParameters[fTMVAVariableNames[i]];
    }
  }
//________________________________________________________________________
void XSM_SFR::LoadKeyword()
{
BaM's avatar
BaM committed
    DBGL
BaM's avatar
BaM committed
    XSM_MLP::LoadKeyword();
BaM's avatar
BaM committed
    fDKeyword.insert( pair<string, XS_SFR_DMthPtr>( "k_timestep",    & XSM_MLP::ReadTimeSteps));
BaM's avatar
BaM committed
    fDKeyword.insert( pair<string, XS_SFR_DMthPtr>( "k_inputparameter",    & XSM_SFR::ReadNonZaiTMVAVariables)     );
BaM's avatar
BaM committed
    fDKeyword.insert( pair<string, XS_MLP_DMthPtr>( "k_zainame",    & XSM_MLP::ReadZAIName)     );
    DBGL
}
//________________________________________________________________________
BaM's avatar
BaM committed
void XSM_SFR::ReadNonZaiTMVAVariables(const string &line)
BaM's avatar
BaM committed
    DBGL
    int pos = 0;
    string keyword = tlc(StringLine::NextWord(line, pos, ' '));
    if( keyword != "k_inputparameter" )    // Check the keyword
    {
        ERROR << " Bad keyword : \"k_inputparameter\" not found !" << endl;
        exit(1);
    }
    
    string name = StringLine::NextWord(line, pos, ' ');
    
    fTMVAVariableNames.push_back( name );
    
    DBGL
}
//________________________________________________________________________
void XSM_SFR::ReadLine(string line)
{
BaM's avatar
BaM committed
    DBGL
    
    int pos = 0;
    string keyword = tlc(StringLine::NextWord(line, pos, ' '));
    
    map<string, XS_SFR_DMthPtr>::iterator it = fDKeyword.find(keyword);
    if(it != fDKeyword.end())
        (this->*(it->second))( line );
    
    DBGL
}
//________________________________________________________________________
void XSM_SFR::GetMLPWeightFiles()
{
BaM's avatar
BaM committed
    DBGL
    /**********Get All TMVA weight files*******************/
    //check if the folder containing weights exists
    DIR* rep = NULL;
    struct dirent* fichierLu = NULL;
    rep = opendir(fTMVAWeightFolder.c_str());
    
    if (rep ==  NULL)
    {
        ERROR << " Reading error for TMVA weight folder  " << fTMVAWeightFolder.c_str() << " : " << strerror(errno) << endl;
        exit(1);
    }
    
    /**Save file names of TMVA  weights*/
    fWeightFiles.resize(0);
    while ((fichierLu = readdir(rep)) != NULL)
    {
        string FileName = fichierLu->d_name ;
        if(FileName != "." && FileName != ".." )
        {
            if(FileName[FileName.size()-3] == 'x'  &&  FileName[FileName.size()-2] == 'm' && FileName[FileName.size()-1] == 'l' && FileName[0] != '.' )
                fWeightFiles.push_back(FileName);
            
        }
    }
    DBGL
}
//________________________________________________________________________
//________________________________________________________________________
//
BaM's avatar
BaM committed
//    Time  (MLP take time as parameter)
//________________________________________________________________________
//________________________________________________________________________
//________________________________________________________________________

BaM's avatar
BaM committed
void XSM_SFR::BookTMVAReader() {
BaM's avatar
BaM committed
    DBGL
BaM's avatar
BaM committed
    string dir = fTMVAWeightFolder;
    if (dir[dir.size() - 1] != '/') {
        dir += "/";
    }
BaM's avatar
BaM committed
    for (int i = 0; i < int(fWeightFiles.size()); i++) {
        int Z = -2;
        int A = -2;
        int I = -2;
        int Reaction = -2;
        ReadWeightFile(fWeightFiles[i], Z, A, I, Reaction);
        if (Z >= GetZAIThreshold()) {
BaM's avatar
BaM committed
    DBGL
BaM's avatar
BaM committed
            fReader.push_back(new CLASSReader(fTMVAVariableNames));
BaM's avatar
BaM committed
    DBGL
BaM's avatar
BaM committed
            
            map<ZAI,string>::iterator it; 
BaM's avatar
BaM committed
            for ( it = fMapOfTMVAVariableNames.begin(); it != fMapOfTMVAVariableNames.end(); it++){
             // std::cout<< it->second << std::endl;
BaM's avatar
BaM committed
              fReader[i]->AddVariable(it->second.c_str());
BaM's avatar
BaM committed
    DBGL
BaM's avatar
BaM committed
            // Time as to be the last one !!! 
            fReader[i]->AddVariable("Time");
BaM's avatar
BaM committed
    DBGL
           // std::cout << dir + fWeightFiles[i] << std::endl;
BaM's avatar
BaM committed
            fReader[i]->BookMVA("MLP method", dir + fWeightFiles[i]);
BaM's avatar
BaM committed
    DBGL
BaM's avatar
BaM committed
    DBGL
BaM's avatar
BaM committed
vector<float> XSM_SFR::CreateTMVAInput(IsotopicVector IV, int TimeStep)
BaM's avatar
BaM committed
  vector<float> tmva_input_iv = XSM_MLP::CreateTMVAInput(IV, TimeStep);
    
BaM's avatar
BaM committed
  vector<float> tmva_input;  
BaM's avatar
BaM committed
  for(unsigned int j = 0 ; j < fTMVAVariableNames.size() ; j++) {
            tmva_input.push_back(fTMVAFixedVariableValues[j]);
    }    
  tmva_input.insert(tmva_input.end(), tmva_input_iv.begin(), tmva_input_iv.end());    
    return tmva_input;
}
//________________________________________________________________________
//________________________________________________________________________