ROOT logo
#include "hflex.h"
#include "TObjString.h"
#include "TObjArray.h"

#include <iostream>
#include <iomanip>

using namespace std;

ClassImp(HFlex)

//_HADES_CLASS_DESCRIPTION
////////////////////////////////////////////////////////////////////////////
// HFlex
//
//
// example :
//
// void testFlex()
// {
//    HFlex a;
//    a.addVars("n=0:mult=0", "x=-1000:y=-1000:z=-1000");
//    a.print();
//    a.setI("n",5);
//    a.setD("x",1);
//    a.setD("y",2);
//    a.setD("z",3);
//    a.print();
//    cout<<a.getI("n")<<" "<<a.getD("x")<<endl;
// }
////////////////////////////////////////////////////////////////////////////


void HFlex::addVars(TString varsI,TString varsD)
{
    // add list of inter (first argument) and double
    // variables (second argument) to the object.
    // example : addVars("n=0:mult=0", "x=-1000:y=-1000:z=-1000")
    // The variable names are separated by ":". They might
    // be obtional be initialized using "=value". This function
    // has to be called first (only once) before variables can be used.


    varsI.ReplaceAll(" ","");
    varsD.ReplaceAll(" ","");

    //-----------Integer vars-------------------------
    if(varsI!="")
    {
	TObjArray* ar = varsI.Tokenize(":"); // split string by ":"

	for(Int_t i = 0; i < ar->GetEntries(); i ++)
	{
	    TObjString* str=(TObjString*)ar->At(i);

	    TString v=str->GetString();

	    //-------------------------------------------
	    if(v.Contains("=") != 0){   // asigned value for var
		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() ){ // new variable
			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 { // exists already
			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 { // only var , no asigned val
		map<TString,Int_t>::iterator iter = mInt.find(v);
		if( iter == mInt.end() ){ // new variable
		    mInt[v] = 0;
		} else { // exists already
		    Error("addVars()","var name \"%s\" has been used already!",v.Data());
		}
	    }
	    //-------------------------------------------

	}

	ar->Delete();
	delete ar;
    }
    //-------------------------------------------

    //-----------Double_t vars-------------------------
    if(varsD!="")
    {
	TObjArray* ar = varsD.Tokenize(":"); // split string by ":"

	for(Int_t i = 0; i < ar->GetEntries(); i ++){
	    TObjString* str=(TObjString*)ar->At(i);

	    TString v=str->GetString();

	    //-------------------------------------------
	    if(v.Contains("=") != 0){   // asigned value for var
		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() ){ // new variable
			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 { // exists already
			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 { // only var , no asigned val
		map<TString,Double_t>::iterator iter = mDouble.find(v);
		if( iter == mDouble.end() ){ // new variable
		    mDouble[v] = 0;
		} else { // exists already
		    Error("addVars()","var name \"%s\" has been used already!",v.Data());
		}
	    }
	    //-------------------------------------------

	}

	ar->Delete();
	delete ar;

    }
    //-------------------------------------------




}


Int_t HFlex::getI(TString var){
    // retrieve integer variable var. returns 0 if
    // var is not known

    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){
    // retrieve double variable var. returns 0 if
    // var is not known

    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){
    // set integer variable var to 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){
    // set double variable var to 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)
{

    // print all variable : type name value
    // the width of the name field can be changed
    // by argument w
    // varlist : "var1:var2" (print all if empty)
    cout<<"------------------"<<endl;

    TObjArray* ar = varlist.Tokenize(":"); // split string by ":"


    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;
}

 hflex.cc:1
 hflex.cc:2
 hflex.cc:3
 hflex.cc:4
 hflex.cc:5
 hflex.cc:6
 hflex.cc:7
 hflex.cc:8
 hflex.cc:9
 hflex.cc:10
 hflex.cc:11
 hflex.cc:12
 hflex.cc:13
 hflex.cc:14
 hflex.cc:15
 hflex.cc:16
 hflex.cc:17
 hflex.cc:18
 hflex.cc:19
 hflex.cc:20
 hflex.cc:21
 hflex.cc:22
 hflex.cc:23
 hflex.cc:24
 hflex.cc:25
 hflex.cc:26
 hflex.cc:27
 hflex.cc:28
 hflex.cc:29
 hflex.cc:30
 hflex.cc:31
 hflex.cc:32
 hflex.cc:33
 hflex.cc:34
 hflex.cc:35
 hflex.cc:36
 hflex.cc:37
 hflex.cc:38
 hflex.cc:39
 hflex.cc:40
 hflex.cc:41
 hflex.cc:42
 hflex.cc:43
 hflex.cc:44
 hflex.cc:45
 hflex.cc:46
 hflex.cc:47
 hflex.cc:48
 hflex.cc:49
 hflex.cc:50
 hflex.cc:51
 hflex.cc:52
 hflex.cc:53
 hflex.cc:54
 hflex.cc:55
 hflex.cc:56
 hflex.cc:57
 hflex.cc:58
 hflex.cc:59
 hflex.cc:60
 hflex.cc:61
 hflex.cc:62
 hflex.cc:63
 hflex.cc:64
 hflex.cc:65
 hflex.cc:66
 hflex.cc:67
 hflex.cc:68
 hflex.cc:69
 hflex.cc:70
 hflex.cc:71
 hflex.cc:72
 hflex.cc:73
 hflex.cc:74
 hflex.cc:75
 hflex.cc:76
 hflex.cc:77
 hflex.cc:78
 hflex.cc:79
 hflex.cc:80
 hflex.cc:81
 hflex.cc:82
 hflex.cc:83
 hflex.cc:84
 hflex.cc:85
 hflex.cc:86
 hflex.cc:87
 hflex.cc:88
 hflex.cc:89
 hflex.cc:90
 hflex.cc:91
 hflex.cc:92
 hflex.cc:93
 hflex.cc:94
 hflex.cc:95
 hflex.cc:96
 hflex.cc:97
 hflex.cc:98
 hflex.cc:99
 hflex.cc:100
 hflex.cc:101
 hflex.cc:102
 hflex.cc:103
 hflex.cc:104
 hflex.cc:105
 hflex.cc:106
 hflex.cc:107
 hflex.cc:108
 hflex.cc:109
 hflex.cc:110
 hflex.cc:111
 hflex.cc:112
 hflex.cc:113
 hflex.cc:114
 hflex.cc:115
 hflex.cc:116
 hflex.cc:117
 hflex.cc:118
 hflex.cc:119
 hflex.cc:120
 hflex.cc:121
 hflex.cc:122
 hflex.cc:123
 hflex.cc:124
 hflex.cc:125
 hflex.cc:126
 hflex.cc:127
 hflex.cc:128
 hflex.cc:129
 hflex.cc:130
 hflex.cc:131
 hflex.cc:132
 hflex.cc:133
 hflex.cc:134
 hflex.cc:135
 hflex.cc:136
 hflex.cc:137
 hflex.cc:138
 hflex.cc:139
 hflex.cc:140
 hflex.cc:141
 hflex.cc:142
 hflex.cc:143
 hflex.cc:144
 hflex.cc:145
 hflex.cc:146
 hflex.cc:147
 hflex.cc:148
 hflex.cc:149
 hflex.cc:150
 hflex.cc:151
 hflex.cc:152
 hflex.cc:153
 hflex.cc:154
 hflex.cc:155
 hflex.cc:156
 hflex.cc:157
 hflex.cc:158
 hflex.cc:159
 hflex.cc:160
 hflex.cc:161
 hflex.cc:162
 hflex.cc:163
 hflex.cc:164
 hflex.cc:165
 hflex.cc:166
 hflex.cc:167
 hflex.cc:168
 hflex.cc:169
 hflex.cc:170
 hflex.cc:171
 hflex.cc:172
 hflex.cc:173
 hflex.cc:174
 hflex.cc:175
 hflex.cc:176
 hflex.cc:177
 hflex.cc:178
 hflex.cc:179
 hflex.cc:180
 hflex.cc:181
 hflex.cc:182
 hflex.cc:183
 hflex.cc:184
 hflex.cc:185
 hflex.cc:186
 hflex.cc:187
 hflex.cc:188
 hflex.cc:189
 hflex.cc:190
 hflex.cc:191
 hflex.cc:192
 hflex.cc:193
 hflex.cc:194
 hflex.cc:195
 hflex.cc:196
 hflex.cc:197
 hflex.cc:198
 hflex.cc:199
 hflex.cc:200
 hflex.cc:201
 hflex.cc:202
 hflex.cc:203
 hflex.cc:204
 hflex.cc:205
 hflex.cc:206
 hflex.cc:207
 hflex.cc:208
 hflex.cc:209
 hflex.cc:210
 hflex.cc:211
 hflex.cc:212
 hflex.cc:213
 hflex.cc:214
 hflex.cc:215
 hflex.cc:216
 hflex.cc:217
 hflex.cc:218
 hflex.cc:219
 hflex.cc:220
 hflex.cc:221
 hflex.cc:222
 hflex.cc:223
 hflex.cc:224
 hflex.cc:225
 hflex.cc:226
 hflex.cc:227
 hflex.cc:228
 hflex.cc:229
 hflex.cc:230
 hflex.cc:231
 hflex.cc:232
 hflex.cc:233
 hflex.cc:234
 hflex.cc:235
 hflex.cc:236
 hflex.cc:237
 hflex.cc:238
 hflex.cc:239
 hflex.cc:240
 hflex.cc:241
 hflex.cc:242
 hflex.cc:243
 hflex.cc:244
 hflex.cc:245
 hflex.cc:246
 hflex.cc:247