Index: /trunk/SophyaPI/PIext/basexecut.cc
===================================================================
--- /trunk/SophyaPI/PIext/basexecut.cc	(revision 1066)
+++ /trunk/SophyaPI/PIext/basexecut.cc	(revision 1067)
@@ -638,4 +638,16 @@
   }
 
+else if (kw == "gdfrvec" ) {
+  if(tokens.size()<3) {
+    cout<<"Usage: gdfrvec namegfd X Y\n"
+        <<"       gdfrvec namegfd X Y"
+        <<"       gdfrvec namegfd X Y ! EY\n"
+        <<"       gdfrvec namegfd X Y Z\n"
+        <<"       gdfrvec namegfd X Y Z EZ"<<endl;
+    return(0);
+  }
+  while(tokens.size()<5) tokens.push_back("!");
+  srvo->FillGFDfrVec(tokens[0],tokens[1],tokens[2],tokens[3],tokens[4]);
+  }
 
 
@@ -1006,4 +1018,12 @@
 usage += "\n  Related commands: ntloop fillnt ObjectExpressions ..."; 
 mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
+kw = "gdfrvec";
+usage = "Fills a GeneralFitData with vectors X,Y,Z,EZ";
+usage += "\n Usage: gdfrvec namegfd X Y";
+usage += "\n Usage: gdfrvec namegfd X Y ! EY";
+usage += "\n Usage: gdfrvec namegfd X Y Z";
+usage += "\n Usage: gdfrvec namegfd X Y Z EZ";
+usage += "\n  Related commands: fillgd1 fillgd2 ..."; 
+mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
 
 }
Index: /trunk/SophyaPI/PIext/pawexecut.cc
===================================================================
--- /trunk/SophyaPI/PIext/pawexecut.cc	(revision 1066)
+++ /trunk/SophyaPI/PIext/pawexecut.cc	(revision 1067)
@@ -650,5 +650,5 @@
 // L'histogramme doit deja exister. Le nombre de bins remplit
 // depend des tailles respectives des 2 objets.
-// tokens[2] = "cont" : on remplit les valeurs de l'histogramme
+// tokens[2] = "cont" : on remplit les valeurs de l'histogramme (ou "!")
 //           = "err2" : on remplit les erreurs de l'histogramme
 {
@@ -657,4 +657,5 @@
    return;}
 string toput = "cont"; if(tokens.size()>2) toput = tokens[2];
+if(toput=="!") toput = "cont";
 if(toput!="cont" && toput!="err2")
   {cout<<"PAWExecutor::h_put_vec Error: unknow filling "<<toput<<endl;
@@ -697,5 +698,5 @@
 // Si le vecteur (matrice) n'existe pas, il est cree.
 // Le vecteur ou la matrice est re-dimensionne correctement.
-// tokens[2] = "cont" : on copie les valeurs de l'histogramme
+// tokens[2] = "cont" : on copie les valeurs de l'histogramme (ou "!")
 //           = "err2" : on copie les erreurs de l'histogramme
 //           = "absc" : on copie les erreurs de l'histogramme (1D only)
@@ -712,4 +713,5 @@
    return;}
 string toget = "cont"; if(tokens.size()>2) toget = tokens[2];
+if(toget=="!") toget = "cont";
 if(toget!="cont" && toget!="err2" && toget!="absc")
   {cout<<"PAWExecutor::h_get_vec Error: unknow filling "<<toget<<endl;
Index: /trunk/SophyaPI/PIext/piafitting.cc
===================================================================
--- /trunk/SophyaPI/PIext/piafitting.cc	(revision 1066)
+++ /trunk/SophyaPI/PIext/piafitting.cc	(revision 1067)
@@ -548,5 +548,5 @@
   else if(mH)  mOpt.xc = (mH->XMin()+mH->XMax())/2.;
   else if(mH2) mOpt.xc = (mH2->XMin()+mH2->XMax())/2.;
-  else if(mG)  {double mini,maxi; mG->GetMinMax(2,mini,maxi); mOpt.xc=(mini+maxi)/2.;}
+  else if(mG)  {double mini,maxi; mG->GetMnMx(2,mini,maxi); mOpt.xc=(mini+maxi)/2.;}
   else if(mIm) {mOpt.xc = mIm->XOrg() * mIm->XPxSize()*(mOpt.i2-mOpt.i1+1)/2.;}
 }
@@ -554,5 +554,5 @@
   if(mM)  mOpt.yc = (mOpt.j2-mOpt.j1+1)/2.;
   if(mH2) mOpt.yc = (mH2->YMin()+mH2->YMax())/2.;
-  if(mG)  {double mini,maxi; mG->GetMinMax(12,mini,maxi); mOpt.yc=(mini+maxi)/2.;}
+  if(mG)  {double mini,maxi; mG->GetMnMx(12,mini,maxi); mOpt.yc=(mini+maxi)/2.;}
   if(mIm) {mOpt.yc = mIm->YOrg() * mIm->YPxSize()*(mOpt.j2-mOpt.j1+1)/2.;}
 }
@@ -622,8 +622,18 @@
 }
 
