ROOT logo
//====================================
//last modified FK 6.NOV 2009
//====================================
//blah
// blah

#include <TPRegexp.h>
#include "AliJConst.h"
#include "AliJBaseCard.h"

//ClassImp(AliJBaseCard);

AliJBaseCard::AliJBaseCard() :
  fnentry(0),
  fKeyWordVector(0),
  fValuesVector(0),
  fValueString(0),
  fKeyTable(0)
{   
  //constructor
}

AliJBaseCard::AliJBaseCard(const char *filename) :
  fnentry(0),
  fKeyWordVector(0),
  fValuesVector(0),
  fValueString(0),
  fKeyTable(0)
{  
  //constructor

  strcpy(fcardname, filename);  //needed in PrintOut()

  if( strlen( filename ) > 0 ){

    //----  r e a d   t h e   c a r d ----
    ReadInputCard();//read config file fill Tvectors
  }
}


AliJBaseCard& AliJBaseCard::operator=(const AliJBaseCard& obj){
  // equal operator
  JUNUSED(obj);
  return *this;
}

AliJBaseCard::~AliJBaseCard(){
  // destructor
}


unsigned int AliJBaseCard::GetTVectorIndex(TString keyword, int tol){

  //   //returns findex of a TVector according to its position in std::hash_map 
  //   std::hash_map< TString, unsigned int >::iterator iter = MapKeyWordToTVector.begin();
  //   iter = MapKeyWordToTVector.find(keyword);
  //   if(iter != MapKeyWordToTVector.end()){
  //     return (unsigned int) iter->second;
  //   }else{
  //     cout << "ERROR: \""<<keyword.Data()<<"\" must be defined  "<< endl;
  //     exit(1);
  //   }

  UInt_t i;
  Int_t ind;
  i = 0;
  ind = -1;

  //cout<<"ALIJBASECARD_SEARCH_MODE_HASHLIST"<<endl;
  TNamed * ko = (TNamed*)fKeyTable.FindObject( keyword.Data() ); 
  //cout<<ko<<endl;
  if(ko) ind = ko->GetUniqueID();
  if( ind == -1 ){
    for( UInt_t ii=0;ii<fKeyWordVector.size();ii++ ){
      if( fKeyWordVector[ii] == keyword ) return i;
    }
    if( tol == 0 ){
      cout << "ERROR: \""<<keyword.Data()<<"\" must be defined  "<< endl;
      exit(1);
    }else if ( tol == 1 ){
      cout << "Warning: \""<<keyword.Data()<<"\" is not exist. return default value  "<< endl;
      return -1;
    }else{
        return -1;
    }
  }

  return ind;
}

int AliJBaseCard::GetN(TString keyword){
  //returns size of TVector
  unsigned int findex = GetTVectorIndex(keyword);
  return (int) fValuesVector[findex].GetNrows();
}

TVector *  AliJBaseCard::GetVector(TString keyword ){
  int findex = GetTVectorIndex(keyword);
  return &fValuesVector[findex];
}

float AliJBaseCard::Get(TString keyword, int VectorComponent){
  //returns VectorComponent Component of  fValuesVector TVector for given keyword
  int findex = GetTVectorIndex(keyword);
  if(0<=VectorComponent && VectorComponent<GetNwithIndex(findex)){
    return fValuesVector[findex](VectorComponent+1);
  }else{
    cout<<"ERROR: fValuesVector findex out of range "<<keyword.Data()<<endl;
    cout << "   Max findex: " << GetN(keyword) -  1<< " Asked: " <<  VectorComponent << endl;
    exit(1);
  }
}

TString AliJBaseCard::GetStr(TString keyword ){
  int findex = GetTVectorIndex(keyword, 1);
  if( findex < 0  ) return TString("");
  return fValueString[findex];
}


void AliJBaseCard::InitCard(){
  // set the length of fIndexVector and disable all indices
}

void AliJBaseCard::FinishCard(){
  // recompute fast idices
}

void AliJBaseCard::ReadInputCard(){
  // read card

  char buffer[kMaxDimBuffer];
  ifstream incard;

  cout << "Reading fcard from file: " << fcardname << endl;
  incard.open(fcardname,ios::in);

  if(!incard){
    cout<<"ERROR: Config file <"<<fcardname<<"> not found!"<<endl;
    exit(1);
  }

  InitCard();

  while(!incard.eof()){ //loop over the input fcard

    incard.getline(buffer,kMaxDimBuffer); //read a line

    if(fnentry > 1000){//is the file reasonably long?
      cout<<"Maximum number of 1000 lines reached in AliJBaseCard.C"<<endl;
      exit(1);
    }

    ReadInputLine( buffer );

    fnentry++;
  }//while eof

  FinishCard();

  return;
}

void AliJBaseCard::ReadLine( const char * buffer ){
    TString tstr(buffer);
    TPMERegexp rsp(";");
    TPMERegexp csp1("=");
    TPMERegexp csp2(",");
    int nrow = rsp.Split( tstr );
    for( int i=0;i<nrow;i++ ){
        TString row = rsp[i];
        int nst = csp1.Split(row);
        if( nst!=2 ) continue; // TODO Error or warning
        TString key = csp1[0];
        TString val = csp1[1];
        int nc = csp2.Split( val );

        vector< float > items;//auxiliary vector

        for(int j=0; j<nc; j++){ //loop over the numbers 
            TString token = csp2[j];//read a string

            if(token.IsFloat()){
                items.push_back(token.Atof());//if string is float number store it to vector
            }else{
                items.push_back(0);
                // cout<<"ERROR: char "<<token.Data()<<" among numbers"<<endl;
                // exit(1);
            }
        }//end of the for loop


        //Fill TVectors and Map 
        int index =  GetTVectorIndex( key, 2 );
        if(  index > -1 ){
            //fKeyWordVector[index] = key;
            //fValuesVector[index] = TVector( 1, items.size(), &items[0]);
            fValuesVector[index].ResizeTo( 1, items.size()) ;
            //fValuesVector[index] = TVector( 1, items.size(), &items[0]);
            //fValuesVector[index].SetElements( &items[0] );
            for( unsigned int ii=0;ii< items.size(); ii ++ ){
                fValuesVector[index][ii+1] = items[ii];
            }


            fValueString[index] = val;
        }else{
            fKeyWordVector.push_back( key.Data() );//put the new keyword at the end of the array


            fValuesVector.push_back( TVector( 1, items.size(), &items[0]) );//store TVector to array
            fValueString.push_back( val );
            //       MapKeyWordToTVector.insert(pair<TString, unsigned int>(entryname.Data(),fKeyWordVector.size()-1)); 
            AddToKeyTable( key, fValuesVector.size()-1 ); 
        }

    }

}

void AliJBaseCard::ReadInputLine( const char *buffer ){
    // parse a line



    TString tstr(buffer); //convert the line in the buffer to TString

    if( tstr.BeginsWith("#") ) return;//skipp comments
    tstr.ReplaceAll("\t"," ");//get rid of tabelators

    //remove comment in line
    Ssiz_t startOFcomment = tstr.First('#');
    if(startOFcomment>0){
        tstr.Remove(startOFcomment,tstr.Length() - startOFcomment);
    }

    //remove white spaces from the begining
    if(tstr.BeginsWith(" ")){
        Ssiz_t startOFkeyword = 0;
        while(1){
            TString s = tstr[startOFkeyword];
            if(s.CompareTo(" ")) break;
            startOFkeyword++;
        }
        tstr.Replace(0,startOFkeyword,"",0);
    }

    //separate inputs 
    TObjArray *lineContents = tstr.Tokenize(" ");

    if(lineContents->GetEntriesFast() < 1) return;//skipp empty lines

    //----- Read a keyword -----
    TString entryname = ((TObjString*)(lineContents->At(0)))->String(); //read a key word

    if(lineContents->GetEntriesFast() == 1){
        cout<<"WARNING: single keyword "<<entryname.Data()<<" on line"<<endl;
    }else{


        //----- Read parameters -----
        vector< float > items;//auxiliary vector

        for(int i=1; i<lineContents->GetEntriesFast(); i++){ //loop over the numbers 
            TString token = ((TObjString*)(lineContents->At(i)))->String();//read a string

            if(token.IsFloat()){
                items.push_back(token.Atof());//if string is float number store it to vector
            }else{
                items.push_back(0);
                // cout<<"ERROR: char "<<token.Data()<<" among numbers"<<endl;
                // exit(1);
            }
        }//end of the for loop


        //Fill TVectors and Map 
        fKeyWordVector.push_back( entryname.Data() );//put the new keyword at the end of the array


        fValuesVector.push_back( TVector( 1, items.size(), &items[0]) );//store TVector to array
        fValueString.push_back( ((TObjString*)(lineContents->At(1)))->String() );

        //       MapKeyWordToTVector.insert(pair<TString, unsigned int>(entryname.Data(),fKeyWordVector.size()-1)); 
        AddToKeyTable( entryname, fValuesVector.size()-1 ); 


    }//else

    lineContents->~TObjArray();//remove array from heap
}

void AliJBaseCard::PrintOut(){
    // echo
    cout<<endl<<"======== "<<fcardname<<" ========="<<endl;
    for(unsigned int i=0; i<fValuesVector.size();i++){
        cout<<Form("%15s",fKeyWordVector[i].Data());//print keyword
        cout<<" (dim ="<<fValuesVector[i].GetNrows()<<") ";//print size of TVector
        for(int j=1; j<=fValuesVector[i].GetNrows(); j++){
            cout<<fValuesVector[i][j]<<" ";//TVector components
        }
        cout<<endl;
    }
}


