Changeset 2792 in Sophya


Ignore:
Timestamp:
Jun 1, 2005, 3:24:48 PM (20 years ago)
Author:
cmv
Message:

spiapp cmd "newdt" pour creer une DataTable
spiapp cmd "n/read" modifier pour remplir aussi des DataTable (option -dt)
NtFromASCIIFile modifier pour remplir aussi des DataTable

mais le decodage FillFromASCII de la classe DataTAble est encore a faire

cmv 01/06/2005

Location:
trunk/SophyaPI/PIext
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaPI/PIext/basexecut.cc

    r2781 r2792  
    2222#include "ntuple.h"
    2323#include "generaldata.h"
     24#include "datatable.h"
    2425
    2526#ifdef SANS_EVOLPLANCK
     
    284285  mObjMgr->AddObj(nt,tokens[0]);
    285286  }
     287
     288// Creation de DataTable
     289else if (kw == "newdt") {
     290  if(tokens.size() < 2)
     291    {cout<<"Usage: newdt name v1:t1 v2:t2 ... vn:tn / newdt name nvar"<<endl; return(0);}
     292  DataTable* dt = new DataTable();
     293  const char *c = tokens[1].c_str();
     294  if(isdigit(c[0])) {
     295    int n = atoi(tokens[1].c_str());
     296    if(n<=0 || n>=10000) {
     297      cout<<"newdt name nvar : nvar="<<n<<" must be an positive integer<10000"<<endl;
     298      delete dt; return(0);
     299    }
     300    for(int i=0;i<n;i++) {
     301      char str[16]; sprintf(str,"v%d",i);
     302      dt->AddDoubleColumn(str);
     303    }
     304  } else {
     305    for(int i=1;i<tokens.size();i++) {
     306      string vname = tokens[i];
     307      uint_4 p = tokens[i].find(':');
     308      if(p<tokens[i].size()) vname = vname.substr(0,p);
     309      if(vname.size()<1) {
     310        cout<<"Zero size name for variable: tokens["<<i<<"]="<<tokens[i]<<endl;
     311        delete dt; return(0);
     312      }
     313      if     (tokens[i].find(":r4")<tokens[i].size()) dt->AddFloatColumn(vname);
     314      else if(tokens[i].find(":r8")<tokens[i].size()) dt->AddDoubleColumn(vname);
     315      else if(tokens[i].find(":i4")<tokens[i].size()) dt->AddIntegerColumn(vname);
     316      else if(tokens[i].find(":i8")<tokens[i].size()) dt->AddLongColumn(vname);
     317      else if(tokens[i].find(":s") <tokens[i].size()) dt->AddStringColumn(vname);
     318      else                                            dt->AddDoubleColumn(vname);
     319    }
     320  }
     321  mObjMgr->AddObj(dt,tokens[0]);
     322}
    286323
    287324// Creation de GeneralFitData
     
    889926mpiac->RegisterCommand(kw, usage, this, "FileIO");
    890927kw = "ntfrascii";
    891 usage = "Fills an existing NTuple from ASCII table file";
     928usage = "Fills an existing NTuple or DataTable from ASCII table file";
    892929usage += "\n Usage: ntfrascii nt_name file_name [def_init_val]";
    893930usage += "\n  Related commands: ntloop fillnt ";
     
    9821019kw = "newh1d";
    9831020usage = "Creates a 1D histogramm \n Usage: newh1d name xmin xmax nbin";
    984 usage += "\n  Related commands: newh2d  newprof[e] newnt  newgfd "; 
     1021usage += "\n  Related commands: newh2d  newprof[e] newdt newnt  newgfd "; 
    9851022mpiac->RegisterCommand(kw, usage, this, "Objects");
    9861023kw = "newh2d";
    9871024usage = "Creates a 2D histogramm \n Usage: newh2d name xmin xmax nbinx ymin ymax nbiny";
    988 usage += "\n  Related commands: newh1d  newprof[e] newnt  newgfd "; 
     1025usage += "\n  Related commands: newh1d  newprof[e] newdt newnt  newgfd "; 
    9891026mpiac->RegisterCommand(kw, usage, this, "Objects");
    9901027kw = "newprof";
    9911028usage = "Creates a profile histogramm \n Usage: newprof name xmin xmax nbin [ymin ymax]";
    9921029usage += "\n  Errors represent the data spread in the X bin "; 
    993 usage += "\n  Related commands: newh1d  newh2d newprofe newnt newgfd "; 
     1030usage += "\n  Related commands: newh1d  newh2d newprofe newdt newnt newgfd "; 
    9941031mpiac->RegisterCommand(kw, usage, this, "Objects");
    9951032kw = "newprofe";
    9961033usage = "Creates a profile histogramm \n Usage: newprofe name xmin xmax nbin [ymin ymax]";
    9971034usage += "\n  Errors represent the error on the data mean in the X bin "; 
    998 usage += "\n  Related commands: newh1d  newh2d newprof newnt newgfd "; 
     1035usage += "\n  Related commands: newh1d  newh2d newprof newdt newnt newgfd "; 
    9991036mpiac->RegisterCommand(kw, usage, this, "Objects");
    10001037kw = "newnt";
    10011038usage = "Creates a ntuple \n Usage: newnt name v1 v2 v3 .. vn";
    10021039usage += "\n        newnt name nvar"; 
    1003 usage += "\n  Related commands: newh1d  newh2d newprof[e] newgfd "; 
     1040usage += "\n  Related commands: newdt newh1d  newh2d newprof[e] newgfd "; 
     1041mpiac->RegisterCommand(kw, usage, this, "Objects");
     1042kw = "newdt";
     1043usage = "Creates a datatable \n Usage: newdt name v1:t1 v2:t2 v3:t3 .. vn:tn";
     1044usage += "\n        newdt name nvar"; 
     1045usage += "\n    vi : variable name"; 
     1046usage += "\n    ti : variable type"; 
     1047usage += "\n         r8,r4 for 8 and 4 bytes float"; 
     1048usage += "\n         i8,i4 for 8 and 4 bytes signed integer"; 
     1049usage += "\n         s for string"; 
     1050usage += "\n  Related commands: newnt newh1d  newh2d newprof[e] newgfd"; 
    10041051mpiac->RegisterCommand(kw, usage, this, "Objects");
    10051052kw = "newgfd";
    10061053usage = "Creates GeneralFit Data object \n Usage: newgfd nvar nalloc [errx(0/1)]";
    1007 usage += "\n  Related commands: newh1d  newh2d  newprof[e] newnt "; 
     1054usage += "\n  Related commands: newh1d  newh2d  newprof[e] newdt newnt "; 
    10081055mpiac->RegisterCommand(kw, usage, this, "Objects");
    10091056kw = "newvec";
  • trunk/SophyaPI/PIext/pawexecut.cc

    r2775 r2792  
    1313#include "histerr.h"
    1414#include "ntuple.h"
     15#include "datatable.h"
    1516
    1617#include "pawexecut.h"
     
    99100
    100101kw = "n/read";
    101 usage = "Read columns in an ASCII file and fill a NTuple";
     102usage = "Read columns in an ASCII file and fill a NTuple or a DataTable";
    102103usage += "\n n/read nt fascii [options] var_1,c_1 var_2,c_2 ... var_n,c_n ";
    103 usage += "\n var_i,c_i : ntuple variable name, associated column in ASCII file [0,n[";
     104usage += "\n nt : NTuple or DataTable (see options) name";
     105usage += "\n var_i,c_i : variable name, associated column in ASCII file [0,n[";
    104106usage += "\n where [options] are:";
     107usage += "\n   \"-dt\": create a DataTable of double instead of a NTuple";
    105108usage += "\n   \"=s\": separator character is \'s\' (could be \"\t\")";
    106109usage += "\n   \"-^abcd\": do not read lines beginning with string \"abcd\" ";
     
    655658 string nament = tokens[0];
    656659 string nameascii = tokens[1];
     660 bool create_datatable = false;
    657661 vector<string> donotreadbeg;
    658662 vector<string> donotreadin;
     
    667671   int lc = tokens[i].size();
    668672   if(lc<2) continue;
     673   if(tokens[i].find("-dt")==0) { // create DataTable instead of NTuple
     674     create_datatable = true;
     675     continue;
     676   }
    669677   const char *c = tokens[i].c_str();
    670678   if(c[0]=='=') { // Separator
     
    739747 }
    740748
    741  // Creation du NTuple
    742  char** ntvn = new char*[nvar];
    743  for(int i=0;i<nvar;i++) ntvn[i] = const_cast<char *>(varname[i].c_str());
     749 // Creation du NTuple ou de la DataTable
     750 NTuple *nt = NULL;
     751 DataTable *dt = NULL;
     752 if(!create_datatable) { //create NTuple
     753   char** ntvn = new char*[nvar];
     754   for(int i=0;i<nvar;i++) ntvn[i] = const_cast<char *>(varname[i].c_str());
     755   nt = new NTuple(nvar,ntvn);
     756   delete [] ntvn;
     757 } else { //create DataTable
     758   dt = new DataTable();
     759   for(int i=0;i<nvar;i++) dt->AddDoubleColumn(varname[i]);
     760 }
    744761 r_8 *xnt = new r_8[nvar];
    745  NTuple *nt = new NTuple(nvar,ntvn);
    746762
    747763 // Read file
     
    808824   if(lvs<numcolmaxi) continue; // Pas assez de champs decodes, mauvaise ligne
    809825
    810    // Remplissage du NTuple
     826   // Remplissage du NTuple ou de la DataTable
    811827   for(int i=0;i<nvar;i++) {
    812828     xnt[i] = 0.;
     
    815831     xnt[i] = atof(vs[ic].c_str());
    816832   }
    817    nt->Fill(xnt);
     833   if(nt)      nt->Fill(xnt);
     834   else if(dt) dt->Fill(xnt);
    818835   //cout<<"...xnt"; for(int i=0;i<nvar;i++) cout<<" "<<xnt[i]; cout<<endl;
    819836
    820837 }
     838 int_4 nentries = (nt)? nt->NEntry(): dt->NEntry();
    821839 cout<<"n_read: "<<nline<<" lines in file, "
    822840     <<nlinecom<<" commentary, "
    823      <<nt->NEntry()<<" Ntuple entries"<<endl;
    824 
    825  // On sauve le NTuple si besoin, on ferme et detruit ce qu'il faut
     841     <<nentries<<" object entries"<<endl;
     842
     843 // On sauve le NTuple/DataTable si besoin, on ferme et detruit ce qu'il faut
    826844 NamedObjMgr omg;
    827  if(nt->NEntry()>0) omg.AddObj(nt,nament); else delete nt;
    828  delete [] ntvn;
     845 if(nentries>0) {
     846   if(nt) omg.AddObj(nt,nament);
     847   if(dt) omg.AddObj(dt,nament);
     848 } else {
     849   if(nt) delete nt;
     850   if(dt) delete dt;
     851 }
    829852 delete [] xnt;
    830853 delete [] line;
  • trunk/SophyaPI/PIext/servnobjm.cc

    r2781 r2792  
    3434#include "histos.h"
    3535#include "histos2.h"
     36#include "hisprof.h"
    3637#include "ntuple.h"
    37 #include "hisprof.h"
     38#include "datatable.h"
    3839
    3940#include "piyfxdrw.h"
     
    823824/* --Methode-- */
    824825void Services2NObjMgr::NtFromASCIIFile(string& nom,string& filename,double def_val)
    825 //      Pour remplir un ntuple "nom" existant a partir du fichier
     826//      Pour remplir un NTuple/DataTable "nom" existant a partir du fichier
    826827//      ASCII table "filename". Si il y a plus de variables dans le
    827828//      ntuple que dans le fichier "filename",
    828 //      les sur-numeraires sont mises a "def_val" par defaut.
     829//      les sur-numeraires numeriques sont mises a "def_val" par defaut.
    829830{
    830831AnyDataObj* mobj = MyObjMgr()->GetObj(nom);
    831 if(mobj == NULL)
    832   {cout<<"NtFromASCIIFile() Error, object "<<nom<<" not existing"<<endl;
    833    return;}
    834 if(typeid(*mobj) != typeid(NTuple))
    835   {cout<<"NtFromASCIIFile() Error, object "<<nom<<" not an NTuple"<<endl;
    836    return;}
    837 if (!mImgapp)  return;
    838 
    839 NTuple* nt = (NTuple*) mobj;
    840 nt->FillFromASCIIFile(filename, def_val);
     832if(mobj == NULL) {
     833  cout<<"NtFromASCIIFile() Error, object "<<nom<<" not existing"<<endl;
     834  return;
     835}
     836
     837NTuple* nt = NULL;
     838DataTable* dt = NULL;
     839if(typeid(*mobj) == typeid(NTuple))         nt = (NTuple*) mobj;
     840else if(typeid(*mobj) == typeid(DataTable)) dt = (DataTable*) mobj;
     841
     842if(nt==NULL && dt==NULL) {
     843  cout<<"NtFromASCIIFile() Error, object "<<nom<<" not an NTuple nor a DataTable"<<endl;
     844  return;
     845}
     846if (!mImgapp)  return;
     847
     848if(nt)      nt->FillFromASCIIFile(filename, def_val);
     849else if(dt) dt->FillFromASCIIFile(filename);
    841850return;
    842851}
Note: See TracChangeset for help on using the changeset viewer.