Skip to content
Snippets Groups Projects
Commit 87688a61 authored by BaM's avatar BaM
Browse files

map keyword on XSModel seem to be working... test is running...

git-svn-id: svn+ssh://svn.in2p3.fr/class@676 0e7d625b-0364-4367-a6be-d5be4a48d228
parent db92dbb3
No related branches found
No related tags found
No related merge requests found
......@@ -36,10 +36,11 @@
XSM_MLP::XSM_MLP(string TMVA_Weight_Directory,string InformationFile, bool IsTimeStep):XSModel(new CLASSLogger("XSM_MLP.log"))
{
fIsStepTime=IsTimeStep;
fIsStepTime = IsTimeStep;
fTMVAWeightFolder = TMVA_Weight_Directory;
if(InformationFile=="")
fInformationFile = TMVA_Weight_Directory+"/Data_Base_Info.nfo";
fInformationFile = TMVA_Weight_Directory + "/Data_Base_Info.nfo";
else
fInformationFile = fTMVAWeightFolder+InformationFile;
......@@ -79,127 +80,85 @@ XSM_MLP::XSM_MLP(CLASSLogger* Log,string TMVA_Weight_Directory,string Informatio
//________________________________________________________________________
XSM_MLP::~XSM_MLP()
{
DBGL
fMapOfTMVAVariableNames.clear();
fDKeyword.clear();
DBGL
}
void XSM_MLP::LoadKeyword()
{
DBGL
fDKeyword.insert( pair<string, DMthPtr>( "k_timestep", & XSM_MLP::ReadTimeSteps));
fDKeyword.insert( pair<string, DMthPtr>( "k_zainame", & XSM_MLP::ReadZAIName) );
DBGL
}
//________________________________________________________________________
void XSM_MLP::ReadLine(string line)
void XSM_MLP::ReadZAIName(const string &line)
{
DBGL
int pos = 0;
string keyword = tlc(StringLine::NextWord(line, pos, ' '));
if( keyword != "k_zainame" ) // Check the keyword
{
ERROR << " Bad keyword : \"k_zainame\" not found !" << endl;
exit(1);
}
int Z = atoi(StringLine::NextWord(line, pos, ' ').c_str());
int A = atoi(StringLine::NextWord(line, pos, ' ').c_str());
int I = atoi(StringLine::NextWord(line, pos, ' ').c_str());
int start = 0;
string keyword = tlc(StringLine::NextWord(line, start, ' '));
(this->*fKeyword[ keyword ])(line);
string name = StringLine::NextWord(line, pos, ' ');
fMapOfTMVAVariableNames.insert( pair<ZAI,string>( ZAI(Z, A, I), name ) );
DBGL
}
void XSM_MLP::ReadTimeSteps(const string &line)
{
DBGL
int pos = 0;
string keyword = tlc(StringLine::NextWord(line, pos, ' '));
if( keyword != "k_timestep" ) // Check the keyword
{
ERROR << " Bad keyword : \"k_timestep\" not found !" << endl;
exit(1);
}
while( pos < (int)line.size() )
fMLP_Time.push_back( atof( (StringLine::NextWord(line,pos,' ')).c_str() ));
DBGL
}
//________________________________________________________________________
void XSM_MLP::GetDataBaseInformation()
void XSM_MLP::ReadLine(string line)
{
ifstream FILE(fInformationFile.c_str());
DBGL
if(FILE.good())
{
while(!FILE.eof())
{
string line;
getline(FILE, line);
size_t foundRType = line.find("ReactorType :");
size_t foundFType = line.find("FuelType :");
size_t foundHM = line.find("Heavy Metal (t) :");
size_t foundPower = line.find("Thermal Power (W) :");
size_t foundTime = line.find("Time (s) :");
size_t foundZAI = line.find("Z A I Name (input MLP) :");
size_t foundDomain = line.find("Fuel range (Z A I min max) :");
int pos=0;
if(foundRType != std::string::npos)
{ StringLine::NextWord(line,pos,':');
fDBRType = atof( (StringLine::NextWord(line,pos,':')).c_str() );
}
pos=0;
if(foundFType != std::string::npos)
{ StringLine::NextWord(line,pos,':');
fDBFType = atof( (StringLine::NextWord(line,pos,':')).c_str() );
}
pos=0;
if(foundHM != std::string::npos)
{ StringLine::NextWord(line,pos,':');
fDBHMMass = atof( (StringLine::NextWord(line,pos,':')).c_str() );
}
pos=0;
if(foundPower !=std::string::npos)
{ StringLine::NextWord(line,pos,':');
fDBPower = atof( (StringLine::NextWord(line,pos,':') ).c_str() );
}
pos=0;
if(foundTime!=std::string::npos)
{
StringLine::NextWord(line,pos,':');
while( pos< (int)line.size() )
fMLP_Time.push_back( atof( (StringLine::NextWord(line,pos,' ')).c_str() ));
}
pos=0;
if(foundZAI != std::string::npos)
{ string Z;
string A;
string I;
string Name;
int posoflinebeforbadline=0;
do
{ posoflinebeforbadline = FILE.tellg();
getline(FILE, line);
stringstream ssline;
ssline<<line;
ssline>>Z>>A>>I>>Name;
if(StringLine::IsDouble(Z) && StringLine::IsDouble(A) && StringLine::IsDouble(I) )
{
fMapOfTMVAVariableNames.insert( pair<ZAI,string>(ZAI(atoi(Z.c_str()),atoi(A.c_str()),atoi(I.c_str())),Name) );
}
}while((StringLine::IsDouble(Z) && StringLine::IsDouble(A) && StringLine::IsDouble(I)) && !FILE.eof());
FILE.seekg(posoflinebeforbadline); //return one line before
}
if(foundDomain != std::string::npos)
{ string Z;
string A;
string I;
string min;
string max;
int posoflinebeforbadline=0;
do
{ posoflinebeforbadline = FILE.tellg();
getline(FILE, line);
stringstream ssline;
ssline<<line;
ssline>>Z>>A>>I>>min>>max;
if(StringLine::IsDouble(Z) && StringLine::IsDouble(A) && StringLine::IsDouble(I) && StringLine::IsDouble(min) && StringLine::IsDouble(max) )
{
fZAILimits.insert( pair<ZAI,pair<double,double> >(ZAI(atoi(Z.c_str()),atoi(A.c_str()),atoi(I.c_str())),make_pair(atof(min.c_str()),atof(max.c_str()))) );
}
}
while((StringLine::IsDouble(Z) && StringLine::IsDouble(A) && StringLine::IsDouble(I) )&& !FILE.eof());
FILE.seekg(posoflinebeforbadline); //return one line before
}
}
}
else
{
ERROR << "Can't find/open file " << fInformationFile << endl;
exit(0);
}
int pos = 0;
string keyword = tlc(StringLine::NextWord(line, pos, ' '));
/********DEBUG*************************************/
map<string, DMthPtr>::iterator it = fDKeyword.find(keyword);
if(it != fDKeyword.end())
(this->*(it->second))( line );
DBGL
}
//________________________________________________________________________
/*void XSM_MLP::GetDataBaseInformation()
{
INFO<<"\tMLP XS Data Base Information : "<<endl;
INFO<<"\t\tHeavy Metal (t) :"<<fDBHMMass<<endl;
INFO<<"\t\tThermal Power (W) :"<<fDBPower<<endl;
......@@ -219,6 +178,8 @@ void XSM_MLP::GetDataBaseInformation()
}
*/
//________________________________________________________________________
void XSM_MLP::GetMLPWeightFiles()
{
......
......@@ -8,6 +8,7 @@
\brief Header file for XSM_MLP class.
@authors BaM
@authors BLG
@version 1.0
*/
......@@ -18,6 +19,8 @@
#include <iostream>
#include <map>
#include <vector>
typedef long long int cSecond;
using namespace std;
......@@ -75,7 +78,11 @@ class XSM_MLP : public XSModel
~XSM_MLP();
//@}
void LoadKeyword() {}
void LoadKeyword();
void ReadTimeSteps(const string &line);
void ReadZAIName(const string &line);
EvolutionData GetCrossSections(IsotopicVector IV,double t=0); //!< Return calculated cross section by the MLP regression
......@@ -83,8 +90,6 @@ class XSM_MLP : public XSModel
private :
void GetDataBaseInformation(); //!< Read information file and fill Reactor Type, Fuel type, HM mass, Power, time vector, and TMVA input variables names
void GetMLPWeightFiles(); //!< Find all .xml file in TMVA_Weight_Directory
EvolutionData GetCrossSectionsStep(IsotopicVector IV); //!< Return calculated cross section by the MLP regression when fIsTimeStep==true
EvolutionData GetCrossSectionsTime(IsotopicVector IV); //!< Return calculated cross section by the MLP regression when fIsTimeStep==false
......
......@@ -9,7 +9,7 @@
@author BaM
@author BLG
@version 1.0
@version 2
*/
#include "EvolutionData.hxx"
#include "CLASSObject.hxx"
......@@ -40,7 +40,7 @@ typedef void (XSModel::*MthPtr)( const string & ) ;
@author BaM
@author BLG
@version 1.0
@version 2
*/
//________________________________________________________________________
......
......@@ -58,12 +58,15 @@ void XSModel::ReadLine(string line)
if (!freaded)
{
int start = 0;
string keyword = tlc(StringLine::NextWord(line, start, ' '));
int pos = 0;
string keyword = tlc(StringLine::NextWord(line, pos, ' '));
map<string, MthPtr>::iterator it = fKeyword.find(keyword);
(this->*fKeyword[ keyword ])(line);
freaded = true;
if(it != fKeyword.end())
(this->*(it->second))( line );
freaded = true;
ReadLine(line);
}
......@@ -88,17 +91,17 @@ void XSModel::LoadKeyword()
void XSModel::ReadRParam(const string &line)
{
DBGL
int start = 0;
string keyword = tlc(StringLine::NextWord(line, start, ' '));
int pos = 0;
string keyword = tlc(StringLine::NextWord(line, pos, ' '));
if( keyword != "k_power" || keyword != "k_mass" ) // Check the keyword
{
ERROR << " Bad keyword : " << keyword << " Not found !" << endl;
exit(1);
}
if( keyword == "k_mass" )
fDBHMMass = atof(StringLine::NextWord(line, start, ' ').c_str());
fDBHMMass = atof(StringLine::NextWord(line, pos, ' ').c_str());
else if( keyword == "k_mass" )
fDBPower = atof(StringLine::NextWord(line, start, ' ').c_str());
fDBPower = atof(StringLine::NextWord(line, pos, ' ').c_str());
DBGL
}
......@@ -107,17 +110,17 @@ void XSModel::ReadRParam(const string &line)
void XSModel::ReadType(const string &line)
{
DBGL
int start = 0;
string keyword = tlc(StringLine::NextWord(line, start, ' '));
int pos = 0;
string keyword = tlc(StringLine::NextWord(line, pos, ' '));
if( keyword != "k_fuel" || keyword != "k_reactor" ) // Check the keyword
{
ERROR << " Bad keyword : " << keyword << " Not found !" << endl;
exit(1);
}
if( keyword == "k_fuel" )
fDBFType = StringLine::NextWord(line, start, ' ');
fDBFType = StringLine::NextWord(line, pos, ' ');
else if( keyword == "k_reactor" )
fDBRType = StringLine::NextWord(line, start, ' ');
fDBRType = StringLine::NextWord(line, pos, ' ');
DBGL
}
......@@ -126,20 +129,20 @@ void XSModel::ReadType(const string &line)
void XSModel::ReadZAIlimits(const string &line)
{
DBGL
int start = 0;
string keyword = tlc(StringLine::NextWord(line, start, ' '));
int pos = 0;
string keyword = tlc(StringLine::NextWord(line, pos, ' '));
if( keyword != "k_zail" ) // Check the keyword
{
ERROR << " Bad keyword : \"k_zail\" not found !" << endl;
exit(1);
}
int Z = atoi(StringLine::NextWord(line, start, ' ').c_str());
int A = atoi(StringLine::NextWord(line, start, ' ').c_str());
int I = atoi(StringLine::NextWord(line, start, ' ').c_str());
int Z = atoi(StringLine::NextWord(line, pos, ' ').c_str());
int A = atoi(StringLine::NextWord(line, pos, ' ').c_str());
int I = atoi(StringLine::NextWord(line, pos, ' ').c_str());
double upLimit = atof(StringLine::NextWord(line, start, ' ').c_str());
double downLimit = atof(StringLine::NextWord(line, start, ' ').c_str());
double upLimit = atof(StringLine::NextWord(line, pos, ' ').c_str());
double downLimit = atof(StringLine::NextWord(line, pos, ' ').c_str());
DBGL
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment