Changeset 466 in Sophya for trunk


Ignore:
Timestamp:
Oct 14, 1999, 7:01:58 PM (26 years ago)
Author:
ercodmgr
Message:

Changement nom /func en /autoc
Nouvelles commandes PAW-like n/plot,...,reset,h/plot/2d etc..
Creation de helpfit pour commenatires fit,fitlin,fitw,crfitfun etc..

cmv 14/10/99

Location:
trunk/SophyaPI/PIext
Files:
5 edited

Legend:

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

    r463 r466  
    119119  CreateDir(dirn);
    120120  SetKeepOldDirAtt(dirn, false);
    121   dirn = "func";
     121  dirn = "autoc";
    122122  CreateDir(dirn);
    123123  SetKeepOldDirAtt(dirn, false);
     
    420420  }
    421421
    422 // Si c'est le repertoire /func, on nettoie
    423 if (nrep == "func")  {
     422// Si c'est le repertoire /autoc, on nettoie
     423if (nrep == "autoc")  {
    424424  CleanDir(nrep);
    425425  }
     
    439439it = myObjs->find(nom);
    440440if (it != myObjs->end()) { // l'objet existe deja
    441   if (nrep == "func") {  // Dans /func , on garde les objets affiches, donc del. par Clean
     441  if (nrep == "autoc") {  // Dans /autoc , on garde les objets affiches, donc del. par Clean
    442442    sprintf(buff, "%d", (*it).second.oid);
    443     string nomnew = "/func/" + nobj + buff;
     443    string nomnew = "/autoc/" + nobj + buff;
    444444    RenameObj(nom, nomnew);
    445445    }                             
  • trunk/SophyaPI/PIext/pawexecut.cc

    r463 r466  
    55#include <typeinfo>
    66
     7#include "strutil.h"
     8#include "cvector.h"
     9#include "matrix.h"
     10#include "histos.h"
    711#include "histos.h"
    812#include "histos2.h"
     13#include "hisprof.h"
    914#include "ntuple.h"
    1015
    1116#include "pawexecut.h"
    1217#include "nobjmgr.h"
     18#include "servnobjm.h"
    1319#include "pistdimgapp.h"
    1420
     21/* Reza + cmv  13/10/99 */
     22
     23/* methode */
    1524PAWExecutor::PAWExecutor(PIACmd *piac, PIStdImgApp* app)
    16   : mApp(app)
     25: mApp(app)
    1726{
    1827string kw, usage;
    1928string hgrp = "pawCmd";
    20 kw = "h/op/res";
    21 usage = "Reset histogram - " ;
    22 piac->RegisterCommand(kw,usage,this,hgrp);
    23 }
    24 
     29
     30kw = "reset";
     31usage = "Reset histograms vectors or matrix";
     32usage += "\n reset nameobj";
     33piac->RegisterCommand(kw,usage,this,hgrp);
     34
     35kw = "n/plot";
     36usage = "Plot NTuple variable a la paw";
     37usage += "\n n/plot nameobj.x_exp [cut] [w_exp] [gratt]";
     38usage += "\n n/plot nameobj.y_exp%x_exp [cut] [w_exp] [gratt]";
     39usage += "\n n/plot nameobj.z_exp%y_exp%x_exp [cut] [gratt]";
     40usage += "\n  Related commands: plot2dw plot3d"; 
     41piac->RegisterCommand(kw,usage,this,hgrp);
     42
     43kw = "n/proj";
     44usage = "Project NTuple in histogram (1D or 2D) a la paw";
     45usage += "\n n/proj nameproj nameobj.x_exp [cut] [w_exp] [gratt]";
     46usage += "\n n/proj nameproj nameobj.y_exp%x_exp [cut] [w_exp] [gratt]";
     47usage += "\n  Related commands: projh1d projh2d projprof"; 
     48piac->RegisterCommand(kw,usage,this,hgrp);
     49
     50kw = "h/integ";
     51usage = "Integrate a 1D histogram or profile";
     52usage += "\n h/integ nameh1d [norm]";
     53usage += "\n  Related commands: h/deriv"; 
     54piac->RegisterCommand(kw,usage,this,hgrp);
     55
     56kw = "h/deriv";
     57usage = "Derivate a 1D histogram or profile";
     58usage += "\n h/deriv nameh1d";
     59usage += "\n  Related commands: h/integ"; 
     60piac->RegisterCommand(kw,usage,this,hgrp);
     61
     62kw = "h/rebin";
     63usage = "Rebin a 1D histogram or profile";
     64usage += "\n h/rebin nbin";
     65piac->RegisterCommand(kw,usage,this,hgrp);
     66
     67kw = "h/cadd";
     68usage = "Add a constant to an histogramme";
     69usage += "\n h/cadd val";
     70usage += "\n  Related commands: h/cmult"; 
     71piac->RegisterCommand(kw,usage,this,hgrp);
     72
     73kw = "h/cmult";
     74usage = "Multiply an histogramme by a constant";
     75usage += "\n h/cmult val";
     76usage += "\n  Related commands: h/cadd"; 
     77piac->RegisterCommand(kw,usage,this,hgrp);
     78
     79kw = "h/plot/2d";
     80usage = "Specific plot for 2D histogrammes";
     81usage += "\n h/plot/2d nameh2d show        : infos on 2D histogramme";
     82usage += "\n h/plot/2d nameh2d h    [dopt] : plot 2D histogramme";
     83usage += "\n h/plot/2d nameh2d px   [dopt] : plot X projection";
     84usage += "\n h/plot/2d nameh2d py   [dopt] : plot Y projection";
     85usage += "\n h/plot/2d nameh2d bx n [dopt] : plot X band number n";
     86usage += "\n h/plot/2d nameh2d by n [dopt] : plot Y band number n";
     87usage += "\n h/plot/2d nameh2d sx n [dopt] : plot X slice number n";
     88usage += "\n h/plot/2d nameh2d sy n [dopt] : plot Y slice number n";
     89usage += "\n                      n < 0 means Show Info";
     90piac->RegisterCommand(kw,usage,this,hgrp);
     91}
     92
     93/* methode */
    2594PAWExecutor::~PAWExecutor()
    2695{
    2796}
    2897
     98/* methode */
    2999int PAWExecutor::Execute(string& kw, vector<string>& tokens)
    30100{
    31 if(kw == "h/op/res") {
    32   cout << " CMV-A faire - h/op/res pas implemente " << endl;
    33   return(0);
     101if(kw == "reset") {
     102  reset(tokens); return(0);
     103} else if(kw == "n/plot") {
     104  n_plot(tokens); return(0);
     105} else if(kw == "n/proj") {
     106  n_proj(tokens); return(0);
     107} else if(kw == "h/integ") {
     108  h_integ(tokens); return(0);
     109} else if(kw == "h/deriv") {
     110  h_deriv(tokens); return(0);
     111} else if(kw == "h/rebin") {
     112  h_rebin(tokens); return(0);
     113} else if(kw == "h/cadd") {
     114  h_cadd(tokens); return(0);
     115} else if(kw == "h/cmult") {
     116  h_cmult(tokens); return(0);
     117} else if(kw == "h/plot/2d") {
     118  h_plot_2d(tokens); return(0);
     119} else return(1);
     120}
     121
     122/* methode */
     123void PAWExecutor::reset(vector<string>& tokens)
     124// Reset d'histogrammes, vecteurs et matrices
     125{
     126if(tokens.size() < 1)
     127  {cout<<"Usage: reset nameobj"<<endl;
     128  return;}
     129NamedObjMgr omg;
     130AnyDataObj* mobj = omg.GetObj(tokens[0]);
     131if(mobj == NULL)
     132  {cout<<"PAWExecutor::reset Error , Pas d'objet de nom "<<tokens[0]<<endl;
     133   return;}
     134string ctyp = typeid(*mobj).name();
     135
     136if(typeid(*mobj)==typeid(Vector))       {Vector*  ob=(Vector*) mobj; ob->Zero();}
     137else if(typeid(*mobj)==typeid(Matrix))  {Matrix*  ob=(Matrix*) mobj; ob->Zero();}
     138else if(typeid(*mobj)==typeid(Histo))   {Histo*   ob=(Histo*)  mobj; ob->Zero();}
     139else if(typeid(*mobj)==typeid(HProf))   {HProf*   ob=(HProf*)  mobj; ob->Zero();}
     140else if(typeid(*mobj)==typeid(Histo2D)) {Histo2D* ob=(Histo2D*)mobj; ob->Zero();}
     141else {
     142  cout<<"PAWExecutor::reset Error , No reset possible on "<<ctyp<<endl;
     143  return;
     144}
     145
     146return;
     147}
     148
     149/* methode */
     150void PAWExecutor::n_plot(vector<string>& tokens)
     151// Equivalent n/plot de paw
     152// Plot 1D
     153//   n/plot nameobj.x_exp [cut] [w_exp] [gratt]
     154// Plot 2D (plot2dw)
     155//   n/plot nameobj.y_exp%x_exp [cut] [w_exp] [gratt]
     156// Plot 3D (plot3d)
     157//   n/plot nameobj.z_exp%y_exp%x_exp [cut] [gratt]
     158{
     159if(tokens.size() < 1) {
     160  cout
     161  <<"Usage: n/plot nameobj.[z_exp%y_exp%]x_exp [cut] [w_exp] [gratt]"<<endl
     162  <<"       n/plot nameobj.z_exp%y_exp%x_exp [cut] [gratt]"<<endl;
     163  return;
     164}
     165string nameobj,expx,expy,expz;
     166int nvar = decodepawstring(tokens[0],nameobj,expx,expy,expz);
     167string expcut = "1";
     168string expwt = "1.";
     169string dopt = "";
     170string loop = "";
     171if(tokens.size()>=2) expcut = tokens[1];
     172if(tokens.size()>=3) expwt  = tokens[2];
     173if(tokens.size()>=4) dopt   = tokens[3];
     174
     175
     176NamedObjMgr omg;
     177Services2NObjMgr* srvo = omg.GetServiceObj();
     178
     179if(nvar<=0) {
     180  cout<<"PAWExecutor::n_plot Error: bad coding "<<tokens[0]<<endl;
     181} else if(nvar==1) { // c'est un plot 1D
     182  string nameproj = "/autoc/paw_n_plot1D";
     183  AnyDataObj* mobj = omg.GetObj(nameproj);
     184  if(mobj!=NULL) omg.DelObj(nameproj);
     185  srvo->ProjectH1(nameobj,expx,expwt,expcut,nameproj,dopt,loop);
     186} else if(nvar==2) { // c'est un plot 2D
     187  srvo->DisplayPoints2DW(nameobj,expx,expy,expwt,expcut,dopt,loop);
     188} else {             // c'est un plot 3D
     189  srvo->DisplayPoints3D(nameobj,expx,expy,expz,expcut,dopt,loop);
     190}
     191
     192return;
     193}
     194
     195/* methode */
     196void PAWExecutor::n_proj(vector<string>& tokens)
     197// Equivalent n/proj de paw
     198// Project NTuple in histogram a la paw
     199// Dans un Histo 1D
     200//   n/proj nameproj nameobj.x_exp [cut] [w_exp] [gratt]
     201// Dans un Histo 2D ou un HProf (dans ce cas nameproj doit etre cree).
     202//   n/proj nameproj nameobj.y_exp%x_exp [cut] [w_exp] [gratt]
     203{
     204if(tokens.size()<2)
     205  {cout<<"Usage: n/proj nameproj nameobj.[y_exp%]x_exp [cut] [w_exp] [gratt]"<<endl;
     206  return;}
     207string nameproj = tokens[0];
     208string nameobj,expx,expy,expz;
     209int nvar = decodepawstring(tokens[1],nameobj,expx,expy,expz);
     210string expcut = "1";
     211string expwt = "1.";
     212string dopt = "";
     213string loop = "";
     214if(tokens.size()>=3) expcut = tokens[2];
     215if(tokens.size()>=4) expwt  = tokens[3];
     216if(tokens.size()>=5) dopt   = tokens[4];
     217
     218NamedObjMgr omg;
     219Services2NObjMgr* srvo = omg.GetServiceObj();
     220
     221if(nvar<=0) {
     222  cout<<"PAWExecutor::n_proj Error: bad coding "<<tokens[1]<<endl;
     223} else if(nvar==1) {
     224  // c'est une projection dans un histo 1D
     225  srvo->ProjectH1(nameobj,expx,expwt,expcut,nameproj,dopt,loop);
     226} else {
     227  // c'est une projection dans un histo2D
     228  // OU un HProf si nameproj est HProf un deja defini
     229  AnyDataObj* mobj = omg.GetObj(nameproj);
     230  if(mobj==NULL)
     231    srvo->ProjectH2(nameobj,expx,expy,expwt,expcut,nameproj,dopt,loop);
     232  else if(dynamic_cast<HProf*>(mobj))
     233    srvo->ProjectHProf(nameobj,expx,expy,expwt,expcut,nameproj,dopt,loop);
     234  else
     235    srvo->ProjectH2(nameobj,expx,expy,expwt,expcut,nameproj,dopt,loop);
     236}
     237
     238return;
     239}
     240
     241/* methode */
     242void PAWExecutor::h_integ(vector<string>& tokens)
     243// Pour remplacer le contenu d'un histo 1D par son integrale
     244{
     245if(tokens.size()<1)
     246  {cout<<"Usage: h/integ nameh1d [norm]"<<endl; return;}
     247NamedObjMgr omg;
     248AnyDataObj* mobj = omg.GetObj(tokens[0]);
     249if(mobj==NULL)
     250  {cout<<"PAWExecutor::h_integ Error: unknow object"<<tokens[0]<<endl;
     251  return;}
     252double norm = 1.;
     253if(tokens.size()>=2) norm = atof(tokens[1].c_str());
     254Histo* h1 = dynamic_cast<Histo*>(mobj);
     255// Le HProf se fait tout seul avec Histo: dynamic_cast<Histo*>(HProf)=Vrai!
     256//HProf* hp = dynamic_cast<HProf*>(mobj);
     257if(h1)      h1->HInteg(norm);
     258//else if(hp) hp->HInteg(norm);
     259else cout<<"PAWExecutor::h_integ Error: "<<tokens[0]<<" not an Histo/HProf"<<endl;
     260}
     261
     262/* methode */
     263void PAWExecutor::h_deriv(vector<string>& tokens)
     264// Pour remplacer le contenu d'un histo 1D par sa derivee
     265{
     266if(tokens.size()<1)
     267  {cout<<"Usage: h/deriv nameh1d"<<endl; return;}
     268NamedObjMgr omg;
     269AnyDataObj* mobj = omg.GetObj(tokens[0]);
     270if(mobj==NULL)
     271  {cout<<"PAWExecutor::h_deriv Error: unknow object"<<tokens[0]<<endl;
     272  return;}
     273Histo* h1 = dynamic_cast<Histo*>(mobj);
     274//HProf* hp = dynamic_cast<HProf*>(mobj);
     275if(h1)      h1->HDeriv();
     276//else if(hp) hp->HDeriv();
     277else cout<<"PAWExecutor::h_deriv Error: "<<tokens[0]<<" not an Histo/HProf"<<endl;
     278}
     279
     280/* methode */
     281void PAWExecutor::h_rebin(vector<string>& tokens)
     282// Pour re-binner un histogramme 1D
     283{
     284if(tokens.size()<2)
     285  {cout<<"Usage: h/rebin nameh1d nbin"<<endl; return;}
     286NamedObjMgr omg;
     287AnyDataObj* mobj = omg.GetObj(tokens[0]);
     288if(mobj==NULL)
     289  {cout<<"PAWExecutor::h_rebin Error: unknow object"<<tokens[0]<<endl;
     290  return;}
     291int nbin = atoi(tokens[1].c_str());
     292Histo* h1 = dynamic_cast<Histo*>(mobj);
     293//HProf* hp = dynamic_cast<HProf*>(mobj);
     294if(h1)      h1->HRebin(nbin);
     295//else if(hp) hp->HRebin(nbin);
     296else cout<<"PAWExecutor::h_rebin Error: "<<tokens[0]<<" not an Histo/HProf"<<endl;
     297}
     298
     299/* methode */
     300void PAWExecutor::h_cadd(vector<string>& tokens)
     301// Additionne une constante a un histogramme
     302{
     303if(tokens.size()<2)
     304  {cout<<"Usage: h/cadd nameh1d val"<<endl; return;}
     305NamedObjMgr omg;
     306AnyDataObj* mobj = omg.GetObj(tokens[0]);
     307if(mobj==NULL)
     308  {cout<<"PAWExecutor::h_cadd Error: unknow object"<<tokens[0]<<endl;
     309  return;}
     310double val = atof(tokens[1].c_str());
     311Histo*   h1 = dynamic_cast<Histo*>(mobj);
     312Histo2D* h2 = dynamic_cast<Histo2D*>(mobj);
     313if(h1)      *h1 += val;
     314else if(h2) *h2 += val;
     315else cout<<"PAWExecutor::h_cadd Error: "<<tokens[0]<<" not an Histo/HProf/Histo2D"<<endl;
     316}
     317
     318/* methode */
     319void PAWExecutor::h_cmult(vector<string>& tokens)
     320// Multiplie un histogramme par une constante
     321{
     322if(tokens.size()<2)
     323  {cout<<"Usage: h/cmult nameh1d val"<<endl; return;}
     324NamedObjMgr omg;
     325AnyDataObj* mobj = omg.GetObj(tokens[0]);
     326if(mobj==NULL)
     327  {cout<<"PAWExecutor::h_cmult Error: unknow object"<<tokens[0]<<endl;
     328  return;}
     329double val = atof(tokens[1].c_str());
     330Histo*   h1 = dynamic_cast<Histo*>(mobj);
     331Histo2D* h2 = dynamic_cast<Histo2D*>(mobj);
     332if(h1)      *h1 *= val;
     333else if(h2) *h2 *= val;
     334else cout<<"PAWExecutor::h_cmult Error: "<<tokens[0]
     335         <<" not an Histo/HProf/Histo2D"<<endl;
     336}
     337
     338/* methode */
     339void PAWExecutor::h_plot_2d(vector<string>& tokens)
     340// plot for 2D histogramme: plot histo, bandx/y, slicex/y or projx/y
     341{
     342if(tokens.size()<2)
     343  {cout<<"Usage: h/plot/2d nameh2d to_plot [n/s] [dopt]"<<endl; return;}
     344NamedObjMgr omg;
     345AnyDataObj* mobj = omg.GetObj(tokens[0]);
     346if(mobj==NULL)
     347  {cout<<"PAWExecutor::h_plot_2d Error: unknow object"<<tokens[0]<<endl;
     348  return;}
     349Histo2D* h2 = dynamic_cast<Histo2D*>(mobj);
     350if(!h2)
     351  {cout<<"PAWExecutor::h_plot_2d Error: "<<tokens[0]<<" not an Histo2D"<<endl;
     352  return;}
     353
     354Histo* h1p = NULL; string nametoplot = "/autoc/h_plot_2d_h1";
     355AnyDataObj* mobjh1 = omg.GetObj(nametoplot);
     356if(mobjh1!=NULL) omg.DelObj(nametoplot);
     357
     358string dopt = ""; if(tokens.size()>=3) dopt = tokens[2];
     359if(tokens[1] == "show") {
     360  h2->ShowProj();
     361  h2->ShowBand(2);
     362  h2->ShowSli(2);
     363  return;
     364} else if(tokens[1] == "h") {
     365  nametoplot = tokens[0];
     366} else if(tokens[1] == "px") { 
     367  if((h1p=h2->HProjX())) {Histo* h1=new Histo(*h1p); omg.AddObj(h1,nametoplot);}
     368    else {h2->ShowProj(); return;}
     369} else if(tokens[1] == "py") {
     370  if((h1p=h2->HProjY())) {Histo* h1=new Histo(*h1p); omg.AddObj(h1,nametoplot);}
     371    else {h2->ShowProj(); return;}
     372} else {
     373  if(tokens.size()<3)
     374    {cout<<"Usage: h/plot/2d nameh2d bx/by/sx/sy n [dopt]"<<endl; return;}
     375  int n = atoi(tokens[2].c_str());
     376  dopt = ""; if(tokens.size()>=4) dopt = tokens[3];
     377  if(tokens[1] == "bx") {
     378    if((h1p=h2->HBandX(n))) {Histo* h1=new Histo(*h1p); omg.AddObj(h1,nametoplot);}
     379    else {h2->ShowBand(); return;}
     380  } else if(tokens[1] == "by") {
     381    if((h1p=h2->HBandY(n))) {Histo* h1=new Histo(*h1p); omg.AddObj(h1,nametoplot);}
     382    else {h2->ShowBand(); return;}
     383  } else if(tokens[1] == "sx") {
     384    if((h1p=h2->HSliX(n))) {Histo* h1=new Histo(*h1p); omg.AddObj(h1,nametoplot);}
     385    else {h2->ShowSli(); return;}
     386  } else if(tokens[1] == "sy") {
     387    if((h1p=h2->HSliY(n))) {Histo* h1=new Histo(*h1p); omg.AddObj(h1,nametoplot);}
     388    else {h2->ShowSli(); return;}
    34389  }
    35 else return(1);
    36 }
     390}
     391
     392omg.DisplayObj(nametoplot,dopt);
     393}
     394
     395/* methode */
     396int PAWExecutor::decodepawstring(string tokens,string& nameobj
     397                                ,string& xexp,string& yexp,string& zexp)
     398// Decodage general de "nameobj.xexp"
     399//                     "nameobj.yexp%xexp"
     400//                     "nameobj.zexp%yexp%xexp"
     401// Return: nombre de variables trouvees, -1 si probleme
     402{
     403nameobj = ""; xexp= ""; yexp= ""; zexp= "";
     404
     405int lt = (int) tokens.length();
     406if(lt<=0) return -1;
     407
     408// decodage de la chaine de type PAW.
     409char *str = new char[lt+2];
     410strcpy(str,tokens.c_str()); strip(str,'B',' '); lt = strlen(str);
     411//cout<<"chaine1["<<lt<<"] :"<<str<<":"<<endl;
     412char *c[3] = {NULL,NULL,NULL};
     413int i, np=0; bool namefound = false;
     414for(int i=0;i<lt;i++) {
     415  if(!namefound && str[i]=='.') {
     416    str[i]='\0';
     417    namefound=true;
     418    c[np] = str+i+1; np++;
     419  }
     420  if( namefound && str[i]=='%') {
     421    str[i]='\0';
     422    if(np<3) {c[np] = str+i+1; np++;}
     423  }
     424}
     425//cout<<"chaine2 :"; for(i=0;i<lt;i++) cout<<str[i]; cout<<":"<<endl;
     426
     427// Remplissage du nom et des variables
     428nameobj = str;
     429if(np==1)  xexp=c[0];
     430if(np==2) {yexp=c[0]; xexp=c[1];}
     431if(np==3) {zexp=c[0]; yexp=c[1]; xexp=c[2];}
     432//cout<<"pawstring str,c[0-2] "<<str<<" "<<c[0]<<" "<<c[1]<<" "<<c[2]<<endl;
     433delete [] str;
     434
     435// Comptage des variables
     436np = -1;
     437if(nameobj.length()>0)
     438  {np = 0; if(xexp.length()>0)
     439             {np++; if(yexp.length()>0)
     440                      {np++; if(zexp.length()>0) np++;}}}
     441cout<<"pawstring["<<np<<"] name="<<nameobj
     442    <<" xexp="<<xexp<<" yexp="<<yexp<<" zexp="<<zexp<<endl;
     443return np;
     444}
  • trunk/SophyaPI/PIext/pawexecut.h

    r463 r466  
    2020  virtual int      Execute(string& keyw, vector<string>& args);
    2121protected:
     22  void reset(vector<string>& tokens);
     23  void n_plot(vector<string>& tokens);
     24  void n_proj(vector<string>& tokens);
     25  void h_integ(vector<string>& tokens);
     26  void h_deriv(vector<string>& tokens);
     27  void h_rebin(vector<string>& tokens);
     28  void h_cadd(vector<string>& tokens);
     29  void h_cmult(vector<string>& tokens);
     30  void h_plot_2d(vector<string>& tokens);
     31  int  decodepawstring(string tokens,string& nameobj
     32                      ,string& xexp,string& yexp,string& zexp);
    2233  PIStdImgApp* mApp;
    2334};
    2435
    2536#endif
    26 
  • trunk/SophyaPI/PIext/piafitting.cc

    r392 r466  
    5454
    5555////////////////////////////////////////////////////////////////////////
     56// --- Generation automatique du "usage" pour helpfit:
     57// 1-/ copier le texte ci-dessous de piafitting.cc dans toto
     58// 2-/ cat toto | sed 's?^//?usage+="\\n?' | sed 's?$?    ";?'
     59// NE PAS EFFACER LA SUITE: c'est elle qui doit etre modifiee,
     60// le usage du helpfit sera regenere a l'aide des commandes ci-dessus.
     61////////////////////////////////////////////////////////////////////////
    5662//| --------------- Fit Lineaire a 1 et 2 dimensions ---------------
    5763//| Syntaxe:
    5864//| fitlin nom pnn [o:.aa,bb,cc, o;dd,ee,ff o:gg,hh,jj,kk etc...]
    5965//| avec:
    60 //| nom  : cf commentaire ordre "fit"
     66//| nom  : cf commentaire ordre ''fit''
    6167//| pnn  : fit polynome degre nn avec classe Poly (lineaire) 1D ou 2D
    62 //| o:aa,...,bb : cf commentaires ordre "fit"
     68//| o:aa,...,bb : cf commentaires ordre ''fit''
    6369//|
    6470////////////////////////////////////////////////////////////////////////
     
    6975//|     [p:p1,p2,...,pn s:s1,s2,...,sn m:m1,m2,...,mn M:M1,mM2,...,Mn f:f1,...,fn]
    7076//|     [o:.aa,bb,cc, o;dd,ee,ff o:gg,hh,jj,kk etc...]
    71 //| cf commentaire ordre "fit"
     77//| cf commentaire ordre ''fit''
    7278//|
    7379////////////////////////////////////////////////////////////////////////
     
    109115//|
    110116//|----- OPTIONS -----
    111 //| o    : options "o:Eaa.b,eaa.b,f,r,caa.b,Xaa.b"
     117//| o    : options ''o:Eaa.b,eaa.b,f,r,caa.b,Xaa.b''
    112118//|      F : initialisation a partir des resultats et de l'etat du fit precedent
    113119//|          (option non prioritaire sur les definitions p:,s:,m:,M:,f:o:)
    114120//|      a : initialisation automatique des parametres du fit (si disponible)
    115121//|          (option non prioritaire sur les definitions p:,s:,m:,M:,f:o:
    116 //|           et sur l'initialisation pa l'option "F")
     122//|           et sur l'initialisation pa l'option ''F'')
    117123//|      f : generation d'un Objet identique contenant la fonction fittee
    118124//|      r : generation d'un Objet identique contenant les residus
    119125//|      Xaa.b : aa.b valeur du DXi2 d'arret (def=1.e-3)
    120126//|      Naa : aa nombre maximum d'iterations (def=100)
    121 //|      la : niveau "a" de print: a=niveau de print Fit1/2D
    122 //|      da : niveau "a" de debug: a=niveau de GeneralFit
     127//|      la : niveau ''a'' de print: a=niveau de print Fit1/2D
     128//|      da : niveau ''a'' de debug: a=niveau de GeneralFit
    123129//|      Ii1/i2 : numeros des bins X de l'histos utilises pour le fit [i1,i2]
    124130//|2D    Jj1/j2 : numeros des bins Y de l'histos utilises pour le fit [j1,j2]
     
    137143//|          Actif pour  exp+poly 1D, poly 1D
    138144//|          Pour gauss+poly 1D, xc est le centre de la gaussienne.
    139 //|2D    yaa.b et y : idem "xaa.b et x" mais pour y
     145//|2D    yaa.b et y : idem ''xaa.b et x'' mais pour y
    140146//|
    141147////////////////////////////////////////////////////////////////////////
     
    156162//|            double gauss2_der(double const* x,double const* p,double* dp)
    157163//|     ou dp[i] = dF(x[];p[])/dp[i]
    158 //|     Par convention, cette fonction a le meme nom suivi de "_der"
     164//|     Par convention, cette fonction a le meme nom suivi de ''_der''
    159165//| > crfitfun nom_fichier nom_fonction nvar npar
    160 //|     Permet de compiler le fichier "nom_fichier" et de linker
    161 //|     la fonction "nom_fonction"
     166//|     Permet de compiler le fichier ''nom_fichier'' et de linker
     167//|     la fonction ''nom_fonction''
    162168//|   - Un meme fichier peut contenir plusieurs fonctions a fitter
    163169//|
     
    184190
    185191// enregistrement des ordres de fit
    186 string kw, usage;
     192string kw, usage, grp = "Fitting";
     193
     194kw = "helpfit";
     195usage="";
     196usage+="\n//////////////////////////////////////////////////////////////////////    ";
     197usage+="\n| --------------- Fit Lineaire a 1 et 2 dimensions ---------------    ";
     198usage+="\n| Syntaxe:    ";
     199usage+="\n| fitlin nom pnn [o:.aa,bb,cc, o;dd,ee,ff o:gg,hh,jj,kk etc...]    ";
     200usage+="\n| avec:    ";
     201usage+="\n| nom  : cf commentaire ordre ''fit''    ";
     202usage+="\n| pnn  : fit polynome degre nn avec classe Poly (lineaire) 1D ou 2D    ";
     203usage+="\n| o:aa,...,bb : cf commentaires ordre ''fit''    ";
     204usage+="\n|    ";
     205usage+="\n//////////////////////////////////////////////////////////////////////    ";
     206usage+="\n| --------------- Fit d'objets a 1 et 2 dimensions ---------------    ";
     207usage+="\n|                 avec interface d'aide graphique    ";
     208usage+="\n| Syntaxe:    ";
     209usage+="\n| fitw nom func    ";
     210usage+="\n|     [p:p1,p2,...,pn s:s1,s2,...,sn m:m1,m2,...,mn M:M1,mM2,...,Mn f:f1,...,fn]    ";
     211usage+="\n|     [o:.aa,bb,cc, o;dd,ee,ff o:gg,hh,jj,kk etc...]    ";
     212usage+="\n| cf commentaire ordre ''fit''    ";
     213usage+="\n|    ";
     214usage+="\n//////////////////////////////////////////////////////////////////////    ";
     215usage+="\n| --------------- Fit d'objets a 1 et 2 dimensions ---------------    ";
     216usage+="\n| Syntaxe:    ";
     217usage+="\n| fit nom func    ";
     218usage+="\n|     [p:p1,p2,...,pn s:s1,s2,...,sn m:m1,m2,...,mn M:M1,mM2,...,Mn f:f1,...,fn]    ";
     219usage+="\n|     [o:.aa,bb,cc, o;dd,ee,ff o:gg,hh,jj,kk etc...]    ";
     220usage+="\n|----- OBJET -----    ";
     221usage+="\n| nom  : nom de l'objet qui peut etre:    ";
     222usage+="\n|        fit-1D:  Vector,Histo1D,HProf ou GeneraFitData(1D)    ";
     223usage+="\n|        fit-2D:  Matrix,Histo2D,Image<T> ou GeneraFitData(2D)    ";
     224usage+="\n|    ";
     225usage+="\n|----- FUNCTION -----    ";
     226usage+="\n| func : pnn : fit polynome degre nn avec GeneralFit (non-lineaire) 1D ou 2D    ";
     227usage+="\n|      : gnn : fit gaussienne (hauteur) + polynome de degre nn 1D    ";
     228usage+="\n|      : g   : fit gaussienne (hauteur) 1D    ";
     229usage+="\n|      : enn : fit exponentielle + polynome de degre nn 1D    ";
     230usage+="\n|      : e   : fit exponentielle 1D    ";
     231usage+="\n|      : Gnn : fit gaussienne (volume) + polynome de degre nn 1D    ";
     232usage+="\n|      : G   : fit gaussienne (volume) 1D    ";
     233usage+="\n|      :     : fit gaussienne+fond (volume) 2D    ";
     234usage+="\n|      : Gi  : fit gaussienne+fond integree (volume) 2D    ";
     235usage+="\n|      : d   : fit DL de gaussienne+fond (volume) 2D    ";
     236usage+="\n|      : di  : fit DL de gaussienne+fond integree (volume) 2D    ";
     237usage+="\n|      : D   : fit DL de gaussienne+fond avec coeff variable p6 (volume) 2D    ";
     238usage+="\n|      : Di  : fit DL de gaussienne+fond integree avec coeff variable p6 (volume) 2D    ";
     239usage+="\n|      : M   : fit Moffat+fond (expos=p6) (volume) 2D    ";
     240usage+="\n|      : Mi  : fit Moffat+fond integree (expos=p6) (volume) 2D    ";
     241usage+="\n|      : Autre : fonction definie par l'utilisateur (cf commentaires ci apres)    ";
     242usage+="\n|    ";
     243usage+="\n|----- INIT PARAMETRES ET ETAT DU FIT -----    ";
     244usage+="\n| p    : p1,...,pn : valeur d'initialisation des parametres (def=0)    ";
     245usage+="\n| s    : s1,...,sn : valeur des steps de depart (def=1)    ";
     246usage+="\n| m    : m1,...,mn : valeur des minima (def=1)    ";
     247usage+="\n| M    : M1,...,Mn : valeur des maxima (def=-1) (max<=min : pas de limite)    ";
     248usage+="\n| f    : f1,...,fn : si >=1 parametre fixe sinon libre (def=0)    ";
     249usage+="\n| - Remarque: si pi,si,mi ou Mi = '!' la valeur correspondante n'est pas changee    ";
     250usage+="\n|    ";
     251usage+="\n|----- OPTIONS -----    ";
     252usage+="\n| o    : options ''o:Eaa.b,eaa.b,f,r,caa.b,Xaa.b''    ";
     253usage+="\n|      F : initialisation a partir des resultats et de l'etat du fit precedent    ";
     254usage+="\n|          (option non prioritaire sur les definitions p:,s:,m:,M:,f:o:)    ";
     255usage+="\n|      a : initialisation automatique des parametres du fit (si disponible)    ";
     256usage+="\n|          (option non prioritaire sur les definitions p:,s:,m:,M:,f:o:    ";
     257usage+="\n|           et sur l'initialisation pa l'option ''F'')    ";
     258usage+="\n|      f : generation d'un Objet identique contenant la fonction fittee    ";
     259usage+="\n|      r : generation d'un Objet identique contenant les residus    ";
     260usage+="\n|      Xaa.b : aa.b valeur du DXi2 d'arret (def=1.e-3)    ";
     261usage+="\n|      Naa : aa nombre maximum d'iterations (def=100)    ";
     262usage+="\n|      la : niveau ''a'' de print: a=niveau de print Fit1/2D    ";
     263usage+="\n|      da : niveau ''a'' de debug: a=niveau de GeneralFit    ";
     264usage+="\n|      Ii1/i2 : numeros des bins X de l'histos utilises pour le fit [i1,i2]    ";
     265usage+="\n|2D    Jj1/j2 : numeros des bins Y de l'histos utilises pour le fit [j1,j2]    ";
     266usage+="\n|    - L'erreur est celle associee a l'objet (si elle existe),    ";
     267usage+="\n|      elle est mise a 1 sinon, sauf si E... ou e... est precise:    ";
     268usage+="\n|      Eaa.b : si |val|>=1 erreur = aa.b*sqrt(|val|)    ";
     269usage+="\n|              si |val|<1  erreur = aa.b    ";
     270usage+="\n|              si aa.b <=0 alors aa.b=1.0    ";
     271usage+="\n|              E seul est equivalent a E1.0    ";
     272usage+="\n|      eaa.b : erreur = aa.b    ";
     273usage+="\n|              si aa.b <=0 alors aa.b=1.0    ";
     274usage+="\n|              e seul est equivalent a e1.0    ";
     275usage+="\n|      xaa.b : demande de centrage: on fit x-aa.b au lieu de x)    ";
     276usage+="\n|      x : demande de centrage: on fit x-xc au lieu de x    ";
     277usage+="\n|          avec xc=abscisse du milieu de l'histogramme    ";
     278usage+="\n|          Actif pour  exp+poly 1D, poly 1D    ";
     279usage+="\n|          Pour gauss+poly 1D, xc est le centre de la gaussienne.    ";
     280usage+="\n|2D    yaa.b et y : idem ''xaa.b et x'' mais pour y    ";
     281usage+="\n|    ";
     282usage+="\n//////////////////////////////////////////////////////////////////////    ";
     283usage+="\n| --------------- Def des fcts de fit par l'utilisateur ---------------    ";
     284usage+="\n| Pour definir une fonction parametree utilisateur:    ";
     285usage+="\n| Un exemple de fichier contenant des fonctions a fitter: PIext/userfitfunex.c    ";
     286usage+="\n| > crfitfil nom_fichier nom_fonction nvar npar    ";
     287usage+="\n|     pour creer un squelette de fichier C contenant la fonction a fitter    ";
     288usage+="\n|            nom_fichier : nom du fichier ou est le code de la fonction    ";
     289usage+="\n|                          c'est un fichier C de nom blabla.c    ";
     290usage+="\n|            nom_fonction : nom de la fonction ex: gauss2    ";
     291usage+="\n|            nvar : nombre de variables x[] (1D=1, 2D=2, etc...)    ";
     292usage+="\n|            npar : nombre de parametre p[]    ";
     293usage+="\n|   - La fonction est donc F(x[];p[]), soit par ex:    ";
     294usage+="\n|            double gauss2(double const* x,double const* p)    ";
     295usage+="\n|   - L'utilisateur a la possibilite de donner egalement la fonction    ";
     296usage+="\n|     retournant les derivees de la fonction par rapport aux parametres    ";
     297usage+="\n|            double gauss2_der(double const* x,double const* p,double* dp)    ";
     298usage+="\n|     ou dp[i] = dF(x[];p[])/dp[i]    ";
     299usage+="\n|     Par convention, cette fonction a le meme nom suivi de ''_der''    ";
     300usage+="\n| > crfitfun nom_fichier nom_fonction nvar npar    ";
     301usage+="\n|     Permet de compiler le fichier ''nom_fichier'' et de linker    ";
     302usage+="\n|     la fonction ''nom_fonction''    ";
     303usage+="\n|   - Un meme fichier peut contenir plusieurs fonctions a fitter    ";
     304usage+="\n|    ";
     305usage+="\n//////////////////////////////////////////////////////////////////////    ";
     306piac->RegisterHelp(kw,usage,grp);
    187307
    188308kw = "fit";
     
    190310usage += "\n Usage: fit nomobj func [Options]";
    191311usage += "\n [p:p1,...,pn s:s1,...,sn m:m1,...,mn M:M1,...,Mn o:... o:...]";
    192 piac->RegisterCommand(kw,usage,this,"Fitting");
     312usage += "\n  Related commands: fitw fitlin crfitfun crfitfil"; 
     313piac->RegisterCommand(kw,usage,this,grp);
    193314
    194315kw = "fitw";
     
    196317usage += "\n Usage: fitw nomobj func [Options]";
    197318usage += "\n [p:p1,...,pn s:s1,...,sn m:m1,...,mn M:M1,...,Mn o:... o:...]";
    198 piac->RegisterCommand(kw,usage,this,"Fitting");
     319usage += "\n  Related commands: fit fitlin crfitfun crfitfil"; 
     320piac->RegisterCommand(kw,usage,this,grp);
    199321
    200322kw = "fitlin";
    201323usage = "Linear Fitting of Polynoms to DataObjects";
    202324usage += "\n Usage: fitlin nomobj func [o:... o:...]";
    203 piac->RegisterCommand(kw,usage,this,"Fitting");
     325usage += "\n  Related commands: fit fitw crfitfun crfitfil"; 
     326piac->RegisterCommand(kw,usage,this,grp);
    204327
    205328kw = "crfitfun";
    206329usage = "Creation et link de function utilisateur pour le fit";
    207330usage += "\n Usage: crfitfun file func nvar npar";
    208 piac->RegisterCommand(kw,usage,this,"Fitting");
     331usage += "\n  Related commands: fit fitw fitlin crfitfil"; 
     332piac->RegisterCommand(kw,usage,this,grp);
    209333
    210334kw = "crfitfil";
    211335usage = "Creation de fichier C pour function utilisateur du fit";
    212336usage += "\n Usage: crfitfil file func nvar npar";
    213 piac->RegisterCommand(kw,usage,this,"Fitting");
     337usage += "\n  Related commands: fit fitw fitlin crfitfun"; 
     338piac->RegisterCommand(kw,usage,this,grp);
    214339}
    215340
  • trunk/SophyaPI/PIext/servnobjm.cc

    r463 r466  
    199199  if (nom.length() < 1) {
    200200     titre = "Function f(x)";
    201      nom = "/func/f_x";
     201     nom = "/autoc/f_x";
    202202    }
    203203  else titre = nom;
     
    261261  if (nom.length() < 1) {
    262262     titre = "Function f(x,y)";
    263      nom = "/func/f2d_xy";
     263     nom = "/autoc/f2d_xy";
    264264    }
    265265  else titre = nom;
     
    485485  double xmin, xmax, ymin, ymax;
    486486  nt->GetMinMax(0, xmin, xmax);
    487   nt->GetMinMax(0, ymin, ymax);
     487  nt->GetMinMax(1, ymin, ymax);
    488488  h2 = new Histo2D(xmin, xmax, 50, ymin, ymax, 50);
    489489  int k;
Note: See TracChangeset for help on using the changeset viewer.