#include const char* textfile="links/P00hk.nofield.refitOS.undoPTCME.slice/dip5.typec.slice.txt"; const char* outfile="links/P00hk.nofield.refitOS.undoPTCME.slice/dip5.typec.slice.new.root"; int debug=0; void readTextFile(const char* textFile=textfile, const char* outFile=outfile) { cout << "reading textFile=" << textFile << endl; cout << "writing " << outFile << endl; TFile outRoot(outFile,"RECREATE"); if(!outRoot.IsOpen()) return; ifstream iss(textFile); if(!iss) return; int count(0),limit(1000); TString buffer; char name[100],title[100],buf[500]; bool isarray=false,new=false; double array[300]; int nBin(0),min(0),max(0); TH1D* h=0; while(!iss.eof()){ iss.getline(buf,500); buffer=buf; if(debug)cout << "the line is**" << buf << "**" << endl; if(buffer.Contains("name:")){ parse(buffer,"name:"); strcpy(name,buffer.Data()); new=true; if(h){ int stat = h->Write(); if(!stat) { cout << "could not write to " << outFile << endl; } delete h; } continue; } if(buffer.Contains("title:")){ parse(buffer,"title:"); strcpy(title,buffer.Data()); continue; } if(buffer.Contains("bins:")){ parse(buffer,"bins:"); nBin=atoi(buffer.Data()); continue; } if(buffer.Contains("isarray")){ isarray=true; iss.getline(buf,500); buffer=buf; if(debug)cout << "**" << buffer << "**" << endl; int k=0; count=0; while(1){ TString temp=buffer; if(!temp.Length()) break; temp.Replace(temp.First(' '),temp.Length(),""); array[count++] = atof(temp.Data()); buffer.Replace(0,buffer.First(' ')+1,""); } if(debug){ for(int i=0; iSetBinContent(bin,value); h->SetBinError(bin,error); } if(debug && ++count>limit) break; } outRoot->Close(); } void parse(TString& a,char* b){ a.ReplaceAll(b,""); a.ReplaceAll(" ",""); } TString split(TString& a){ TString temp=a.Data(); temp.Replace(temp.First(' '),temp.Length(),""); a.Replace(0,a.First(' ')+1,""); return temp; }