void AliJBaseCard::WriteCard(TDirectory *file){
    // write
    cout<<endl<<"====== Writing into file ========="<<endl;

    if(!file->GetDirectory("JCard")) {
        file->mkdir("JCard");//directory to store input parameters
    }
    file->cd("JCard");
    for(unsigned int i=0;i<fValuesVector.size();i++){ 
        fValuesVector[i].Write(fKeyWordVector[i]);
    }
}




















 AliJBaseCard.cxx:1
 AliJBaseCard.cxx:2
 AliJBaseCard.cxx:3
 AliJBaseCard.cxx:4
 AliJBaseCard.cxx:5
 AliJBaseCard.cxx:6
 AliJBaseCard.cxx:7
 AliJBaseCard.cxx:8
 AliJBaseCard.cxx:9
 AliJBaseCard.cxx:10
 AliJBaseCard.cxx:11
 AliJBaseCard.cxx:12
 AliJBaseCard.cxx:13
 AliJBaseCard.cxx:14
 AliJBaseCard.cxx:15
 AliJBaseCard.cxx:16
 AliJBaseCard.cxx:17
 AliJBaseCard.cxx:18
 AliJBaseCard.cxx:19
 AliJBaseCard.cxx:20
 AliJBaseCard.cxx:21
 AliJBaseCard.cxx:22
 AliJBaseCard.cxx:23
 AliJBaseCard.cxx:24
 AliJBaseCard.cxx:25
 AliJBaseCard.cxx:26
 AliJBaseCard.cxx:27
 AliJBaseCard.cxx:28
 AliJBaseCard.cxx:29
 AliJBaseCard.cxx:30
 AliJBaseCard.cxx:31
 AliJBaseCard.cxx:32
 AliJBaseCard.cxx:33
 AliJBaseCard.cxx:34
 AliJBaseCard.cxx:35
 AliJBaseCard.cxx:36
 AliJBaseCard.cxx:37
 AliJBaseCard.cxx:38
 AliJBaseCard.cxx:39
 AliJBaseCard.cxx:40
 AliJBaseCard.cxx:41
 AliJBaseCard.cxx:42
 AliJBaseCard.cxx:43
 AliJBaseCard.cxx:44
 AliJBaseCard.cxx:45
 AliJBaseCard.cxx:46
 AliJBaseCard.cxx:47
 AliJBaseCard.cxx:48
 AliJBaseCard.cxx:49
 AliJBaseCard.cxx:50
 AliJBaseCard.cxx:51
 AliJBaseCard.cxx:52
 AliJBaseCard.cxx:53
 AliJBaseCard.cxx:54
 AliJBaseCard.cxx:55
 AliJBaseCard.cxx:56
 AliJBaseCard.cxx:57
 AliJBaseCard.cxx:58
 AliJBaseCard.cxx:59
 AliJBaseCard.cxx:60
 AliJBaseCard.cxx:61
 AliJBaseCard.cxx:62
 AliJBaseCard.cxx:63
 AliJBaseCard.cxx:64
 AliJBaseCard.cxx:65
 AliJBaseCard.cxx:66
 AliJBaseCard.cxx:67
 AliJBaseCard.cxx:68
 AliJBaseCard.cxx:69
 AliJBaseCard.cxx:70
 AliJBaseCard.cxx:71
 AliJBaseCard.cxx:72
 AliJBaseCard.cxx:73
 AliJBaseCard.cxx:74
 AliJBaseCard.cxx:75
 AliJBaseCard.cxx:76
 AliJBaseCard.cxx:77
 AliJBaseCard.cxx:78
 AliJBaseCard.cxx:79
 AliJBaseCard.cxx:80
 AliJBaseCard.cxx:81
 AliJBaseCard.cxx:82
 AliJBaseCard.cxx:83
 AliJBaseCard.cxx:84
 AliJBaseCard.cxx:85
 AliJBaseCard.cxx:86
 AliJBaseCard.cxx:87
 AliJBaseCard.cxx:88
 AliJBaseCard.cxx:89
 AliJBaseCard.cxx:90
 AliJBaseCard.cxx:91
 AliJBaseCard.cxx:92
 AliJBaseCard.cxx:93
 AliJBaseCard.cxx:94
 AliJBaseCard.cxx:95
 AliJBaseCard.cxx:96
 AliJBaseCard.cxx:97
 AliJBaseCard.cxx:98
 AliJBaseCard.cxx:99
 AliJBaseCard.cxx:100
 AliJBaseCard.cxx:101
 AliJBaseCard.cxx:102
 AliJBaseCard.cxx:103
 AliJBaseCard.cxx:104
 AliJBaseCard.cxx:105
 AliJBaseCard.cxx:106
 AliJBaseCard.cxx:107
 AliJBaseCard.cxx:108
 AliJBaseCard.cxx:109
 AliJBaseCard.cxx:110
 AliJBaseCard.cxx:111
 AliJBaseCard.cxx:112
 AliJBaseCard.cxx:113
 AliJBaseCard.cxx:114
 AliJBaseCard.cxx:115
 AliJBaseCard.cxx:116
 AliJBaseCard.cxx:117
 AliJBaseCard.cxx:118
 AliJBaseCard.cxx:119
 AliJBaseCard.cxx:120
 AliJBaseCard.cxx:121
 AliJBaseCard.cxx:122
 AliJBaseCard.cxx:123
 AliJBaseCard.cxx:124
 AliJBaseCard.cxx:125
 AliJBaseCard.cxx:126
 AliJBaseCard.cxx:127
 AliJBaseCard.cxx:128
 AliJBaseCard.cxx:129
 AliJBaseCard.cxx:130
 AliJBaseCard.cxx:131
 AliJBaseCard.cxx:132
 AliJBaseCard.cxx:133
 AliJBaseCard.cxx:134
 AliJBaseCard.cxx:135
 AliJBaseCard.cxx:136
 AliJBaseCard.cxx:137
 AliJBaseCard.cxx:138
 AliJBaseCard.cxx:139
 AliJBaseCard.cxx:140
 AliJBaseCard.cxx:141
 AliJBaseCard.cxx:142
 AliJBaseCard.cxx:143
 AliJBaseCard.cxx:144
 AliJBaseCard.cxx:145
 AliJBaseCard.cxx:146
 AliJBaseCard.cxx:147
 AliJBaseCard.cxx:148
 AliJBaseCard.cxx:149
 AliJBaseCard.cxx:150
 AliJBaseCard.cxx:151
 AliJBaseCard.cxx:152
 AliJBaseCard.cxx:153
 AliJBaseCard.cxx:154
 AliJBaseCard.cxx:155
 AliJBaseCard.cxx:156
 AliJBaseCard.cxx:157
 AliJBaseCard.cxx:158
 AliJBaseCard.cxx:159
 AliJBaseCard.cxx:160
 AliJBaseCard.cxx:161
 AliJBaseCard.cxx:162
 AliJBaseCard.cxx:163
 AliJBaseCard.cxx:164
 AliJBaseCard.cxx:165
 AliJBaseCard.cxx:166
 AliJBaseCard.cxx:167
 AliJBaseCard.cxx:168
 AliJBaseCard.cxx:169
 AliJBaseCard.cxx:170
 AliJBaseCard.cxx:171
 AliJBaseCard.cxx:172
 AliJBaseCard.cxx:173
 AliJBaseCard.cxx:174
 AliJBaseCard.cxx:175
 AliJBaseCard.cxx:176
 AliJBaseCard.cxx:177
 AliJBaseCard.cxx:178
 AliJBaseCard.cxx:179
 AliJBaseCard.cxx:180
 AliJBaseCard.cxx:181
 AliJBaseCard.cxx:182
 AliJBaseCard.cxx:183
 AliJBaseCard.cxx:184
 AliJBaseCard.cxx:185
 AliJBaseCard.cxx:186
 AliJBaseCard.cxx:187
 AliJBaseCard.cxx:188
 AliJBaseCard.cxx:189
 AliJBaseCard.cxx:190
 AliJBaseCard.cxx:191
 AliJBaseCard.cxx:192
 AliJBaseCard.cxx:193
 AliJBaseCard.cxx:194
 AliJBaseCard.cxx:195
 AliJBaseCard.cxx:196
 AliJBaseCard.cxx:197
 AliJBaseCard.cxx:198
 AliJBaseCard.cxx:199
 AliJBaseCard.cxx:200
 AliJBaseCard.cxx:201
 AliJBaseCard.cxx:202
 AliJBaseCard.cxx:203
 AliJBaseCard.cxx:204
 AliJBaseCard.cxx:205
 AliJBaseCard.cxx:206
 AliJBaseCard.cxx:207
 AliJBaseCard.cxx:208
 AliJBaseCard.cxx:209
 AliJBaseCard.cxx:210
 AliJBaseCard.cxx:211
 AliJBaseCard.cxx:212
 AliJBaseCard.cxx:213
 AliJBaseCard.cxx:214
 AliJBaseCard.cxx:215
 AliJBaseCard.cxx:216
 AliJBaseCard.cxx:217
 AliJBaseCard.cxx:218
 AliJBaseCard.cxx:219
 AliJBaseCard.cxx:220
 AliJBaseCard.cxx:221
 AliJBaseCard.cxx:222
 AliJBaseCard.cxx:223
 AliJBaseCard.cxx:224
 AliJBaseCard.cxx:225
 AliJBaseCard.cxx:226
 AliJBaseCard.cxx:227
 AliJBaseCard.cxx:228
 AliJBaseCard.cxx:229
 AliJBaseCard.cxx:230
 AliJBaseCard.cxx:231
 AliJBaseCard.cxx:232
 AliJBaseCard.cxx:233
 AliJBaseCard.cxx:234
 AliJBaseCard.cxx:235
 AliJBaseCard.cxx:236
 AliJBaseCard.cxx:237
 AliJBaseCard.cxx:238
 AliJBaseCard.cxx:239
 AliJBaseCard.cxx:240
 AliJBaseCard.cxx:241
 AliJBaseCard.cxx:242
 AliJBaseCard.cxx:243
 AliJBaseCard.cxx:244
 AliJBaseCard.cxx:245
 AliJBaseCard.cxx:246
 AliJBaseCard.cxx:247
 AliJBaseCard.cxx:248
 AliJBaseCard.cxx:249
 AliJBaseCard.cxx:250
 AliJBaseCard.cxx:251
 AliJBaseCard.cxx:252
 AliJBaseCard.cxx:253
 AliJBaseCard.cxx:254
 AliJBaseCard.cxx:255
 AliJBaseCard.cxx:256
 AliJBaseCard.cxx:257
 AliJBaseCard.cxx:258
 AliJBaseCard.cxx:259
 AliJBaseCard.cxx:260
 AliJBaseCard.cxx:261
 AliJBaseCard.cxx:262
 AliJBaseCard.cxx:263
 AliJBaseCard.cxx:264
 AliJBaseCard.cxx:265
 AliJBaseCard.cxx:266
 AliJBaseCard.cxx:267
 AliJBaseCard.cxx:268
 AliJBaseCard.cxx:269
 AliJBaseCard.cxx:270
 AliJBaseCard.cxx:271
 AliJBaseCard.cxx:272
 AliJBaseCard.cxx:273
 AliJBaseCard.cxx:274
 AliJBaseCard.cxx:275
 AliJBaseCard.cxx:276
 AliJBaseCard.cxx:277
 AliJBaseCard.cxx:278
 AliJBaseCard.cxx:279
 AliJBaseCard.cxx:280
 AliJBaseCard.cxx:281
 AliJBaseCard.cxx:282
 AliJBaseCard.cxx:283
 AliJBaseCard.cxx:284
 AliJBaseCard.cxx:285
 AliJBaseCard.cxx:286
 AliJBaseCard.cxx:287
 AliJBaseCard.cxx:288
 AliJBaseCard.cxx:289
 AliJBaseCard.cxx:290
 AliJBaseCard.cxx:291
 AliJBaseCard.cxx:292
 AliJBaseCard.cxx:293
 AliJBaseCard.cxx:294
 AliJBaseCard.cxx:295
 AliJBaseCard.cxx:296
 AliJBaseCard.cxx:297
 AliJBaseCard.cxx:298
 AliJBaseCard.cxx:299
 AliJBaseCard.cxx:300
 AliJBaseCard.cxx:301
 AliJBaseCard.cxx:302
 AliJBaseCard.cxx:303
 AliJBaseCard.cxx:304
 AliJBaseCard.cxx:305
 AliJBaseCard.cxx:306
 AliJBaseCard.cxx:307
 AliJBaseCard.cxx:308
 AliJBaseCard.cxx:309
 AliJBaseCard.cxx:310
 AliJBaseCard.cxx:311
 AliJBaseCard.cxx:312
 AliJBaseCard.cxx:313
 AliJBaseCard.cxx:314
 AliJBaseCard.cxx:315
 AliJBaseCard.cxx:316
 AliJBaseCard.cxx:317
 AliJBaseCard.cxx:318
 AliJBaseCard.cxx:319
 AliJBaseCard.cxx:320
 AliJBaseCard.cxx:321
 AliJBaseCard.cxx:322
 AliJBaseCard.cxx:323
 AliJBaseCard.cxx:324
 AliJBaseCard.cxx:325
 AliJBaseCard.cxx:326
 AliJBaseCard.cxx:327
 AliJBaseCard.cxx:328
 AliJBaseCard.cxx:329
 AliJBaseCard.cxx:330
 AliJBaseCard.cxx:331
 AliJBaseCard.cxx:332
 AliJBaseCard.cxx:333
 AliJBaseCard.cxx:334
 AliJBaseCard.cxx:335
 AliJBaseCard.cxx:336
 AliJBaseCard.cxx:337
 AliJBaseCard.cxx:338
 AliJBaseCard.cxx:339