-if(mOpt.lpg>1) {
+if(mOpt.lp>2) {
   mGData->PrintStatus();
   mGData->PrintData(0);
   mGData->PrintData(mGData->NData()-1);
+  double mini,maxi;
+  mGData->GetMnMx(2,mini,maxi);
+    cout<<"Limites ...x0 = ["<<mini<<","<<maxi<<"]"<<endl;
+  if(mNVar==2)
+    {mGData->GetMnMx(12,mini,maxi);
+     cout<<"Limites ...x1 = ["<<mini<<","<<maxi<<"]"<<endl;}
+  mGData->GetMnMx(0,mini,maxi);
+    cout<<"Limites ...y  = ["<<mini<<","<<maxi<<"]"<<endl;
+  mGData->GetMnMx(1,mini,maxi);
+    cout<<"Limites ...ey = ["<<mini<<","<<maxi<<"]"<<endl;
 }
 
@@ -1518,5 +1528,5 @@
 void PIAFitterWind::Process(PIMessage msg, PIMsgHandler* sender, void* data)
 {
-int lp = (mFitter->mOpt.lp>2)?1:0;;
+int lp = (mFitter->mOpt.lp>2)?1:0;
 int npar = mFitter->mNPar;
 
@@ -1596,5 +1606,4 @@
   if(ReFillGData) mFitter->FillGData();
   ReFillGData = false;
-  if(mFitter->mFit) mFitter->mFit->PrintStatus();
 }
 else if(msg ==111) {
Index: /trunk/SophyaPI/PIext/servnobjm.cc
===================================================================
--- /trunk/SophyaPI/PIext/servnobjm.cc	(revision 1066)
+++ /trunk/SophyaPI/PIext/servnobjm.cc	(revision 1067)
@@ -1024,4 +1024,75 @@
 }
 
+/* --Methode-- cmv 12/07/00 */
+void Services2NObjMgr::FillGFDfrVec(string nomgfd,string namx,string namy,string namz,string name)
+//	Pour remplir un ``GeneralFitData'' a partir de vecteurs
+//| gdfrvec nomgd X Y ! !
+//| gdfrvec nomgd X Y ! EY
+//| gdfrvec nomgd X Y Z !
+//| gdfrvec nomgd X Y Z EZ
+//| - nomgfd = nom du generaldata a remplir
+//| - namx = nom du vecteur contenant les valeurs X
+//| - namy = nom du vecteur contenant les valeurs Y
+//| - namz = nom du vecteur contenant les valeurs Z (ou "!")
+//| - name = nom du vecteur contenant les valeurs des erreurs EY ou EZ
+{
+// Decodage des noms des vecteurs pour le remplissage du generaldata
+if(nomgfd=="!" || nomgfd.length()<1)
+  {cout<<"FillGFDfrVec_Error: bad GenaralData name "<<nomgfd<<endl; return;}
+if(namx=="!" || namx.length()<1)
+  {cout<<"FillGFDfrVec_Error: bad X vector name "<<namx<<endl; return;}
+if(namy=="!" || namy.length()<1)
+  {cout<<"FillGFDfrVec_Error: bad Y vector name "<<namy<<endl; return;}
+if(namz.length()<1) namz = "!";
+if(name.length()<1) name = "!";
+int nvar = 0;
+if(namz=="!") nvar = 1; else nvar = 2;
+
+// Identify data
+NamedObjMgr omg;
+AnyDataObj* mobj = NULL;
+Vector* v;
+int nel = 0;
+r_8 *x=NULL, *y=NULL, *z=NULL,* ez=NULL;
+
+if( (mobj=omg.GetObj(namx)) == NULL) {
+  cout<<"FillGFDfrVec_Error: unknown X object "<<namx<<endl; return;
+} else {
+  v = (Vector*) mobj; x = v->Data(); nel=v->NElts();
+}
+
+if( (mobj=omg.GetObj(namy)) == NULL) {
+  cout<<"FillGFDfrVec_Error: unknown Y object "<<namy<<endl; return;
+} else {
+  v = (Vector*) mobj; y = z = v->Data(); if(v->NElts()<nel) nel=v->NElts();
+}
+
+if( nvar==2 && (mobj=omg.GetObj(namz)) == NULL) {
+  cout<<"FillGFDfrVec_Error: unknown Z object "<<namz<<endl; return;
+} else {
+  v = (Vector*) mobj; z = v->Data(); if(v->NElts()<nel) nel=v->NElts();
+}
+
+if(name!="!") {
+  if( (mobj=omg.GetObj(name)) == NULL) {
+    cout<<"FillGFDfrVec_Error: unknown EZ object "<<name<<endl; return;
+  } else {
+    v = (Vector*) mobj; ez = v->Data(); if(v->NElts()<nel) nel=v->NElts();
+  }
+}
+
+if(nel<=0)
+  {cout<<"FillGFDfrVec_Error: bad number of elements "<<nel<<endl; return;}
+
+// Create GeneralData and fill it with vectors
+GeneralFitData* gfd = new GeneralFitData(nvar,nel+5,0);
+if(nvar==1) gfd->SetData1(nel,x,z,ez);     // On remplit Y=f(X)
+else        gfd->SetData2(nel,x,y,z,ez);   // On remplit Z=f(X,y)
+
+// Menage et table d'objets
+if( omg.GetObj(nomgfd) != NULL ) omg.DelObj(nomgfd);
+mOmg->AddObj(gfd,nomgfd);
+return;
+}
 
 /* --Methode-- */
Index: /trunk/SophyaPI/PIext/servnobjm.h
===================================================================
--- /trunk/SophyaPI/PIext/servnobjm.h	(revision 1066)
+++ /trunk/SophyaPI/PIext/servnobjm.h	(revision 1067)
@@ -91,4 +91,5 @@
   virtual void          FillGFD(string & nom, string& expx, string& expy, string& expz,
                                string& experr, string& expcut, string& nomgfd, string loop="");
+  virtual void          FillGFDfrVec(string nomgfd,string namx,string namy,string namz,string name);
   virtual void          FillNTFrCFile(string & nom, string const & fname, 
                                       string const & funcname, string & nomnt, string loop="");
