Changeset 357 in Sophya for trunk/SophyaPI/PIext/servnobjm.cc


Ignore:
Timestamp:
Aug 5, 1999, 8:08:07 PM (26 years ago)
Author:
ercodmgr
Message:

Ajout de parametres de Loop (plot2d, ...), Ajout de fonction de
remplissage de matrices et vecteurs a partir de NTuples,
Rationalisation des commandes (arguments par defauts ...) Reza 6/8/99

File:
1 edited

Legend:

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

    r349 r357  
    203203  if (nom.length() < 1) {
    204204     titre = "Function f(x)";
    205      nom = "/tmp/func";
     205     nom = "/home/func";
    206206    }
    207207  else titre = nom;
     
    265265  if (nom.length() < 1) {
    266266     titre = "Function f(x,y)";
    267      nom = "/tmp/func2d";
     267     nom = "/home/func2d";
    268268    }
    269269  else titre = nom;
     
    287287void Services2NObjMgr::DisplayPoints2D(string& nom,  string& expx, string& expy,
    288288                                       string& experrx, string& experry,
    289                                        string& expcut, string dopt)
     289                                       string& expcut, string dopt, string loop)
    290290{
    291291NObjMgrAdapter* obja=NULL;
     
    305305else {  haserr = false;  experrx = experry = "0."; nt = new NTuple(2, ntn); }
    306306
    307 ComputeExpressions(obja, expx, expy, experrx, experry, expcut, nt, NULL, NULL);
     307ComputeExpressions(obja, expx, expy, experrx, experry, expcut, loop, nt, NULL, NULL);
    308308
    309309if (nt->NEntry() < 1) {
     
    330330/* --Methode-- */
    331331void Services2NObjMgr::DisplayPoints3D(string& nom,  string& expx, string& expy,
    332                                        string& expz, string& expcut, string dopt)
     332                                       string& expz, string& expcut, string dopt, string loop)
    333333{
    334334NObjMgrAdapter* obja=NULL;
     
    344344
    345345string expwt = "1.";
    346 ComputeExpressions(obja, expx, expy, expz, expwt, expcut, nt, NULL, NULL);
     346ComputeExpressions(obja, expx, expy, expz, expwt, expcut, loop, nt, NULL, NULL);
    347347
    348348if (nt->NEntry() < 1) {
     
    372372/* --Methode-- */
    373373void Services2NObjMgr::DisplayPoints2DW(string& nom, string& expx, string& expy,
    374                                         string& expwt, string& expcut, string dopt)
     374                                        string& expwt, string& expcut, string dopt, string loop)
    375375{
    376376NObjMgrAdapter* obja=NULL;
     
    386386
    387387string exp = "1.";
    388 ComputeExpressions(obja, expx, expy, expwt, exp, expcut, nt, NULL, NULL);
     388ComputeExpressions(obja, expx, expy, expwt, exp, expcut, loop, nt, NULL, NULL);
    389389
    390390if (nt->NEntry() < 1) {
     
    408408/* --Methode-- */
    409409void Services2NObjMgr::ProjectH1(string& nom, string& expx, string& expwt,
    410                                  string& expcut, string& nomh1, string dopt)
     410                                 string& expcut, string& nomh1, string dopt, string loop)
    411411{
    412412NObjMgrAdapter* obja=NULL;
     
    429429  }
    430430string expz = "0.";   
    431 ComputeExpressions(obja, expx, expwt, expz, expwt, expcut, nt, h1, NULL);
     431ComputeExpressions(obja, expx, expwt, expz, expwt, expcut, loop, nt, h1, NULL);
    432432
    433433if ((!h1) && (!nt)) return;
     
    457457/* --Methode-- */
    458458void Services2NObjMgr::ProjectH2(string& nom, string& expx, string& expy, string& expwt,
    459                                  string& expcut, string& nomh2, string dopt)
     459                                 string& expcut, string& nomh2, string dopt, string loop)
    460460{
    461461NObjMgrAdapter* obja=NULL;
     
    478478  }
    479479string expz = "0.";   
    480 ComputeExpressions(obja, expx, expy, expwt, expwt, expcut, nt, NULL, h2);
     480ComputeExpressions(obja, expx, expy, expwt, expwt, expcut, loop, nt, NULL, h2);
    481481
    482482if ((!h2) && (!nt)) return;
     
    508508/* --Methode-- cmv 13/10/98 */
    509509void Services2NObjMgr::ProjectHProf(string& nom, string& expx, string& expy, string& expwt,
    510                                     string& expcut, string& nomprof, string dopt)
    511 //      Pour remplir un ``GeneralFitData'' a partir de divers objets:
     510                                    string& expcut, string& nomprof, string dopt, string loop)
     511//      Pour remplir un ``GeneralFitData'' a partir de divers objets: 
    512512//| nom = nom de l'objet a projeter dans un HProf.
    513513//| expx = expression X de definition du bin.
     
    539539}
    540540string expz = "0.";
    541 ComputeExpressions(obja, expx, expy, expwt, expwt, expcut, nt, NULL, NULL, hprof);
     541ComputeExpressions(obja, expx, expy, expwt, expwt, expcut, loop, nt, NULL, NULL, hprof);
    542542
    543543if((!hprof) && (!nt)) return;
     
    566566}
    567567
    568 /* --Methode-- */
    569 void Services2NObjMgr::FillVect(string& nom, string& expx, string& expcut,
    570                                 string& nomvec, string dopt)
     568
     569/* --Methode-- */
     570void Services2NObjMgr::FillVect(string& nom, string& expx, string& expv,
     571                                   string& expcut, string& nomvec, string dopt, string loop)
    571572{
    572573NObjMgrAdapter* obja=NULL;
    573574obja = mOmg->GetObjAdapter(nom);
    574575if (obja == NULL) {
    575   cout << "Services2NObjMgr::FillVect() Error , Pas d'objet de nom " << nom << endl;
     576  cout << "Services2NObjMgr::FillVect() Error , No such object: " << nom << endl;
    576577  return;
    577578  }
    578579if (!mImgapp)  return;
    579580
     581Vector* v1 = NULL;
     582AnyDataObj* ov = NULL;
     583ov=mOmg->GetObj(nomvec);
     584if (ov != NULL) v1 = dynamic_cast<Vector *>(ov);
     585if (v1 == NULL) {
     586  cout << "Services2NObjMgr::FillVect() Error , No such object or not a vector: " << nomvec << endl;
     587  return;
     588  }
     589
     590char* ntn[2]= {"vi", "vv"};
     591NTuple* nt = new NTuple(2,ntn);  // Creation NTuple
     592
     593string expz = "0.";   
     594ComputeExpressions(obja, expx, expv, expz, expz, expcut, loop, nt);
     595
     596if (!nt) return;
     597if (nt->NEntry() < 1) {
     598  cout << "Services2NObjMgr::FillVect() Warning  Zero points satisfy cut !" << endl;
     599  delete nt;
     600  return;
     601  }
     602
     603  int i,k;
     604  double* xn;
     605  for(k=0; k<nt->NEntry(); k++)    {
     606    xn = nt->GetLineD(k);
     607    i = xn[0]+0.5;
     608    if ( (i < 0) || i >= v1->NElts() ) continue;
     609    (*v1)(i) = xn[1];
     610    }
     611  delete nt;
     612 
     613
     614mOmg->DisplayObj(nomvec, dopt);
     615return; 
     616}
     617
     618/* --Methode-- */
     619void Services2NObjMgr::FillMatx(string& nom, string& expx, string& expy, string& expv,
     620                                string& expcut, string& nommtx, string dopt, string loop)
     621{
     622NObjMgrAdapter* obja=NULL;
     623obja = mOmg->GetObjAdapter(nom);
     624if (obja == NULL) {
     625  cout << "Services2NObjMgr::FillMatx() Error , No such objet " << nom << endl;
     626  return;
     627  }
     628if (!mImgapp)  return;
     629
     630Matrix* mtx = NULL;
     631AnyDataObj* om = NULL;
     632om=mOmg->GetObj(nommtx);
     633if (om != NULL) mtx = dynamic_cast<Matrix *>(om);
     634if (mtx == NULL) {
     635  cout << "Services2NObjMgr::FillMatx() Error , No such object or not a matrix " << nommtx << endl;
     636  return;
     637  }
     638
     639char* ntn[3]= {"mi", "mj", "mv"};
     640NTuple* nt = new NTuple(3,ntn);  // Creation NTuple
     641
     642string expz = "0.";   
     643ComputeExpressions(obja, expx, expy, expv, expz, expcut, loop, nt);
     644
     645if (!nt) return;
     646if (nt->NEntry() < 1) {
     647  cout << "Services2NObjMgr::FillMatx() Warning  Zero points satisfy cut !" << endl;
     648  delete nt;
     649  return;
     650  }
     651
     652  int ic, jl, k;
     653  double* xn;
     654  for(k=0; k<nt->NEntry(); k++)    {
     655    xn = nt->GetLineD(k);
     656    ic = xn[0]+0.5;
     657    jl = xn[1]+0.5;
     658    if ( (ic < 0) || ic >= mtx->NCol() ) continue;
     659    if ( (jl < 0) || jl >= mtx->NRows() ) continue;
     660    (*mtx)(jl, ic) = xn[2];
     661    }
     662  delete nt;
     663 
     664
     665mOmg->DisplayObj(nommtx, dopt);
     666return; 
     667
     668}
     669
     670/* --Methode-- */
     671void Services2NObjMgr::ExpressionToVector(string& nom, string& expx, string& expcut,
     672                                          string& nomvec, string dopt, string loop)
     673{
     674NObjMgrAdapter* obja=NULL;
     675obja = mOmg->GetObjAdapter(nom);
     676if (obja == NULL) {
     677  cout << "Services2NObjMgr::ExpressionToVector() Error , Pas d'objet de nom " << nom << endl;
     678  return;
     679  }
     680if (!mImgapp)  return;
     681
    580682NTuple* nt = NULL;
    581 if (nomvec.length() < 1) nomvec = "/tmp/fillvec";
     683if (nomvec.length() < 1) nomvec = "/tmp/expvec";
    582684
    583685char* ntn[2]= {"vecval", "vecwt"};
     
    586688string expwt = "1.";
    587689string expz = "0.";   
    588 ComputeExpressions(obja, expx, expz, expz, expwt, expcut, nt, NULL, NULL);
     690ComputeExpressions(obja, expx, expz, expz, expwt, expcut, loop, nt, NULL, NULL);
    589691
    590692if (!nt) return;
    591693if (nt->NEntry() < 1) {
    592   cout << "Services2NObjMgr::FillVect() Warning  Zero points satisfy cut !" << endl;
     694  cout << "Services2NObjMgr::ExpressionToVector() Warning  Zero points satisfy cut !" << endl;
    593695  delete nt;
    594696  return;
     
    610712/* --Methode-- */
    611713void Services2NObjMgr::FillNT(string& nom, string& expx, string& expy, string& expz,
    612                               string& expt, string& expcut, string& nomnt)
     714                              string& expt, string& expcut, string& nomnt, string loop)
    613715{
    614716NObjMgrAdapter* obja=NULL;
     
    638740  }
    639741
    640 ComputeExpressions(obja, expx, expy, expz, expt, expcut, nt, NULL, NULL);
     742ComputeExpressions(obja, expx, expy, expz, expt, expcut, loop, nt, NULL, NULL);
    641743
    642744if (fgnnt) mOmg->AddObj(nt, nomnt);
     
    647749/* --Methode-- */
    648750void Services2NObjMgr::FillNTFrCFile(string & nom, string const & fname,
    649                                      string const & funcname, string & nomnt,
    650                                      int nl1, int nl2)
     751                                     string const & funcname, string & nomnt, string loop)
    651752{
    652753if (!mImgapp)  return;
     
    703804mImgapp->RedirectStdOutErr(false);
    704805
     806int k1,k2,dk;
     807k1 = 0;  k2 = objnt->NbLines();  dk = 1;
     808DecodeLoopParameters(loop, k1, k2, dk);
     809if (k1 < 0) k1 = 0;
     810if (k2 < 0) k2 = objnt->NbLines();
     811if (k2 > objnt->NbLines()) k2 = objnt->NbLines();
     812if (dk <= 0) dk = 1;
     813
    705814TRY  {
    706815  double* xn;
    707   if (nl1 < 0) nl1 = 0;
    708   if (nl2 < 0) nl2 = objnt->NbLines();
    709   if (nl2 > objnt->NbLines()) nl2 = objnt->NbLines();
    710   int kmax = nl2;
    711   for(k=nl1; k<kmax; k++)    {
     816  int kmax = k2;
     817  for(k=k1; k<kmax; k+=dk)    {
    712818    xn = objnt->GetLineD(k);
    713819    if (f(xn, xnt, xnt+1, xnt+2, xnt+3, k, kmax) != 0) {
     
    804910/* --Methode-- cmv 13/10/98 */
    805911void Services2NObjMgr::FillGFD(string& nom, string& expx, string& expy, string& expz,
    806                                string& experr, string& expcut, string& nomgfd)
     912                               string& experr, string& expcut, string& nomgfd, string loop)
    807913//      Pour remplir un ``GeneralFitData'' a partir de divers objets:
    808914//| nom = nom de l'objet a transcrire selon 1D: Z=f(X) ou 2D: Z=f(X,Y) .
     
    832938
    833939// Remplissage NTuple buffer
    834 ComputeExpressions(obja, expx, expy, expz, experr, expcut, nt, NULL, NULL);
     940ComputeExpressions(obja, expx, expy, expz, experr, expcut, loop, nt, NULL, NULL);
    835941if(nt->NEntry() < 1)
    836942  {cout<<"Services2NObjMgr::FillGFD() Warning  Zero points satisfy cut !"<<endl;
     
    13391445/* --Methode-- */
    13401446void Services2NObjMgr::ComputeExpressions(NObjMgrAdapter* obja, string& expx,
    1341                           string& expy, string& expz, string& expt, string& expcut,
     1447                          string& expy, string& expz, string& expt, string& expcut, string& loop,
    13421448                          NTuple* nt, Histo* h1, Histo2D* h2, HProf* hp)
    13431449{
     
    13601466int i,k;
    13611467for(i=0; i<10; i++) xnt[i] = 0.;
    1362 
     1468int k1,k2,dk;
     1469k1 = 0;  k2 = objnt->NbLines();  dk = 1;
     1470DecodeLoopParameters(loop, k1, k2, dk);
     1471if (k1 < 0) k1 = 0;
     1472if (k2 < 0) k2 = objnt->NbLines();
     1473if (k2 > objnt->NbLines()) k2 = objnt->NbLines();
     1474if (dk <= 0) dk = 1;
    13631475TRY  {
    13641476  double* xn;
    1365   for(k=0; k<objnt->NbLines(); k++)    {
     1477  for(k=k1; k<k2; k += dk)    {
    13661478    xn = objnt->GetLineD(k);
    13671479    if (f(xn, xnt, xnt+1, xnt+2, xnt+3) != 0) {
     
    14711583}
    14721584
     1585// Fonction static
     1586/* --Methode-- */
     1587void Services2NObjMgr::DecodeLoopParameters(string& loop, int& i1, int& i2, int& di)
     1588{
     1589// Decode des paramatres de boucle for(int i=i1; i<i2; i+=di) specifies
     1590// sous forme i1[:i2[:di]]
     1591// cout << "LoopParam() " << loop << " I1=" << i1 << " I2=" << i2 << " DI=" << di;
     1592size_t l = loop.length();
     1593if (l < 1) return;
     1594size_t p = loop.find(':');
     1595if (p >= l) { i1 = atoi(loop.c_str()); return; }
     1596i1 = atoi(loop.substr(0, p).c_str());
     1597string aa = loop.substr(p+1);
     1598p = aa.find(':');
     1599if (p < aa.length() ) {
     1600  i2 = atoi(aa.substr(0,p).c_str());
     1601  di = atoi(aa.substr(p+1).c_str());
     1602  }
     1603else i2 = atoi(aa.c_str());
     1604// cout << "-> I1= " << i1 << " I2= " << i2 << " DI= " << di << endl;
     1605return;
     1606}
    14731607
    14741608/* --Methode-- */
Note: See TracChangeset for help on using the changeset viewer.