source: Sophya/trunk/SophyaPI/PIext/basexecut.cc@ 357

Last change on this file since 357 was 357, checked in by ercodmgr, 26 years ago

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 size: 39.4 KB
Line 
1#include "piacmd.h"
2
3#include <stdio.h>
4#include <stdlib.h>
5#include <math.h>
6
7#include "basexecut.h"
8
9#include "pdlmgr.h"
10#include "ctimer.h"
11// #include "dlftypes.h"
12
13#include "pistdimgapp.h"
14#include "nobjmgr.h"
15#include "servnobjm.h"
16
17#include "histos.h"
18#include "histos2.h"
19#include "hisprof.h"
20#include "ntuple.h"
21#include "generaldata.h"
22#include "cvector.h"
23
24
25
26/* --Methode-- */
27PIABaseExecutor::PIABaseExecutor(PIACmd* piac, NamedObjMgr* omg, PIStdImgApp* app)
28{
29mpiac = piac;
30mObjMgr = omg;
31mImgApp = app;
32dynlink = NULL;
33RegisterCommands();
34}
35
36PIABaseExecutor::~PIABaseExecutor()
37{
38}
39
40
41
42/* --Methode-- */
43int PIABaseExecutor::Execute(string& kw, vector<string>& tokens)
44{
45Services2NObjMgr* srvo = mObjMgr->GetServiceObj();
46// >>>>> Chargement de modules
47if (kw == "loadmodule") {
48 if (tokens.size() < 2) { cout << "Usage: loadmodule fnameso modulename" << endl; return(0); }
49 mpiac->LoadModule(tokens[0], tokens[1]);
50 }
51// >>>>>>>>>>> Fenetre graphique , changement d'attributs graphiques
52else if (kw == "zone") {
53 if (tokens.size() < 2) { cout << "Usage: zone nx ny" << endl; return(0); }
54 int nx, ny;
55 nx = ny = 1;
56 nx = atoi(tokens[0].c_str()); ny = atoi(tokens[1].c_str());
57 mObjMgr->SetGraphicWinZone(nx, ny, false);
58 }
59else if (kw == "newwin") {
60 if (tokens.size() < 2) { cout << "Usage: newwin nx ny" << endl; return(0); }
61 int nx, ny;
62 nx = ny = 1;
63 nx = atoi(tokens[0].c_str()); ny = atoi(tokens[1].c_str());
64 mObjMgr->SetGraphicWinZone(nx, ny, true);
65 }
66else if (kw == "stacknext") mImgApp->StackWinNext();
67else if (kw == "gratt") {
68 if (tokens.size() < 1) { cout << "Usage: gratt attributes_list (att=def->defaut)" << endl; return(0); }
69 mObjMgr->SetGraphicAttributes(tokens[0]);
70 }
71else if (kw == "setxylimits") {
72 if (tokens.size() < 4) { cout << "Usage: setxylimits xmin xmax ymin ymax" << endl; return(0); }
73 double xmin = atof(tokens[0].c_str());
74 double xmax = atof(tokens[1].c_str());
75 double ymin = atof(tokens[2].c_str());
76 double ymax = atof(tokens[3].c_str());
77 mImgApp->SetXYLimits(xmin, xmax, ymin, ymax);
78 }
79else if (kw == "addtext") {
80 if (tokens.size() < 4) { cout << "Usage: addtext x y colfontatt txt" << endl; return(0); }
81 double xp = atof(tokens[0].c_str());
82 double yp = atof(tokens[1].c_str());
83 bool fgsr = true;
84 string txt = tokens[3];
85 for(int k=4; k<tokens.size(); k++) txt += (' ' + tokens[k]);
86 int opt = mObjMgr->GetServiceObj()->DecodeDispOption(tokens[2], fgsr);
87 mImgApp->AddText(txt, xp, yp);
88 if (fgsr) mImgApp->RestoreGraphicAtt();
89 }
90
91// >>>>>>>>>>> Link dynamique de fonctions C++
92else if (kw == "link" ) {
93 if (tokens.size() < 2) { cout << "Usage: link fnameso f1 [f2 f3]" << endl; return(0); }
94 string sph = "";
95 for(int gg=0; gg<5; gg++) tokens.push_back(sph);
96 int rc = LinkUserFuncs(tokens[0], tokens[1], tokens[2], tokens[3]);
97 if (rc == 0) cout << "PIABaseExecutor: Link from " << tokens[0] << " OK " << endl;
98}
99else if (kw == "call" ) {
100 if (tokens.size() < 1) { cout << "Usage: call userf [arg1 arg2 ...]" << endl; return(0); }
101 UsFmap::iterator it = usfmap.find(tokens[0]);
102 if (it == usfmap.end()) {
103 cerr << "PIABaseExecutor: No User Function " << tokens[0] << endl;
104 return(0);
105 }
106 cout << "PIABaseExecutor: Call " << tokens[0] << "( ... )" << endl;
107// on est oblige de faire un cast etant donne qu'on
108// utilise donc des DlFunction (Reza 20/08/98) voir commentaire ds .h (pb g++)
109 DlUserProcFunction fuf = (DlUserProcFunction)(*it).second;
110// On redirige la sortie sur le terminal
111 bool red = mImgApp->HasRedirectedStdOutErr();
112 mImgApp->RedirectStdOutErr(false);
113 TRY {
114 tokens.erase(tokens.begin());
115 fuf(tokens);
116 } CATCH(merr) {
117 fflush(stdout);
118 cout << endl;
119 cerr << endl;
120 string es = PeidaExc(merr);
121 cerr << "PIABaseExecutor: Call UserFunc Exception :" << merr << es;
122 }
123 mImgApp->RedirectStdOutErr(red);
124}
125
126// >>>>>>>>>>> lecture/ecriture des objets, gestion des objets
127else if (kw == "openfits" ) {
128 if (tokens.size() < 1) { cout << "Usage: openfits file " << endl; return(0); }
129 else { string nomobj = ""; mObjMgr->ReadFits(tokens[0], nomobj); }
130}
131else if (kw == "savefits" ) {
132 if (tokens.size() < 2) { cout << "Usage: savefits nameobj filename " << endl; return(0); }
133 else mObjMgr->SaveFits(tokens[0], tokens[1]);
134}
135else if (kw == "openppf" ) {
136 if (tokens.size() < 1) { cout << "Usage: openppf file " << endl; return(0); }
137 mObjMgr->ReadAll(tokens[0]);
138}
139else if (kw == "saveobjs" ) {
140 if (tokens.size() < 2) { cout << "Usage: saveobjs patt filename " << endl; return(0); }
141 mObjMgr->SaveObjects(tokens[0], tokens[1]);
142}
143else if (kw == "saveall" ) {
144 if (tokens.size() < 1) { cout << "Usage: saveall file " << endl; return(0); }
145 mObjMgr->SaveAll(tokens[0]);
146}
147else if (kw == "print" ) {
148 if (tokens.size() < 1) { cout << "Usage: print nameobj " << endl; return(0); }
149 mObjMgr->PrintObj(tokens[0]);
150}
151else if ( (kw == "rename" ) || (kw == "mv") ) {
152 if (tokens.size() < 2) { cout << "Usage: rename nameobj namenew" << endl; return(0); }
153 mObjMgr->RenameObj(tokens[0], tokens[1]);
154}
155else if ( (kw == "del" ) || (kw == "rm") ) {
156 if (tokens.size() < 1) { cout << "Usage: del nameobj " << endl; return(0); }
157 mObjMgr->DelObj(tokens[0]);
158}
159else if (kw == "delobjs" ) {
160 if (tokens.size() < 1) { cout << "Usage: delobjs nomobjpattern (*,?) " << endl; return(0); }
161 mObjMgr->DelObjects(tokens[0]);
162}
163else if ( (kw == "listobjs") || (kw == "ls") ) {
164 if (tokens.size() < 1) tokens.push_back("*");
165 mObjMgr->ListObjs(tokens[0]);
166}
167// Gestion des repertoires
168else if (kw == "mkdir" ) {
169 if (tokens.size() < 1) { cout << "Usage: mkdir dirname [true]" << endl; return(0); }
170 bool crd = mObjMgr->CreateDir(tokens[0]);
171 if ( crd && (tokens.size() > 1) && (tokens[1] == "true") )
172 mObjMgr->SetKeepOldDirAtt(tokens[0], true);
173 }
174else if (kw == "rmdir" ) {
175 if (tokens.size() < 1) { cout << "Usage: rmdir dirname " << endl; return(0); }
176 mObjMgr->DeleteDir(tokens[0]);
177 }
178else if (kw == "cd") {
179 if (tokens.size() < 1) tokens.push_back("home");
180 mObjMgr->SetCurrentDir(tokens[0]);
181 }
182else if (kw == "pwd") {
183 string dirn;
184 mObjMgr->GetCurrentDir(dirn);
185 cout << "CurrentDirectory: " << dirn << endl;
186 }
187else if (kw == "listdirs") {
188 if (tokens.size() < 1) tokens.push_back("*");
189 mObjMgr->ListDirs(tokens[0]);
190 }
191
192// >>>>>>>>>>> Creation d'histos 1D-2D
193else if (kw == "newh1d") {
194 if (tokens.size() < 4) { cout << "Usage: newh1d name xmin xmax nbin" << endl; return(0); }
195 int nbx;
196 float xmin, xmax;
197 nbx = 100;
198 xmin = 0.; xmax = 1.;
199 nbx = atoi(tokens[3].c_str());
200 xmin = atof(tokens[1].c_str()); xmax = atof(tokens[2].c_str());
201 Histo* h = new Histo(xmin, xmax, nbx);
202 mObjMgr->AddObj(h, tokens[0]);
203 }
204else if (kw == "newh2d") {
205 if (tokens.size() < 7) {
206 cout << "Usage: newh2d name xmin xmax nbinx ymin ymax nbiny" << endl;
207 return(0);
208 }
209 int nbx, nby;
210 float xmin, xmax;
211 float ymin, ymax;
212 nbx = nby = 50;
213 xmin = 0.; xmax = 1.;
214 ymin = 0.; ymax = 1.;
215 nbx = atoi(tokens[3].c_str());
216 nby = atoi(tokens[6].c_str());
217 xmin = atof(tokens[1].c_str()); xmax = atof(tokens[2].c_str());
218 ymin = atof(tokens[4].c_str()); ymax = atof(tokens[5].c_str());
219 Histo2D* h = new Histo2D(xmin, xmax, nbx, ymin, ymax, nby);
220 mObjMgr->AddObj(h, tokens[0]);
221 }
222else if (kw == "newprof") {
223 if (tokens.size() < 4)
224 { cout << "Usage: newprof name xmin xmax nbin [ymin ymax]" << endl; return(0); }
225 int nbx;
226 float xmin, xmax, ymin = 1., ymax = -1.;
227 if(tokens.size() > 5)
228 {ymin = atof(tokens[4].c_str()); ymax = atof(tokens[5].c_str());}
229 nbx = 100;
230 xmin = 0.; xmax = 1.;
231 nbx = atoi(tokens[3].c_str());
232 xmin = atof(tokens[1].c_str()); xmax = atof(tokens[2].c_str());
233 HProf* h = new HProf(xmin, xmax, nbx, ymin, ymax);
234 mObjMgr->AddObj(h, tokens[0]);
235 }
236else if (kw == "newgfd") {
237 if (tokens.size() < 3)
238 { cout << "Usage: newgfd nvar nalloc [errx(0/1)]" << endl; return(0); }
239 int nvar, nalloc, errx=0;
240 if (tokens.size() > 3)
241 { errx = atoi(tokens[3].c_str()); if(errx>0) errx=1; else errx = 0;}
242 nvar = atoi(tokens[1].c_str()); nalloc = atoi(tokens[2].c_str());
243 if(nvar>0 && nalloc>0) {
244 GeneralFitData* gfd = new GeneralFitData(nvar,nalloc,errx);
245 mObjMgr->AddObj(gfd, tokens[0]);
246 }
247 }
248
249// Creation/remplissage de vecteur et de matrice
250else if (kw == "newvec") {
251 if (tokens.size() < 2) {
252 cout << "Usage: newvec name size [f(i) dopt] " << endl; return(0);
253 }
254 int n = atoi(tokens[1].c_str());
255 double xmin, xmax;
256 xmin = 0.; xmax = n;
257 if (tokens.size() < 3) {
258 Vector* v = new Vector(n);
259 mObjMgr->AddObj(v, tokens[0]);
260 }
261 else {
262 if (tokens.size() < 4) tokens.push_back("");
263 mObjMgr->GetServiceObj()->PlotFunc(tokens[2], tokens[0], xmin, xmax, n, tokens[3]);
264 }
265 }
266else if (kw == "newmtx") {
267 if (tokens.size() < 3) {
268 cout << "Usage: newvec name sizeX(Col) sizeY(Lines) [f(i,j) dopt] " << endl; return(0);
269 }
270 int nx = atoi(tokens[1].c_str());
271 int ny = atoi(tokens[2].c_str());
272 double xmin, xmax, ymin, ymax;
273 xmin = 0.; xmax = nx;
274 ymin = 0.; ymax = ny;
275 if (tokens.size() < 4) {
276 Matrix* mtx = new Matrix(ny,nx);
277 mObjMgr->AddObj(mtx, tokens[0]);
278 }
279 else {
280 if (tokens.size() < 5) tokens.push_back("n");
281 mObjMgr->GetServiceObj()->PlotFunc2D(tokens[3], tokens[0], xmin, xmax, ymin, ymax,
282 nx, ny, tokens[4]);
283 }
284 }
285
286// >>>>>>>>>>> Affichage des objets
287else if ( (kw == "disp") || (kw == "surf") || (kw == "imag") ) {
288 if (tokens.size() < 1) { cout << "Usage: disp/surf/imag nameobj [opt]" << endl; return(0); }
289 string opt = "n";
290 if (tokens.size() > 1) opt = tokens[1];
291 if (kw == "disp") mObjMgr->DisplayObj(tokens[0], opt);
292 else if (kw == "surf") mObjMgr->DisplaySurf3D(tokens[0], opt);
293 else if (kw == "imag") mObjMgr->DisplayImage(tokens[0], opt);
294 }
295
296else if (kw == "nt2d") {
297 if (tokens.size() < 5) { cout << "Usage: nt2d nameobj varx vary errx erry opt" << endl; return(0); }
298 string opt = "n";
299 if (tokens.size() > 5) opt = tokens[5];
300 string ph = "";
301 mObjMgr->DisplayNT(tokens[0],tokens[1],tokens[2], ph, tokens[3], tokens[4], ph, opt);
302 }
303else if (kw == "nt2dw") {
304 if (tokens.size() < 6) { cout << "Usage: nt2dw nameobj varx vary varz errx erry opt" << endl; return(0); }
305 string opt = "n";
306 if (tokens.size() > 6) opt = tokens[6];
307 string ph = "";
308 mObjMgr->DisplayNT(tokens[0],tokens[1],tokens[2], tokens[3], tokens[4], tokens[5], ph, opt, false);
309 }
310else if (kw == "nt3d") {
311 if (tokens.size() < 7) { cout << "Usage: nt3d nameobj varx vary varz errx erry errz opt" << endl; return(0); }
312 string opt = "n";
313 if (tokens.size() > 7) opt = tokens[7];
314 mObjMgr->DisplayNT(tokens[0],tokens[1],tokens[2], tokens[3], tokens[4], tokens[5], tokens[6], opt, true);
315 }
316
317// Obsolete : ne pas virer SVP, cmv 26/7/99
318else if (kw == "gfd2d") {
319 cout<<"----- gfd2d OBSOLETE: utilisez nt2d -----"<<endl;
320 if(tokens.size()<2)
321 {cout<<"Usage: gfd2d nomobj numvarx erreur=(x y xy) opt"<<endl;
322 return(0);}
323 string numvary = "";
324 string err = "";
325 string opt = "n";
326 if(tokens.size()>2) err = tokens[2];
327 if(tokens.size()>3) opt = tokens[3];
328 mObjMgr->DisplayGFD(tokens[0],tokens[1],numvary,err,opt);
329 }
330else if (kw == "gfd3d") {
331 cout<<"----- gfd3d OBSOLETE: utilisez nt3d -----"<<endl;
332 if(tokens.size()<3)
333 {cout<<"Usage: gfd3d nameobj numvarx numvary erreur=(x y z xy xz yz xyz) opt"<<endl;
334 return(0);}
335 string err = "";
336 string opt = "n";
337 if(tokens.size()>3) err = tokens[3];
338 if(tokens.size()>4) opt = tokens[4];
339 mObjMgr->DisplayGFD(tokens[0],tokens[1],tokens[2],err,opt);
340 }
341
342// >>>>>>>>>>> Trace de fonctions
343else if ( (kw == "func") ) {
344 if (tokens.size() < 4) { cout << "Usage: func f(x) xmin xmax npt [opt]" << endl; return(0); }
345 string opt = "";
346 if (tokens.size() > 4) opt = tokens[4];
347 int np;
348 double xmin, xmax;
349 np = 100;
350 xmin = 0.; xmax = 1.;
351 np = atoi(tokens[3].c_str());
352 xmin = atof(tokens[1].c_str()); xmax = atof(tokens[2].c_str());
353 string nom = "";
354 mObjMgr->GetServiceObj()->PlotFunc(tokens[0], nom, xmin, xmax, np, opt);
355 }
356else if ( (kw == "funcff") ) {
357 if (tokens.size() < 5) { cout << "Usage: funcff C-filename f(x)-name xmin xmax npt [opt]" << endl; return(0); }
358 string opt = "";
359 if (tokens.size() > 5) opt = tokens[5];
360 int np;
361 double xmin, xmax;
362 np = 100;
363 xmin = 0.; xmax = 1.;
364 np = atoi(tokens[4].c_str());
365 xmin = atof(tokens[2].c_str()); xmax = atof(tokens[3].c_str());
366 string nom = "";
367 mObjMgr->GetServiceObj()->PlotFuncFrCFile(tokens[0], tokens[1], nom, xmin, xmax, np, opt);
368 }
369else if ( (kw == "func2d") ) {
370 if (tokens.size() < 7) {
371 cout << "Usage: func2d f(x,y) xmin xmax nptx ymin ymax npty [opt]" << endl;
372 return(0);
373 }
374 int npx, npy;
375 double xmin, xmax;
376 double ymin, ymax;
377 npx = npy = 50;
378 xmin = 0.; xmax = 1.;
379 ymin = 0.; ymax = 1.;
380 npx = atoi(tokens[3].c_str());
381 npy = atoi(tokens[6].c_str());
382 xmin = atof(tokens[1].c_str()); xmax = atof(tokens[2].c_str());
383 ymin = atof(tokens[4].c_str()); ymax = atof(tokens[5].c_str());
384 string opt = "";
385 if (tokens.size() > 7) opt = tokens[7];
386 string nom = "";
387 mObjMgr->GetServiceObj()->PlotFunc2D(tokens[0], nom, xmin, xmax, ymin, ymax, npx, npy, opt);
388 }
389else if ( (kw == "func2dff") ) {
390 if (tokens.size() < 8) {
391 cout << "Usage: func2d C-filename F(x,y)-name xmax nptx ymin ymax npty [opt]" << endl;
392 return(0);
393 }
394 int npx, npy;
395 double xmin, xmax;
396 double ymin, ymax;
397 npx = npy = 50;
398 xmin = 0.; xmax = 1.;
399 ymin = 0.; ymax = 1.;
400 npx = atoi(tokens[4].c_str());
401 npy = atoi(tokens[7].c_str());
402 xmin = atof(tokens[2].c_str()); xmax = atof(tokens[3].c_str());
403 ymin = atof(tokens[5].c_str()); ymax = atof(tokens[6].c_str());
404 string opt = "";
405 if (tokens.size() > 8) opt = tokens[8];
406 string nom = "";
407 mObjMgr->GetServiceObj()->PlotFunc2DFrCFile(tokens[0], tokens[1], nom, xmin, xmax, ymin, ymax, npx, npy, opt);
408 }
409
410// >>>>>>>>>>> Trace d'expressions de N_Tuple, StarList, etc ...
411else if (kw == "plot2d" ) {
412 if (tokens.size() < 3) {
413 cout << "Usage: plot2d nameobj expx expy [expcut opt loop_par]" << endl;
414 return(0);
415 }
416 string errx = ""; string erry = "";
417 if (tokens.size() < 4) tokens.push_back("1");
418 while (tokens.size() < 6) tokens.push_back("");
419 srvo->DisplayPoints2D(tokens[0],tokens[1],tokens[2],errx,erry,tokens[3],tokens[4],tokens[5]);
420 }
421
422else if (kw == "plot2de" ) { // Plot2D avec les erreurs
423 if (tokens.size() < 5) {
424 cout << "Usage: plot2de nameobj expx expy experrx experry [expcut opt loop_par]" << endl;
425 return(0);
426 }
427 if (tokens.size() < 6) tokens.push_back("1");
428 while (tokens.size() < 8) tokens.push_back("");
429 srvo->DisplayPoints2D(tokens[0],tokens[1],tokens[2],tokens[3],tokens[4],
430 tokens[5],tokens[6],tokens[7]);
431 }
432
433else if (kw == "plot2dw" ) { // Plot2d avec poids
434 if (tokens.size() < 4) {
435 cout << "Usage: plot2dw nomobj expx expy expwt [expcut opt loop_par]" << endl;
436 return(0);
437 }
438 if (tokens.size() < 5) tokens.push_back("1");
439 while (tokens.size() < 7) tokens.push_back("");
440 srvo->DisplayPoints2DW(tokens[0],tokens[1],tokens[2],tokens[3], tokens[4], tokens[5], tokens[6]);
441 }
442else if (kw == "plot3d" ) {
443 if (tokens.size() < 4) {
444 cout << "Usage: plot3d nomobj expx expy expz [expcut opt loop_par]" << endl;
445 return(0);
446 }
447 if (tokens.size() < 5) tokens.push_back("1");
448 while (tokens.size() < 7) tokens.push_back("");
449 srvo->DisplayPoints3D(tokens[0],tokens[1],tokens[2],tokens[3], tokens[4], tokens[5], tokens[6]);
450 }
451
452else if (kw == "projh1d" ) {
453 if (tokens.size() < 3) {
454 cout << "Usage: projh1d nomh1 nomobj expx [expwt expcut opt loop_par]" << endl;
455 return(0);
456 }
457 if (tokens.size() < 4) tokens.push_back("1.");
458 if (tokens.size() < 5) tokens.push_back("1");
459 while (tokens.size() < 7) tokens.push_back("");
460 srvo->ProjectH1(tokens[1], tokens[2], tokens[3], tokens[4], tokens[0], tokens[5], tokens[6] );
461 }
462
463
464// Projection dans histogrammes
465else if (kw == "projh2d" ) {
466 if (tokens.size() < 4) {
467 cout << "Usage: projh2d nomh2 nomobj expx expy [expwt expcut opt loop_par]" << endl;
468 return(0);
469 }
470 if (tokens.size() < 5) tokens.push_back("1.");
471 if (tokens.size() < 6) tokens.push_back("1");
472 while (tokens.size() < 8) tokens.push_back("");
473 srvo->ProjectH2(tokens[1], tokens[2], tokens[3], tokens[4], tokens[5], tokens[0],
474 tokens[6], tokens[7] );
475 }
476
477else if (kw == "projprof" ) {
478 if (tokens.size() < 4) {
479 cout << "Usage: projprof nomprof nomobj expx expy [expwt expcut opt loop_par]" << endl;
480 return(0);
481 }
482 if (tokens.size() < 5) tokens.push_back("1.");
483 if (tokens.size() < 6) tokens.push_back("1");
484 while (tokens.size() < 8) tokens.push_back("");
485 srvo->ProjectHProf(tokens[1], tokens[2], tokens[3], tokens[4], tokens[5], tokens[0],
486 tokens[6], tokens[7] );
487 }
488
489// Projection dans vector/matrix
490else if (kw == "fillvec" ) {
491 if (tokens.size() < 4) {
492 cout << "Usage: fillvec nomvec nomobj expx expv [expcut opt loop_par]" << endl;
493 return(0);
494 }
495 if (tokens.size() < 5) tokens.push_back("1");
496 while (tokens.size() < 7) tokens.push_back("");
497 srvo->FillVect(tokens[1], tokens[2], tokens[3], tokens[4], tokens[0], tokens[5], tokens[6] );
498 }
499
500else if (kw == "fillmtx" ) {
501 if (tokens.size() < 5) {
502 cout << "Usage: fillmtx nommtx nomobj expx expy expv [expcut opt loop_par]" << endl;
503 return(0);
504 }
505 if (tokens.size() < 6) tokens.push_back("1");
506 while (tokens.size() < 8) tokens.push_back("");
507 srvo->FillMatx(tokens[1], tokens[2], tokens[3], tokens[4], tokens[5], tokens[0],
508 tokens[6], tokens[7] );
509 }
510
511// Remplissage NTuple,Vecteurs, ... , boucle de NTuple
512else if (kw == "fillnt" ) {
513 if (tokens.size() < 5) {
514 cout << "Usage: fillnt nameobj expx expy expz expt [expcut ntname loop_par]" << endl;
515 return(0);
516 }
517 while (tokens.size() < 8) tokens.push_back("");
518 srvo->FillNT(tokens[0],tokens[1],tokens[2], tokens[3], tokens[4], tokens[5], tokens[6], tokens[7] );
519 }
520
521else if (kw == "ntloop" ) {
522 if (tokens.size() < 3) {
523 cout << "Usage: ntloop nameobj fname funcname [ntname loop_par ]" << endl;
524 return(0);
525 }
526 while (tokens.size() < 5) tokens.push_back("");
527 srvo->FillNTFrCFile(tokens[0],tokens[1], tokens[2], tokens[3], tokens[4]);
528 }
529
530else if (kw == "ntexpcfile" ) {
531 if (tokens.size() < 3) {
532 cout << "Usage: ntexpcfile nameobj fname funcname" << endl;
533 return(0);
534 }
535 srvo->PrepareNTExpressionCFile(tokens[0],tokens[1], tokens[2]);
536 }
537
538else if (kw == "exptovec" ) {
539 if (tokens.size() < 3) {
540 cout << "Usage: exptovec nomvec nameobj expx [expcut opt loop_par]" << endl;
541 return(0);
542 }
543 while (tokens.size() < 6) tokens.push_back("");
544 srvo->ExpressionToVector(tokens[1],tokens[2],tokens[3],tokens[0],tokens[4],tokens[5]);
545 }
546
547else if (kw == "fillgd1" ) {
548 if (tokens.size() < 5) {
549 cout << "Usage: fillgd1 nomgfd nomobj expx expy experry [expcut loop_par] " << endl;
550 return(0);
551 }
552 if (tokens.size() < 6) tokens.push_back("1");
553 if (tokens.size() < 7) tokens.push_back("");
554 string expy = "";
555 srvo->FillGFD(tokens[1],tokens[2], expy, tokens[3], tokens[4], tokens[5], tokens[0]);
556 }
557
558else if (kw == "fillgd2" ) {
559 if (tokens.size() < 6) {
560 cout << "Usage: fillgd2 nomgfd nomobj expx expy expz experrz [expcut loop_par]" << endl;
561 return(0);
562 }
563 if (tokens.size() < 7) tokens.push_back("1");
564 if (tokens.size() < 8) tokens.push_back("");
565 srvo->FillGFD(tokens[1],tokens[2],tokens[3], tokens[4], tokens[5], tokens[6], tokens[0], tokens[7]);
566 }
567
568
569// Fit 1D sur objets 1D. Egalement Fit 2D sur objets 2D.
570else if (kw == "fit") {
571 if (tokens.size() < 2) {
572 cout <<"Usage:fit nomobj func \n"
573 <<" [p:p1,...,pn s:s1,...,sn m:m1,...,mn M:M1,...,Mn o:... o:...]\n";
574 return(0);
575 }
576 string p=""; string s=""; string m=""; string M=""; string O="";
577 if (tokens.size()>2)
578 for(int ip=2;ip<tokens.size();ip++) {
579 if(tokens[ip].length()<=2) continue;
580 const char *c = tokens[ip].c_str();
581 if(c[1]!=':') continue;
582 if(c[0]=='p') p=c+2;
583 else if(c[0]=='s') s=c+2;
584 else if(c[0]=='m') m=c+2;
585 else if(c[0]=='M') M=c+2;
586 else if(c[0]=='o') {O += ","; O += c+2;}
587 }
588 srvo->Fit12D(tokens[0],tokens[1],p,s,m,M,O);
589}
590
591
592else {
593 cerr << "PIABaseExecutor::Do() Erreur - Commande " << kw << " inconuue ! " << endl;
594 return(-1);
595 }
596
597return(0);
598}
599
600/* --Methode-- */
601void PIABaseExecutor::RegisterCommands()
602{
603string kw, usage;
604kw = "loadmodule";
605usage = "To load and initialize modules \n Usage: loadmodule fnameso modulename";
606usage += "\n Related commands: link";
607mpiac->RegisterCommand(kw, usage, this, "External Modules");
608kw = "link";
609usage = "Dynamic linking of compiled user functions \n Usage: link fnameso f1 [f2 f3]";
610usage += "\n fnameso: Shared-object file name, f1,f2,f3 : User function names ";
611usage += "\n Related commands: call loadmodule";
612mpiac->RegisterCommand(kw, usage, this, "External Modules");
613kw = "call";
614usage = "Dynamically linked user function call \n Usage: call userf [arg1 arg2 ...]";
615usage += "\n User function : f(vector<string>& args)";
616usage += "\n Related commands: link";
617mpiac->RegisterCommand(kw, usage, this, "External Modules");
618
619kw = "zone";
620usage = "To Divide the Graphic window \n Usage: zone nx ny";
621mpiac->RegisterCommand(kw, usage, this, "Graphics");
622kw = "newwin";
623usage = "To Create a New Graphic window, with zones \n Usage: newwin nx ny";
624mpiac->RegisterCommand(kw, usage, this, "Graphics");
625kw = "stacknext";
626usage = "Displays the next widget on stack window \n Usage: stacknext";
627mpiac->RegisterCommand(kw, usage, this, "Graphics");
628
629kw = "gratt";
630usage = "To change default graphic options \n Usage: gratt att_list \n";
631usage += "att_list=def back to default values, Example: gratt red,circlemarker5";
632usage += "\n ------------------ Graphic attribute list ------------------ \n";
633usage += ">> Colors: defcol black white grey red blue green yellow magenta cyan \n";
634usage += " turquoise navyblue orange siennared purple limegreen gold \n";
635usage += ">> Lines: defline normalline thinline thickline dashedline thindashedline \n";
636usage += " thickdashedline dottedline thindottedline thickdottedline \n";
637usage += ">> Fonts: deffont normalfont boldfont italicfont smallfont smallboldfont \n";
638usage += " smallitalicfont bigfont bigboldfont bigitalicfont \n";
639usage += " hugefont hugeboldfont hugeitalicfont \n";
640usage += ">> Marker: dotmarker<T> plusmarker<T> crossmarker<T> circlemarker <T> \n";
641usage += " fcirclemarker<T> boxmarker<T> fboxmarker<T> trianglemarker<T> \n";
642usage += " ftrianglemarker<T> starmarker<T> fstarmarker<T> \n";
643usage += " with <T> = 1 3 5 7 9 , Example fboxmarker5 , plusmarker9 ... \n";
644usage += ">> ColorTables: defcmap grey32 greyinv32 colrj32 colbr32 \n";
645usage += " grey128 greyinv128 colrj128 colbr128 \n";
646usage += ">> ZoomFactors: defzoom zoomx1 zoomx2 zoomx3 zoomx4 zoomx5 \n";
647usage += " zoom/2 zoom/3 zoom/4 zoom/5 \n";
648usage += ">> Axes: stdaxes=defaxes=boxaxes simpleaxes boxaxesgrid \n";
649usage += " fineaxes grid=fineaxesgrid \n";
650usage += ">> XYLimits : xylimits -> Forces X-Y limits in 2-D plots \n";
651usage += ">> DisplayWindow: next same win stack \n";
652usage += " Related commands: setxylimits";
653mpiac->RegisterCommand(kw, usage, this, "Graphics");
654
655kw = "setxylimits";
656usage = "Define 2-D plot limits \n Usage: setxylimits xmin xmax ymin ymax";
657usage += "\n Related commands: gratt";
658mpiac->RegisterCommand(kw, usage, this, "Graphics");
659
660kw = "addtext";
661usage = "Adds a text string to the current graphic object";
662usage += "\n at the specified position (Gr-Object Coordinate) with graphic attribute specification";
663usage += "\n Usage: addtext x y ColFontAtt TextString";
664usage += "\n Related commands: gratt";
665mpiac->RegisterCommand(kw, usage, this, "Graphics");
666
667kw = "openfits";
668usage = "Loads a FITS file into an Image<T> \n Usage: openfits filename";
669usage += "\n Related commands: savefits openppf";
670mpiac->RegisterCommand(kw, usage, this, "FileIO");
671kw = "savefits";
672usage = "Save an object into a FITS file \n Usage: savefits nameobj filename";
673usage += "\n Related commands: openfits saveall";
674mpiac->RegisterCommand(kw, usage, this, "FileIO");
675kw = "openppf";
676usage = "Reads all objects from a PPF file \n Usage: openppf filename";
677usage += "\n Related commands: saveall openfits";
678mpiac->RegisterCommand(kw, usage, this, "FileIO");
679kw = "saveobjs";
680usage = "Saves objects with names matching a pattern (x?y*) into a PPF file \n";
681usage += "Usage: saveall nameobjpattern filename";
682usage += "\n Related commands: saveall openppf savefits";
683mpiac->RegisterCommand(kw, usage, this, "FileIO");
684kw = "saveall";
685usage = "Saves all objects into a PPF file \n Usage: saveall filename";
686usage += "\n Related commands: saveobj openppf savefits";
687mpiac->RegisterCommand(kw, usage, this, "FileIO");
688
689kw = "print";
690usage = "Prints an object \n Usage: print nameobj";
691mpiac->RegisterCommand(kw, usage, this, "FileIO");
692
693kw = "mkdir";
694usage = "Create a directory";
695usage += "\n Usage: mkdir dirname [true]";
696usage += "\n if second argument==true, the directory's KeepOld attribute is set to true";
697mpiac->RegisterCommand(kw, usage, this, "Object Managment");
698kw = "rmdir";
699usage = "Removes an empty directory";
700usage += "\n Usage: remove dirname";
701mpiac->RegisterCommand(kw, usage, this, "Object Managment");
702kw = "cd";
703usage = "Change current directory";
704usage += "\n Usage: cd [dirname]";
705mpiac->RegisterCommand(kw, usage, this, "Object Managment");
706kw = "pwd";
707usage = "Prints current directory";
708usage += "\n Usage: pwd";
709mpiac->RegisterCommand(kw, usage, this, "Object Managment");
710kw = "listdirs";
711usage = "Prints the list of directories";
712usage += "\n Usage: listdirs [patt=*] \n patt : * , ? ";
713mpiac->RegisterCommand(kw, usage, this, "Object Managment");
714kw = "listobjs";
715usage = "Prints the list of objects (Alias: ls)";
716 usage += "\n Usage: listobjs [patt=*] \n patt : /*/x?y* ... ";
717mpiac->RegisterCommand(kw, usage, this, "Object Managment");
718kw = "rename";
719usage = "Rename an object (Alias: mv) \n Usage: rename nameobj namenew";
720usage += "\n Related commands: del delobjs";
721mpiac->RegisterCommand(kw, usage, this, "Object Managment");
722kw = "del";
723usage = "Deletes an object (Alias: rm) \n Usage: del nameobj";
724usage += "\n Related commands: delobjs rename";
725mpiac->RegisterCommand(kw, usage, this, "Object Managment");
726kw = "delobjs";
727usage = "Delete a set of objects with names matching a pattern (x?y*)";
728usage += "\n Usage: delobjs nameobjpattern \n";
729usage += "\n Related commands: del rename";
730mpiac->RegisterCommand(kw, usage, this, "Object Managment");
731
732kw = "newh1d";
733usage = "Creates a 1D histogramm \n Usage: newh1d name xmin xmax nbin";
734usage += "\n Related commands: newh2d newprof newgfd ";
735mpiac->RegisterCommand(kw, usage, this, "Objects");
736kw = "newh2d";
737usage = "Creates a 2D histogramm \n Usage: newh2d name xmin xmax nbinx ymin ymax nbiny";
738usage += "\n Related commands: newh1d newprof newgfd ";
739mpiac->RegisterCommand(kw, usage, this, "Objects");
740kw = "newprof";
741usage = "Creates a profile histogramm \n Usage: newprof name xmin xmax nbin [ymin ymax]";
742usage += "\n Related commands: newh1d newh2d newgfd ";
743mpiac->RegisterCommand(kw, usage, this, "Objects");
744kw = "newgfd";
745usage = "Creates GeneralFit Data object \n Usage: newgfd nvar nalloc [errx(0/1)]";
746usage += "\n Related commands: newh1d newh2d newprof ";
747mpiac->RegisterCommand(kw, usage, this, "Objects");
748kw = "newvec";
749usage = "Creates (and optionaly fills) a vector \n Usage: newvec name size [f(i) [dopt] ] ";
750usage += "\n Related commands: newmtx";
751mpiac->RegisterCommand(kw, usage, this, "Objects");
752kw = "newmtx";
753usage = "Creates (and optionaly fills) a matrix \n";
754usage +=" Usage: newvec name sizeX(Col) sizeY(Lines) [f(i,j) [dopt] ] ";
755usage += "\n Related commands: newvec";
756mpiac->RegisterCommand(kw, usage, this, "Objects");
757
758kw = "disp";
759usage = "Displays an object \n Usage: disp nameobj [graphic_attributes]";
760usage += "\n Related commands: surf nt2d nt3d ";
761mpiac->RegisterCommand(kw, usage, this, "Obj. Display");
762kw = "imag";
763usage = "Displays an object as an image \n Usage: imag nameobj [graphic_attributes]";
764usage += "\n Related commands: disp surf nt2d nt3d ";
765mpiac->RegisterCommand(kw, usage, this, "Obj. Display");
766kw = "surf";
767usage = "Displays an object as a 3D surface \n Usage: surf nameobj [graphic_attributes]";
768usage += "\n Related commands: disp nt2d nt3d ";
769mpiac->RegisterCommand(kw, usage, this, "Obj. Display");
770kw = "nt2d";
771usage = "Displays Points (X-Y) [with error-bars] from an NTuple ";
772usage += "\n Usage : nt2d nameobj varx vary [errx erry] [graphic_attributes]";
773usage += "\n Related commands: disp surf nt2dw nt3d gfd2d ";
774mpiac->RegisterCommand(kw, usage, this, "Obj. Display");
775kw = "nt2dw";
776usage = "Displays Points (X-Y) with weight [with error-bars] from an NTuple ";
777usage += "\n Usage : nt2d nameobj varx vary varz [errx erry] [graphic_attributes]";
778usage += "\n Related commands: disp surf nt2d nt3d gfd2d ";
779mpiac->RegisterCommand(kw, usage, this, "Obj. Display");
780kw = "nt3d";
781usage = "Displays 3D-Points (X-Y-Z) [with error-bars] from an NTuple ";
782usage += "\n Usage : nt3d nameobj varx vary varz [errx erry errz] [graphic_attributes]";
783usage += "\n Related commands: disp surf nt2d nt2dw gfd3d ";
784usage += "\n Related commands: disp surf nt2d nt2dw ";
785mpiac->RegisterCommand(kw, usage, this, "Obj. Display");
786
787// Ceci est maintenant obsolete, on garde pour info.
788kw = "gfd2d";
789usage = "Displays Points (X-Y) with error-bars from a GeneralFit Data ";
790usage += "\n Usage : gfd2d nameobj numvarx erreur=(x y xy) [graphic_attributes]";
791usage += "\n Related commands: gfd3d nt2d nt3d ";
792usage += "\n ----- OBSOLETE: utilisez nt2d -----";
793mpiac->RegisterCommand(kw, usage, this, "Obj. Display");
794kw = "gfd3d";
795usage = "Displays 3D-Points (X-Y-Z) with error-bars from a GeneralFit Data ";
796usage += "\n Usage : gfd3d nameobj numvarx numvary erreur=(x y z xy xz yz xyz) [graphic_attributes]";
797usage += "\n Related commands: gfd2d nt2d nt3d ";
798usage += "\n ----- OBSOLETE: utilisez nt3d -----";
799mpiac->RegisterCommand(kw, usage, this, "Obj. Display");
800
801kw = "func";
802usage = "Displays a function y=f(x) (Fills a vector with function values)";
803usage += "\n Usage: func f(x) xmin xmax npt [graphic_attributes]";
804usage += "\n Related commands: funcff func2d func2dff ";
805mpiac->RegisterCommand(kw, usage, this, "Func Plot");
806kw = "funcff";
807usage = "Displays a function y=f(x) from a C-file (Fills a vector with function values)";
808usage += "\n Usage: funcff C-FileName FunctionName xmin xmax npt [graphic_attributes]";
809usage += "\n Related commands: func func2d func2dff ";
810mpiac->RegisterCommand(kw, usage, this, "Func Plot");
811kw = "func2d";
812usage = "Displays a function z=f(x,y) (Fills a matrix with function values)";
813usage += "\n Usage: func2d f(x,y) xmin xmax nptx ymin ymax npty [graphic_attributes]";
814usage += "\n Related commands: func";
815mpiac->RegisterCommand(kw, usage, this, "Func Plot");
816kw = "func2dff";
817usage = "Displays a function z=f(x,y) from a C-file (Fills a matrix with function values)";
818usage += "\n Usage: func2dff C-FileName FunctionName xmin xmax nptx ymin ymax npty [graphic_attributes]";
819usage += "\n Related commands: func funcff func2d ";
820mpiac->RegisterCommand(kw, usage, this, "Func Plot");
821
822kw = "ObjectExpressions";
823usage = "Any mathematical expression (math.h) with object variables can be used";
824usage += "\n ------ Object Variable names (double) -------- ";
825usage += "\nNTuple varnames - Histo1D/HProf: i,x,val,err - Histo2D: i,j,x,y,val,err";
826usage += "\nVector: i,val - Matrix: i,j,val - Image: x=i,y=j, pix=val";
827usage += "\nLoop parameters can be specified as I1[:I2[:DI]] for(int i=I1; i<I2; i+=DI)";
828usage += "\nThe default Cut() expression in true (=1) for all";
829usage += "\n Related commands: plot2d plot2de plot2dw plot3d ";
830usage += "\n projh1d projh2d projprof fillvec fillmtx ";
831usage += "\n fillnt fillgd1 fillgd2 ntloop exptovec ... ";
832mpiac->RegisterCommand(kw, usage, NULL, "Expr. Plotting");
833kw = "plot2d";
834usage = "Plots (2D) Y=g(Object) vs. X=f(Object) --- Object Variable names (double) :";
835usage += "\n Usage: plot2d nameobj f_X() g_Y() [f_Cut() graphic_attributes loop_param]";
836usage += "\n Related commands: plot2de plot2dw plot3d ObjectExpressions ...";
837mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
838kw = "plot2de";
839usage = "Plots (2D) Y=g(Object) vs. X=f(Object) with error bars eX/Y=f_ErrX/Y(Object) ";
840usage += "\n Usage: plot2de nameobj f_X() g_Y() f_ErrX() f_ErrY() [f_Cut() graphic_attributes loop_param]";
841usage += "\n Related commands: plot2d plot2dw plot3d ObjectExpressions ...";
842mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
843kw = "plot2dw";
844usage = "Plots (2D) Y=g(Object) vs. X=f(Object) with Weight W=h(Object) ";
845usage += "\n Usage: plot2dw nameobj f_X() g_Y() h_Wt() [Cut() graphic_attributes loop_param]";
846usage += "\n Related commands: plot2d plot2dw plot3d ObjectExpressions ...";
847mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
848kw = "plot3d";
849usage = "Plots (3D) Z=h(Object) vs. Y=g(Object) vs. X=f(Object) vs ";
850usage += "\n Usage: plot3d nameobj f_X() g_Y() h_Z() [Cut() graphic_attributes loop_param]";
851usage += "\n Related commands: plot2d plot2dw plot2de plot3d ObjectExpressions ...";
852mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
853
854kw = "projh1d";
855usage = "Projects X=f(Object) with weight WT=h(Object) into a 1D histogram ";
856usage += "\n Usage: projh1d nameh1d nameobj f_X() [h_WT()=1. Cut() graphic_attributes loop_param]";
857usage += "\n Histo1D nameh1d is created if necessary ";
858usage += "\n Related commands: projh2d projprof ObjectExpressions ...";
859mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
860kw = "projh2d";
861usage = "Projects (X=f(Object),Y=g(Object)) with weight WT=h(Object) into a 2D histogram ";
862usage += "\n Usage: projh2d nameh2d nameobj f_X() g_Y() [h_WT()=1. Cut() graphic_attributes loop_param]";
863usage += "\n Histo2D nameh2d is created if necessary ";
864usage += "\n Related commands: projh1d projprof ObjectExpressions ...";
865mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
866kw = "projprof";
867usage = "Projects (X=f(Object),Y=g(Object)) with weight WT=h(Object) into a profile histogram ";
868usage += "\n Usage: projh2d nameprof nameobj f_X() g_Y() [h_WT()=1. Cut() graphic_attributes loop_param]";
869usage += "\n HProf nameprof is created if necessary ";
870usage += "\n Related commands: projh1d projh2d ObjectExpressions ...";
871mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
872kw = "fillvec";
873usage = "Fills a Vector V((int)(f_X(Object)+0.5)) = h_V(Object) ";
874usage += "\n Usage: fillvec namevec nameobj f_X() h_V() [Cut() graphic_attributes loop_param]";
875usage += "\n Related commands: fillmtx fillnt ObjectExpressions ...";
876mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
877kw = "fillmtx";
878usage = "Fills a Matrix M(Line=g_Y(Object)+0.5, Col=f_X(Object)+0.5)) = h_V(Object) ";
879usage += "\n Usage: fillvec namevec nameobj f_X() g_Y() h_V() [Cut() graphic_attributes loop_param]";
880usage += "\n Related commands: fillvec fillnt ObjectExpressions ...";
881mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
882
883kw = "fillnt";
884usage = "Creates and Fills an NTuple(x,y,z,t) with (X=f(Object),Y=g(...),Z=h(...),T=k(...))";
885usage += "\n Usage: fillnt nameobj f_X() g_Y() h_Z() k_T() [Cut() nameNt loop_param]";
886usage += "\n Related commands: ntloop plot2d projh1d projh2d projprof ";
887usage += "\n Related commands: fillvec fillmtx ntloop exptovec fillgd1 fillgd2 ObjectExpressions ...";
888mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
889
890kw = "ntloop";
891usage = "Loops over an Object NTupleInterface calling a function from a C-file \n";
892usage += "and optionaly fills an NTuple(x,y,z,t) with (X=f(Object),Y=g(...),Z=h(...),T=k(...))";
893usage += "\n Usage: ntloop nameobj CFileName FuncName [NtupleName loop_param]";
894usage += "\n Related commands: fillvec fillmtx fillnt fillgd1 fillgd2 exptovec ObjectExpressions ...";
895usage += "\n Related commands: ntexpcfile fillnt";
896mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
897
898kw = "ntexpcfile";
899usage = "Creates a C-File with declarations suitable to be used for ntloop";
900usage += "\n Usage: ntexpcfile nameobj CFileName FuncName ";
901usage += "\n Related commands: ntloop";
902mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
903
904kw = "exptovec";
905usage = "Creates and Fills a Vector with X=f(Object)";
906usage += "\n Usage: exptovec namevec nameobj f_X() [Cut() graphic_attributes loop_param]";
907usage += "\n Related commands: ntloop fillnt ObjectExpressions ...";
908mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
909kw = "fillgd1";
910usage = "Creates and Fills a GeneralFitData with (X=f(Object), Y=g(...), ErrY=h(...))";
911usage += "\n Usage: fillgd1 namegfd nameobj f_X() g_Y() h_ErrY() [Cut() loop_param]";
912usage += "\n Related commands: ntloop fillnt ObjectExpressions ...";
913mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
914kw = "fillgd2";
915usage = "Creates and Fills a GeneralFitData with (X=f(Object), Y=g(...), Z=h(...)) ErrZ=k(...)";
916usage += "\n Usage: fillgd1 namegfd nameobj f_X() g_Y() h_Z() k_ErrZ() [Cut() loop_param]";
917usage += "\n Related commands: ntloop fillnt ObjectExpressions ...";
918mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
919
920kw = "fit";
921usage = "Fitting function to DataObjects (Histo, Histo2D, Vector, ...)";
922usage += "\n Usage: fit nomobj func [Options]";
923usage += "\n [p:p1,...,pn s:s1,...,sn m:m1,...,mn M:M1,...,Mn o:... o:...]";
924mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
925
926}
927
928/* --Methode-- */
929int PIABaseExecutor::LinkUserFuncs(string& fnameso, string& func1, string& func2, string& func3)
930// string& func4, string& func5)
931{
932string cmd;
933
934if (dynlink) delete dynlink; dynlink = NULL;
935usfmap.clear();
936
937dynlink = new PDynLinkMgr(fnameso, true);
938if (dynlink == NULL) {
939 string sn = fnameso;
940 cerr << "PIABaseExecutor/LinkUserFuncs_Erreur: Erreur ouverture SO " << sn << endl;
941 return(2);
942 }
943
944int nok=0;
945// on utilise donc des DlFunction (Reza 20/08/98) voir commentaire ds .h (pb g++)
946// DlUserProcFunction f = NULL;
947DlFunction f = NULL;
948if ((func1.length() < 1) || (func1 == "-") || (func1 == ".") ) goto fin;
949// f = (DlUserProcFunction) dlsym(dlhandle, func1.c_str());
950f = dynlink->GetFunction(func1);
951if (f) { nok++; usfmap[func1] = f; }
952else cerr << "PIABaseExecutor/LinkUserFuncs_Erreur: Erreur linking " << func1 << endl;
953
954if ((func2.length() < 1) || (func2 == "-") || (func2 == ".") ) goto fin;
955// f = (DlUserProcFunction) dlsym(dlhandle, func2.c_str());
956f = dynlink->GetFunction(func2);
957if (f) { nok++; usfmap[func2] = f; }
958else cerr << "PIABaseExecutor/LinkUserFuncs_Erreur: Erreur linking " << func2 << endl;
959
960if ((func3.length() < 1) || (func3 == "-") || (func3 == ".") ) goto fin;
961// f = (DlUserProcFunction) dlsym(dlhandle, func3.c_str());
962f = dynlink->GetFunction(func3);
963if (f) { nok++; usfmap[func3] = f; }
964else cerr << "PIABaseExecutor/LinkUserFuncs_Erreur: Erreur linking " << func3 << endl;
965
966/* Pb compile g++ 2.7.2
967if ((func4.length() < 1) || (func4 == "-") || (func4 == ".") ) goto fin;
968// f = (DlUserProcFunction) dlsym(dlhandle, func4.c_str());
969f = dynlink->GetFunction(func4);
970if (f) { nok++; usfmap[func4] = f; }
971else cerr << "PIABaseExecutor/LinkUserFuncs_Erreur: Erreur linking " << func4 << endl;
972
973if ((func5.length() < 1) || (func5 == "-") || (func5 == ".") ) goto fin;
974// f = (DlUserProcFunction) dlsym(dlhandle, func5.c_str());
975f = dynlink->GetFunction(func5);
976if (f) { nok++; usfmap[func5] = f; }
977else cerr << "PIABaseExecutor/LinkUserFuncs_Erreur: Erreur linking " << func5 << endl;
978*/
979fin:
980if (nok < 1) { if (dynlink) delete dynlink; dynlink = NULL; return(3); }
981else return(0);
982}
983
Note: See TracBrowser for help on using the repository browser.