Changeset 2305 in Sophya
- Timestamp:
- Jan 8, 2003, 6:18:56 PM (23 years ago)
- Location:
- trunk/SophyaPI/PIext
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaPI/PIext/basexecut.cc
r2296 r2305 14 14 #include "nobjmgr.h" 15 15 #include "servnobjm.h" 16 #include "nomgadapter.h" 16 17 #include "piyfxdrw.h" 17 18 … … 528 529 } 529 530 } 530 531 // ----- Vecteur/NTuple <> Lignes/variables interpreteur 532 // Creation de vecteur depuis le contenu de la ligne 533 else if (kw == "line2vec") { 534 if (tokens.size() < 2) { 535 cout << "Usage: line2vec vecname v0 v1 v2 ... " << endl; return(0); 536 } 537 int vsz = tokens.size()-1; 538 Vector* v = new Vector(vsz); 539 for(int kkv=0; kkv<vsz; kkv++) (*v)(kkv) = atof(tokens[kkv+1].c_str()); 540 mObjMgr->AddObj(v, tokens[0]); 541 } 542 // Remplissage de NTuple depuis la ligne 543 else if (kw == "line2nt") { 544 if (tokens.size() < 2) { 545 cout << "Usage: line2nt ntname col0 col1 ..." << endl; return(0); 546 } 547 AnyDataObj* obj; 548 obj = mObjMgr->GetObj(tokens[0]); 549 if(obj == NULL) { 550 cerr << "line2nt Error , No such object " << tokens[0] << endl; 551 return(0); 552 } 553 NTuple* nt = dynamic_cast<NTuple *>(obj); 554 if(nt == NULL) { 555 cerr << "line2nt Error " << tokens[0] << " not an NTuple ! " << endl; 556 return(0); 557 } 558 if (nt->NbColumns() < 1) { 559 cerr << "line2nt Error: NbColumns < 1" << endl; 560 return(0); 561 } 562 r_4* xnt = new r_4[ nt->NbColumns() ]; 563 int kkx; 564 for(kkx=0; kkx<nt->NbColumns(); kkx++) { 565 if (kkx < tokens.size()-1) xnt[kkx] = atof(tokens[kkx+1].c_str()); 566 else xnt[kkx] = 0.; 567 } 568 nt->Fill(xnt); 569 delete[] xnt; 570 } 571 // Contenu du vecteur vers variable interpreteur 572 #define MAXNWORDSO2V 32768 573 else if (kw == "vec2var") { 574 if (tokens.size() < 2) { 575 cout << "Usage: vec2var vecname varname [loop_param start:end:step] " << endl; return(0); 576 } 577 AnyDataObj* obj; 578 obj = mObjMgr->GetObj(tokens[0]); 579 if(obj == NULL) { 580 cerr << "vec2var Error , No such object " << tokens[0] << endl; 581 return(0); 582 } 583 Vector* v = dynamic_cast<Vector *>(obj); 584 if(v == NULL) { 585 cerr << "vec2var Error " << tokens[0] << " not a Vector ! " << endl; 586 return(0); 587 } 588 int kks = 0; 589 int kke = v->NElts(); 590 int kkp = 1; 591 if (tokens.size() > 2) Services2NObjMgr::DecodeLoopParameters(tokens[2], kks, kke, kkp); 592 if (kks < 0) kks = 0; 593 if (kke > v->NElts()) kke = v->NElts(); 594 if (kkp < 1) kkp = 1; 595 int nelt = (kke-kks-1)/kkp; 596 if (nelt > MAXNWORDSO2V) { 597 nelt = MAXNWORDSO2V; 598 cout << "vec2var Warning: Only " << nelt 599 << " elements will be converted to string" << endl; 600 kke = kks+nelt*kkp; 601 } 602 string v2str; 603 char buff[64]; 604 for(int kkv=kks; kkv<kke; kkv+=kkp) { 605 sprintf(buff, "%lg ", (*v)(kkv)); 606 v2str += buff; 607 } 608 609 mObjMgr->SetVar(tokens[1], v2str); 610 } 611 // Une ligne du NTuple/NTupleInterface -> variable interpreteur 612 else if ((kw == "ntline2var") || (kw == "ntcol2var")) { 613 if (tokens.size() < 3) { 614 cout << "Usage: ntline/col2var objname line_number varname" << endl; 615 return(0); 616 } 617 NObjMgrAdapter* oa = mObjMgr->GetObjAdapter(tokens[0]); 618 if(oa == NULL) { 619 cerr << "ntline/col2var Error , No such object " << tokens[0] << endl; 620 return(0); 621 } 622 bool adel = false; 623 NTupleInterface* nti = oa->GetNTupleInterface(adel); 624 if(nti == NULL) { 625 cerr << "ntline/col2var Error: objet" << tokens[0] << " has no NTupleInterface" << endl; 626 return(0); 627 } 628 629 if (nti->NbColumns() < 1 || nti->NbLines() < 1) { 630 cerr << "ntline/col2var Error: NbColumns or NbLines < 1" << endl; 631 return(0); 632 } 633 string v2str; 634 char buff[64]; 635 if (kw == "ntline2var") { 636 int numline = atoi(tokens[1].c_str()); 637 if ( (numline >= nti->NbLines()) || (numline < 0) ) { 638 cerr << "ntline2var Error: numline" << tokens[1] << " out of bounds" << endl; 639 return(0); 640 } 641 r_8* dline = nti->GetLineD(numline); 642 for(int kkv=0; kkv<nti->NbColumns(); kkv++) { 643 sprintf(buff, "%lg ", dline[kkv]); 644 v2str += buff; 645 } 646 } 647 else { 648 int numcol = atoi(tokens[1].c_str()); 649 if ( (numcol >= nti->NbColumns()) || (numcol < 0) ) { 650 cerr << "ntcol2var Error: numcol" << tokens[1] << " out of bounds" << endl; 651 return(0); 652 } 653 int kks = 0; 654 int kke = nti->NbLines(); 655 int kkp = 1; 656 if (tokens.size() > 3) Services2NObjMgr::DecodeLoopParameters(tokens[3], kks, kke, kkp); 657 if (kks < 0) kks = 0; 658 if (kke > nti->NbLines()) kke = nti->NbLines(); 659 if (kkp < 1) kkp = 1; 660 int nelt = (kke-kks-1)/kkp; 661 if (nelt > MAXNWORDSO2V) { 662 nelt = MAXNWORDSO2V; 663 cout << "ntcol2var Warning: Only " << nelt 664 << " lines " << " will be converted to string" << endl; 665 kke = kks+nelt*kkp; 666 } 667 r_8* dline; 668 for(int kkl=kks; kkl<kke; kkl+=kkp) { 669 dline = nti->GetLineD(kkl); 670 sprintf(buff, "%lg ", dline[numcol]); 671 v2str += buff; 672 } 673 } 674 mObjMgr->SetVar(tokens[2], v2str); 675 if (adel) delete nti; 676 } 677 678 // ------------------------------------------------------- 531 679 // Copie d'objets 532 680 else if ( (kw == "copy") || (kw == "cp") ) { … … 1378 1526 kw = "newvec"; 1379 1527 usage = "Creates (and optionaly fills) a vector \n Usage: newvec name size [f(i) [dopt] ] "; 1380 usage += "\n Related commands: newmtx ";1528 usage += "\n Related commands: newmtx line2vec"; 1381 1529 mpiac->RegisterCommand(kw, usage, this, "Objects"); 1382 1530 kw = "newmtx"; … … 1384 1532 usage +=" Usage: newmtx name sizeX(Col) sizeY(Lines) [f(i,j) [dopt] ] "; 1385 1533 usage += "\n Related commands: newvec"; 1534 mpiac->RegisterCommand(kw, usage, this, "Objects"); 1535 kw = "line2vec"; 1536 usage = "Creates a vector from the line \n"; 1537 usage += " Usage: line2vec vecname v0 v1 v2 ... \n"; 1538 usage += " Related commands: newvec line2nt"; 1539 mpiac->RegisterCommand(kw, usage, this, "Objects"); 1540 kw = "line2nt"; 1541 usage = "Fills (append) an NTuple from the line content \n"; 1542 usage += " Usage: line2nt ntname col0 col1 ... \n"; 1543 usage += " Related commands: newnt line2vec ntline2var ntcol2var"; 1544 mpiac->RegisterCommand(kw, usage, this, "Objects"); 1545 kw = "vec2var"; 1546 usage = "Vector content to an interpreter variable varname = 'v0 v1 v2 ...' \n"; 1547 usage += " Usage: line2vec vecname varname [LoopParam start:end[:step] ]\n"; 1548 usage += " Related commands: line2vec ntline2var"; 1549 mpiac->RegisterCommand(kw, usage, this, "Objects"); 1550 kw = "ntline2var"; 1551 usage = "Object NTupleInterface line to an interpreter variable \n"; 1552 usage += " Usage: ntline2var objname line_number varname \n"; 1553 usage += " Related commands: vec2var ntcol2var"; 1554 mpiac->RegisterCommand(kw, usage, this, "Objects"); 1555 kw = "ntcol2var"; 1556 usage = "Object NTupleInterface column to an interpreter variable \n"; 1557 usage += " Usage: ntline2var objname column_number varname [LoopParam start:end[:step] ] \n"; 1558 usage += " Related commands: vec2var ntline2var"; 1386 1559 mpiac->RegisterCommand(kw, usage, this, "Objects"); 1387 1560 -
trunk/SophyaPI/PIext/piacmd.cc
r2298 r2305 417 417 cmdhgrp["All"] = 0; 418 418 cmdgrpid = 1; 419 cmdhgrp[" Commands"] = 1;419 cmdhgrp["PIACmd"] = 1; 420 420 helpwin = new PIAHelpWind(app, this); 421 421 helpwin->AddHelpGroup("All", 0); 422 helpwin->AddHelpGroup(" Commands", 1);423 424 string kw = " piacmd";422 helpwin->AddHelpGroup("PIACmd", 1); 423 424 string kw = "Interpreter"; 425 425 string usage; 426 426 usage = ">>> (piacmd) Interpreter's keywords : \n"; … … 430 430 usage += " > unset varname # clear variable definition \n"; 431 431 usage += " > rpneval varname RPNExpression # Reverse Polish Notation evaluation \n"; 432 usage += " > varname = 'string string ...' # To set a variable, $varname \n"; 433 usage += " > varname = RPNExpression # RPN evaluation / result -> varname \n"; 432 434 usage += " > echo string # output string \n"; 433 435 usage += " > echo2file filename string # Append the string to the specified file \n"; … … 453 455 usage += " > helpwindow # Displays help window \n"; 454 456 usage += " > timingon timingoff traceon traceoff \n"; 455 string grp = "Commands"; 457 string grp = "PIACmd"; 458 RegisterHelp(kw, usage, grp); 459 460 kw = "RPNEvaluator"; 461 usage = " Reverse Polish Notation (HP calculator like) expression evaluation \n"; 462 usage += " >> Stack: \n"; 463 usage += " ... (4) (3) z=(2) y=(1) x=(0)=Stack.Top() \n"; 464 usage += " >> Examples: \n"; 465 usage += " - sin(PI/6): pi 6 / sin \n"; 466 usage += " - 1*2*...*5: 1 2 3 4 5 product \n"; 467 usage += " - x = $x $y * \n"; 468 usage += " >>> Stack operations : \n"; 469 usage += " print x<>y pop push (duplicate x) \n"; 470 usage += " >>> Constants (Cst pushed to stack): \n"; 471 usage += " pi e \n"; 472 usage += " >>> Arithmetic operators (x,y) --> x@y \n"; 473 usage += " + - * / % ( (int)y % (int)x )\n"; 474 usage += " >>> F(X): x --> F(x) \n"; 475 usage += " chs sqrt sq log log10 exp \n"; 476 usage += " fabs floor ceil nint trunc \n"; 477 usage += " cos sin tan acos asin atan deg2rad rad2deg \n"; 478 usage += " >>> F(X,Y): (x,y) --> F(x,y) \n"; 479 usage += " pow atan2 \n"; 480 usage += " >>> Stack sum/product/mean/sigma/sigma^2 \n"; 481 usage += " sum product mean sigma sigma2 sigmean (y->sigma x->mean) \n"; 456 482 RegisterHelp(kw, usage, grp); 457 483 … … 459 485 usage = "> shell command_string # Execute shell command\n"; 460 486 usage += "> cshell command_string # Execute cshell command\n"; 461 usage += "---Ex emples:\n";487 usage += "---Examples:\n"; 462 488 usage += " > shell ls\n"; 463 489 usage += " > cshell echo '$LD_LIBRARY_PATH'; map2cl -h; ls\n"; … … 858 884 859 885 rcs = SubstituteVars(s, s2); 860 if (rcs) return(rcs); 861 886 if (rcs) { 887 cerr << "PIACmd::Interpret()/syntax error in SubstituteVars() \n" 888 << "line: " << s << endl; 889 return(rcs); 890 } 862 891 // >>>> Separating keyword and tokens 863 892 vector<string> tokens; … … 885 914 int rct = EvaluateTest(tokens, s, restst); 886 915 if (rct) { 887 cerr << "PIACmd::Interpret() if syntax Error ! " << endl;916 cerr << "PIACmd::Interpret() if syntax Error ! " << "line: " << s << endl; 888 917 return(1); 889 918 } … … 900 929 int rcev = EvalRPNExpr(tokens, s); 901 930 if (rcev) { 902 cerr << "PIACmd::Interpret() evaluation (RPN) syntax Error ! " << endl;931 cerr << "PIACmd::Interpret() evaluation (RPN) syntax Error ! " << "line: " << s << endl; 903 932 return(1); 904 933 } … … 913 942 } 914 943 else { 915 cerr << "PIACmd::Interpret() No script name in defscript" << endl;944 cerr << "PIACmd::Interpret() No script name in defscript" << "line: " << s << endl; 916 945 return(1); 917 946 } … … 993 1022 string vn, vv; 994 1023 while (p < l) { 1024 iarr = -1; 995 1025 q = s.find('$',p); 996 1026 if (q > l) break; … … 1281 1311 rpnstack.top() = y/x; 1282 1312 } 1313 else if (args[k] == "%") { 1314 if ( Check_myRPNStack_(rpnstack, x, y, line) ) return(1); 1315 rpnstack.top() = (int)y % (int)x; 1316 } 1283 1317 // Les constantes : e , pi 1284 1318 else if (args[k] == "e") { … … 1313 1347 rpnstack.top() = atan(x); 1314 1348 } 1349 else if (args[k] == "chs") { 1350 if ( Check_myRPNStack_(rpnstack, x, line) ) return(1); 1351 rpnstack.top() = -x; 1352 } 1353 else if (args[k] == "sqrt") { 1354 if ( Check_myRPNStack_(rpnstack, x, line) ) return(1); 1355 rpnstack.top() = sqrt(x); 1356 } 1357 else if (args[k] == "sq") { // x^2 1358 if ( Check_myRPNStack_(rpnstack, x, line) ) return(1); 1359 rpnstack.top() = x*x; 1360 } 1315 1361 else if (args[k] == "log") { 1316 1362 if ( Check_myRPNStack_(rpnstack, x, line) ) return(1); … … 1329 1375 rpnstack.top() = fabs(x); 1330 1376 } 1331 else if (args[k] == " chs") {1377 else if (args[k] == "floor") { 1332 1378 if ( Check_myRPNStack_(rpnstack, x, line) ) return(1); 1333 rpnstack.top() = -x; 1379 rpnstack.top() = floor(x); 1380 } 1381 else if (args[k] == "ceil") { 1382 if ( Check_myRPNStack_(rpnstack, x, line) ) return(1); 1383 rpnstack.top() = ceil(x); 1384 } 1385 else if (args[k] == "nint") { 1386 if ( Check_myRPNStack_(rpnstack, x, line) ) return(1); 1387 rpnstack.top() = nint(x); 1388 } 1389 else if (args[k] == "trunc") { 1390 if ( Check_myRPNStack_(rpnstack, x, line) ) return(1); 1391 rpnstack.top() = trunc(x); 1334 1392 } 1335 1393 else if (args[k] == "deg2rad") { … … 1351 1409 } 1352 1410 // Fonction a N arguments - Somme, produit, etc ... 1353 else if ((args[k] == "sum") || (args[k] == "mean") || 1411 else if ((args[k] == "sum") || (args[k] == "mean") || (args[k] == "sigmean") || 1354 1412 (args[k] == "sigma") || (args[k] == "sigma2") ) { 1355 1413 double sx, sx2; … … 1363 1421 } 1364 1422 double fnn = nn; 1365 if (args[k] == "mean") rpnstack.push(sx/fnn); 1366 else if (args[k] == "sigma2") rpnstack.push(sx2/fnn-(x*x/(fnn*fnn))); 1367 else rpnstack.push(sqrt(sx2/fnn-(x*x/(fnn*fnn)))); 1423 if ((args[k] == "sigma") || (args[k] == "sigmean")) 1424 rpnstack.push(sqrt(sx2/fnn-(x*x/(fnn*fnn)))); 1425 else if ((args[k] == "mean") || (args[k] == "sigmean")) rpnstack.push(sx/fnn); 1426 else rpnstack.push(sx2/fnn-(x*x/(fnn*fnn))); 1368 1427 } 1369 1428 } … … 1385 1444 if ( Check_myRPNStack_(rpnstack, x, y, line) ) return(1); 1386 1445 rpnstack.top() = x; rpnstack.push(y); 1446 } 1447 else if (args[k] == "pop") { 1448 rpnstack.pop(); 1449 } 1450 else if (args[k] == "push") { 1451 if (rpnstack.empty()) rpnstack.push(0.); 1452 else rpnstack.push(rpnstack.top()); 1387 1453 } 1388 1454 // On met un nombre sur le stack
Note:
See TracChangeset
for help on using the changeset viewer.