//==================================== //last modified FK 6.NOV 2009 //==================================== //blah // blah #include #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: \""<GetUniqueID(); if( ind == -1 ){ for( UInt_t ii=0;ii not found!"< 1000){//is the file reasonably long? cout<<"Maximum number of 1000 lines reached in AliJBaseCard.C"< items;//auxiliary vector for(int j=0; j -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(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 "< items;//auxiliary vector for(int i=1; iGetEntriesFast(); 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 "<At(1)))->String() ); // MapKeyWordToTVector.insert(pair(entryname.Data(),fKeyWordVector.size()-1)); AddToKeyTable( entryname, fValuesVector.size()-1 ); }//else lineContents->~TObjArray();//remove array from heap } void AliJBaseCard::PrintOut(){ // echo cout<GetDirectory("JCard")) { file->mkdir("JCard");//directory to store input parameters } file->cd("JCard"); for(unsigned int i=0;i