#include "hflex.h"
#include "TObjString.h"
#include "TObjArray.h"
#include <iostream>
#include <iomanip>
using namespace std;
ClassImp(HFlex)
void HFlex::addVars(TString varsI,TString varsD)
{
varsI.ReplaceAll(" ","");
varsD.ReplaceAll(" ","");
if(varsI!="")
{
TObjArray* ar = varsI.Tokenize(":");
for(Int_t i = 0; i < ar->GetEntries(); i ++)
{
TObjString* str=(TObjString*)ar->At(i);
TString v=str->GetString();
if(v.Contains("=") != 0){
Ssiz_t first = v.First("=");
if(first>0){
TString v1 = v;
v1.Replace(first,v1.Length()-first,"");
v.Replace(0,first+1,"");
map<TString,Int_t>::iterator iter = mInt.find(v1);
if( iter == mInt.end() ){
if(v!="") mInt[v1] = v.Atoi();
else {
Error("addVars()","var name \"%s\" has no assigned value but \"=\" ! assign 0.",v1.Data());
mInt[v1] = 0;
}
} else {
Error("addVars()","var name \"%s\" has been used already!",v1.Data());
}
} else {
Error("addVars()","var name empty but assigned value = %s ! skipped!",v.Data());
}
} else {
map<TString,Int_t>::iterator iter = mInt.find(v);
if( iter == mInt.end() ){
mInt[v] = 0;
} else {
Error("addVars()","var name \"%s\" has been used already!",v.Data());
}
}
}
ar->Delete();
delete ar;
}
if(varsD!="")
{
TObjArray* ar = varsD.Tokenize(":");
for(Int_t i = 0; i < ar->GetEntries(); i ++){
TObjString* str=(TObjString*)ar->At(i);
TString v=str->GetString();
if(v.Contains("=") != 0){
Ssiz_t first = v.First("=");
if(first>0){
TString v1 = v;
v1.Replace(first,v1.Length()-first,"");
v.Replace(0,first+1,"");
map<TString,Double_t>::iterator iter = mDouble.find(v1);
if( iter == mDouble.end() ){
if(v!="") mDouble[v1] = v.Atof();
else {
Error("addVars()","var name \"%s\" has no assigned value but \"=\" ! assign 0.",v1.Data());
mDouble[v1] = 0;
}
} else {
Error("addVars()","var name \"%s\" has been used already!",v1.Data());
}
} else {
Error("addVars()","var name empty but assigned value = %s ! skipped!",v.Data());
}
} else {
map<TString,Double_t>::iterator iter = mDouble.find(v);
if( iter == mDouble.end() ){
mDouble[v] = 0;
} else {
Error("addVars()","var name \"%s\" has been used already!",v.Data());
}
}
}
ar->Delete();
delete ar;
}
}
Int_t HFlex::getI(TString var){
map<TString,Int_t>::iterator iter = mInt.find(var);
if( iter == mInt.end() ){
Error("getInt()","var \"%s\" not found!",var.Data());
return 0;
}
else return iter->second;
}
Double_t HFlex::getD(TString var){
map<TString,Double_t>::iterator iter = mDouble.find(var);
if( iter == mDouble.end() ){
Error("getDouble()","var \"%s\" not found!",var.Data());
return 0;
}
else return iter->second;
}
void HFlex::setI(TString var,Int_t val){
map<TString,Int_t>::iterator iter = mInt.find(var);
if( iter == mInt.end() ){
Error("getInt()","var \"%s\" not found!",var.Data());
}
else iter->second=val;
}
void HFlex::setD(TString var,Double_t val){
map<TString,Double_t>::iterator iter = mDouble.find(var);
if( iter == mDouble.end() ){
Error("getInt()","var \"%s\" not found!",var.Data());
}
else iter->second=val;
}
void HFlex::print(TString varlist,Int_t w)
{
cout<<"------------------"<<endl;
TObjArray* ar = varlist.Tokenize(":");
map<TString,Int_t>::iterator iter;
for( iter = mInt.begin(); iter != mInt.end(); ++iter ) {
if(varlist=="" ) cout <<"Int_t "<<setw(w)<< iter->first.Data() << " = " << iter->second << endl;
else {
for(Int_t i = 0; i < ar->GetEntries(); i ++){
TObjString* str=(TObjString*)ar->At(i);
TString v=str->GetString();
if(v==iter->first)
{
cout <<"Int_t "<<setw(w)<< iter->first.Data() << " = " << iter->second << endl;
break;
}
}
}
}
map<TString,Double_t>::iterator iter2;
for( iter2 = mDouble.begin(); iter2 != mDouble.end(); ++iter2 ) {
if(varlist=="" ) cout <<"Double_t "<<setw(w)<< iter2->first.Data() << " = " << iter2->second << endl;
else {
for(Int_t i = 0; i < ar->GetEntries(); i ++){
TObjString* str=(TObjString*)ar->At(i);
TString v=str->GetString();
if(v==iter2->first)
{
cout <<"Int_t "<<setw(w)<< iter2->first.Data() << " = " << iter2->second << endl;
break;
}
}
}
}
ar->Delete();
delete ar;
cout<<"------------------"<<endl;
}