Changeset 341 in Sophya
- Timestamp:
- Jul 30, 1999, 12:20:05 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaPI/PIext/servnobjm.cc
r333 r341 788 788 if(expy.length()<=0) {nvar = 1; expy = "0.";} 789 789 790 // $CHECK$ - cmv calculait le nombre d'entree ndata791 // en fonction de chaque objet - Je l'ai vire Reza 11/05/99792 793 790 // Creation NTuple Buffer 794 791 char* ntn[4]= {"x","y","f","e"}; … … 830 827 double err_e, err_E; 831 828 double stc2; 829 int nstep; 832 830 int lp,lpg; 833 831 int i1,i2,j1,j2; … … 867 865 O.xc = O.yc = 0.; 868 866 O.stc2 = 1.e-3; 867 O.nstep = 100; 869 868 O.err_e = O.err_E = -1.; 870 869 O.lp = 1; O.lpg = 0; … … 919 918 if(O.stc2<=0.) O.stc2 = 1.e-3; 920 919 } 920 if(strstr(opt.c_str(),",N")) { // Nombre maximum d'iterations 921 size_t p = opt.find(",N"); 922 size_t q = opt.find_first_of(',',p+1); 923 string dum = opt.substr(p,q-p); 924 if(dum.length()>2) sscanf(dum.c_str(),",N%d",&O.nstep); 925 if(O.nstep<2) O.nstep = 100; 926 } 921 927 if(strstr(opt.c_str(),",l")) { // niveau de print 922 928 size_t p = opt.find(",l"); … … 926 932 if(dum.length()>2) sscanf(dum.c_str(),",l%f",&ab); 927 933 if(ab<0) ab = 0.; 928 O.lp = (int) ab; O.lpg = (int) 10.*(ab-O.lp);934 O.lp = (int) ab; O.lpg = int(10.*(ab-(float)O.lp+0.01)); 929 935 } 930 936 if(strstr(opt.c_str(),",I")) { // intervalle de fit selon X … … 950 956 //| nom : nom de l'objet qui peut etre: 951 957 //| fit-1D: Vector,Histo1D,HProf ou GeneraFitData(1D) 952 //| fit-2D: Matrix,Histo2D,Image xxou GeneraFitData(2D)953 //| func : pnn =fit polynome degre nn avec classe Poly (lineaire) 1D ou 2D954 //| : Pnn =fit polynome degre nn avec GeneralFit (non-lineaire) 1D ou 2D955 //| : gnn =fit gaussienne (hauteur) + polynome de degre nn 1D956 //| : g =fit gaussienne (hauteur) 1D957 //| : enn =fit exponentielle + polynome de degre nn 1D958 //| : e =fit exponentielle 1D959 //| : Gnn =fit gaussienne (volume) + polynome de degre nn 1D960 //| : G =fit gaussienne (volume) 1D961 //| : =fit gaussienne+fond (volume) 2D962 //| : Gi =fit gaussienne+fond integree (volume) 2D963 //| : d =fit DL de gaussienne+fond (volume) 2D964 //| : di =fit DL de gaussienne+fond integree (volume) 2D965 //| : D =fit DL de gaussienne+fond avec coeff variable p6 (volume) 2D966 //| : Di =fit DL de gaussienne+fond integree avec coeff variable p6 (volume) 2D967 //| : M =fit Moffat+fond (expos=p6) (volume) 2D968 //| : Mi =fit Moffat+fond integree (expos=p6) (volume) 2D969 //| par : p1,...,pn valeur d'initialisation des parametres (def=0)970 //| step : s1,...,sn valeur des steps de depart (def=1)971 //| min : m1,...,mn valeur des minima (def=1)972 //| max : M1,...,Mn valeur des maxima (def=-1) (max<=min : pas de limite)958 //| fit-2D: Matrix,Histo2D,Image<T> ou GeneraFitData(2D) 959 //| func : pnn : fit polynome degre nn avec classe Poly (lineaire) 1D ou 2D 960 //| : Pnn : fit polynome degre nn avec GeneralFit (non-lineaire) 1D ou 2D 961 //| : gnn : fit gaussienne (hauteur) + polynome de degre nn 1D 962 //| : g : fit gaussienne (hauteur) 1D 963 //| : enn : fit exponentielle + polynome de degre nn 1D 964 //| : e : fit exponentielle 1D 965 //| : Gnn : fit gaussienne (volume) + polynome de degre nn 1D 966 //| : G : fit gaussienne (volume) 1D 967 //| : : fit gaussienne+fond (volume) 2D 968 //| : Gi : fit gaussienne+fond integree (volume) 2D 969 //| : d : fit DL de gaussienne+fond (volume) 2D 970 //| : di : fit DL de gaussienne+fond integree (volume) 2D 971 //| : D : fit DL de gaussienne+fond avec coeff variable p6 (volume) 2D 972 //| : Di : fit DL de gaussienne+fond integree avec coeff variable p6 (volume) 2D 973 //| : M : fit Moffat+fond (expos=p6) (volume) 2D 974 //| : Mi : fit Moffat+fond integree (expos=p6) (volume) 2D 975 //| par : p1,...,pn : valeur d'initialisation des parametres (def=0) 976 //| step : s1,...,sn : valeur des steps de depart (def=1) 977 //| min : m1,...,mn : valeur des minima (def=1) 978 //| max : M1,...,Mn : valeur des maxima (def=-1) (max<=min : pas de limite) 973 979 //| opt : options "Eaa.b,eaa.b,f,r,caa.b,Xaa.b" 974 //| f = generation d'un Objet identique contenant la fonction fittee 975 //| r = generation d'un Objet identique contenant les residus 976 //| Xaa.b = aa.b valeur du DXi2 d'arret (def=1.e-3) 977 //| la.b = niveau "a.b" de print: a=niveau de print Fit1/2D 978 //| b=niveau de debug GeneralFit 979 //| Ii1/i2 numeros des bins X de l'histos utilises pour le fit [i1,i2] 980 //|2D Jj1/j2 numeros des bins Y de l'histos utilises pour le fit [j1,j2] 981 //| - L'erreur est celle associee a l'objet si existe, 1 sinon sauf si 982 //| E = erreur prise comme la racine de la valeur a fitter 983 //| Eaa.b = erreur prise aa.b*sqrt(val) 984 //| e = erreur prise egale a 1 pour toutes les valeurs 985 //| eaa.b = erreur prise egale a aa.b 986 //| xaa.b = demande de centrage: on fit x-aa.b au lieu de x) 987 //| x = demande de centrage: on fit x-xc au lieu de x 988 //| avec xc=abscisse du milieu de l'histogramme 989 //| Actif pour: exp+poly 1D, poly 1D 990 //| gauss+poly 1D (mais xc est le centre de la gaussienne) 991 //|2D yaa.b et y = idem "xaa.b et x" mais pour y 980 //| f : generation d'un Objet identique contenant la fonction fittee 981 //| r : generation d'un Objet identique contenant les residus 982 //| Xaa.b : aa.b valeur du DXi2 d'arret (def=1.e-3) 983 //| Naa : aa nombre maximum d'iterations (def=100) 984 //| la.b : niveau "a.b" de print: a=niveau de print Fit1/2D 985 //| b=niveau de debug GeneralFit 986 //| Ii1/i2 numeros des bins X de l'histos utilises pour le fit [i1,i2] 987 //|2D Jj1/j2 numeros des bins Y de l'histos utilises pour le fit [j1,j2] 988 //| - L'erreur est celle associee a l'objet (si elle existe), 989 //| elle est mise a 1 sinon, sauf si E... ou e... est precise: 990 //| Eaa.b : si |val|>=1 erreur = aa.b*sqrt(|val|) 991 //| si |val|<1 erreur = aa.b 992 //| si aa.b <=0 alors aa.b=1.0 993 //| E seul est equivalent a E1.0 994 //| eaa.b : erreur = aa.b 995 //| si aa.b <=0 alors aa.b=1.0 996 //| e seul est equivalent a e1.0 997 //| xaa.b : demande de centrage: on fit x-aa.b au lieu de x) 998 //| x : demande de centrage: on fit x-xc au lieu de x 999 //| avec xc=abscisse du milieu de l'histogramme 1000 //| Actif pour exp+poly 1D, poly 1D 1001 //| pour gauss+poly 1D, xc est le centre de la gaussienne. 1002 //|2D yaa.b et y : idem "xaa.b et x" mais pour y 992 1003 { 993 1004 AnyDataObj* obj=mOmg->GetObj(nom); … … 1073 1084 <<" Cent="<<O.polcx<<","<<O.polcy<<","<<O.xc<<"+x"<<","<<O.yc<<"+y" 1074 1085 <<" TypE="<<O.err_e<<","<<O.err_E 1075 <<" StpX2="<<O.stc2 1086 <<" StpX2="<<O.stc2<<" Nstep="<<O.nstep 1076 1087 <<" lp,lpg="<<O.lp<<","<<O.lpg<<endl; 1077 1088 … … 1101 1112 // Gestion des erreurs a utiliser 1102 1113 if(O.err_e>0.) e=O.err_e; 1103 else if(O.err_E>0.) {e=( y<-1.||y>1.)?O.err_E*sqrt(fabs(y)):O.err_E;}1114 else if(O.err_E>0.) {e=(f<-1.||f>1.)?O.err_E*sqrt(fabs(f)):O.err_E;} 1104 1115 1105 1116 // Remplissage de generalfit … … 1236 1247 myfit.SetData(&mydata); 1237 1248 myfit.SetStopChi2(O.stc2); 1249 myfit.SetMaxStep(O.nstep); 1238 1250 {for(int i=0;i<myfunc->NPar();i++) { 1239 1251 char str[10]; … … 1242 1254 }} 1243 1255 if(O.lp>1) myfit.PrintFit(); 1244 double c2r = (double) myfit.Fit(); 1256 double c2r = -1.; 1257 int rcfit = (double) myfit.Fit(); 1245 1258 if(O.lp>0) myfit.PrintFit(); 1246 if( c2r>0.) {1259 if(rcfit>0) { 1247 1260 c2r = myfit.GetChi2Red(); 1248 cout<<"C2r_Reduit = "<<c2r<<" nstep="<<myfit.GetNStep()<<endl;1261 cout<<"C2r_Reduit = "<<c2r<<" nstep="<<myfit.GetNStep()<<" rc="<<rcfit<<endl; 1249 1262 Vector ParFit(myfunc->NPar()); 1250 1263 for(int i=0;i<myfunc->NPar();i++) ParFit(i)=myfit.GetParm(i); 1251 1264 } else { 1252 cout<<"echec Fit, rc = "<<c2r<<" nstep="<<myfit.GetNStep()<<endl; 1265 cout<<"echec Fit, rc = "<<rcfit<<" nstep="<<myfit.GetNStep()<<endl; 1266 myfit.PrintFitErr(rcfit); 1253 1267 } 1254 1268 1255 1269 // Mise a disposition des resultats 1256 if( c2r>=0.&& myfunc && (O.okres>0||O.okfun>0)) {1270 if(rcfit>=0 && myfunc && (O.okres>0||O.okfun>0)) { 1257 1271 string nomres = nom + "res"; 1258 1272 string nomfun = nom + "fun";
Note:
See TracChangeset
for help on using the changeset viewer.