nemo_main() { setparams(); read_data(); if (scanopt(method,"line")) { do_line(); } else if (scanopt(method,"ellipse")) { do_ellipse(); } else if (scanopt(method,"imageshift")) { do_imageshift(); } else if (scanopt(method,"plane")) { do_plane(); } else if (scanopt(method,"gauss1d")) { do_gauss1d(); } else if (scanopt(method,"gauss2d")) { do_gauss2d(); } else if (scanopt(method,"poly")) { do_poly(); } else if (scanopt(method,"area")) { do_area(); } else if (scanopt(method,"peak")) { do_peak(); } else if (scanopt(method,"zero")) { do_zero(); } else if (scanopt(method,"fourier")) { do_fourier(); } else error("fit=%s invalid; try [line,ellipse,imageshift,plane,gauss1d,gauss2d,poly,area,peak,zero,fourier]", getparam("fit")); if (outstr) strclose(outstr); }
void TransformFourier::applyDialog() { int setno; setno = this->setNumber->currentIndex(); int fftflag, loadx, invflag, type, wind, load; int i = operation->currentIndex(); invflag = i % 2 == 1; fftflag = i < 2; type = dataType->currentIndex(); loadx = loadX->currentIndex(); load = loadType->currentIndex(); wind = windowType->currentIndex(); if (i >= 4) { // only for window do_window(setno, type, wind); } else { do_fourier(fftflag, setno, load, loadx, invflag, type, wind); } // recognized double redraw: in both if (ToolsOptions::isRescaleOnTransform()) { mainWindow->toolsMenu->autoScale(); } else { drawgraph(); } SetsSender::send(); }
void fext_routine( int gto, int feature, int abs_src, int abs_set, int abs_graph ) { int i, cs, ns, fts, ncurves, extract_err; double datum, dummy, *absy; double y1, y2; int iy1, iy2; char tbuf[1024]; float *abscissa; abscissa = (float *)malloc( maxplot*sizeof(float) ); if( !isactive_graph( gto ) ){ errwin("Graph for results must be active"); return; } if( (ns=nextset( gto ) )== -1 ) { errwin("Choose a new graph or kill sets!"); return; } ncurves = nactive(cg); switch( abs_src ) { case 0: /* use index */ for( i=0; i<ncurves; i++ ) abscissa[i] = i+1; break; case 1: /* use legend label */ cs = 0; for( i=0; i<ncurves; i++ ){ while( !isactive_set( cg, cs ) ) cs++; if(!sscanf( g[cg].p[cs].lstr, "%f", &abscissa[i])) break; cs++; } if( i != ncurves ) { errwin("Bad legend label"); return; } break; case 2: /* use X from set */ if( !isactive_set( abs_graph, abs_set ) ){ errwin("Abscissa set not active"); return; } if( getsetlength( abs_graph, abs_set ) < ncurves ) { errwin("Not enough points in set"); return; } absy = getx( abs_graph, abs_set ); for( i=0; i<ncurves; i++ ) abscissa[i] = absy[i]; break; case 3: /* use Y from set */ if( !isactive_set( abs_graph, abs_set ) ){ errwin("Abscissa set not active"); return; } if( getsetlength( abs_graph, abs_set ) < ncurves ) { errwin("Not enough points in set"); return; } absy = gety( abs_graph, abs_set ); for( i=0; i<ncurves; i++ ) abscissa[i] = absy[i]; break; } cs = 0; tbuf[0] = '\0'; for( i=0; i<ncurves; i++ ) { while( !isactive_set( cg, cs ) ) cs++; extract_err = 0; switch( feature ) { case 0: /* Y minimum */ datum = g[cg].p[cs].ymin; break; case 1: /* Y maximum */ datum = g[cg].p[cs].ymax; break; case 2: /* Y mean */ stasum(gety(cg, cs), getsetlength(cg, cs), &datum, &dummy, 0); break; case 3: /* Y std dev */ stasum(gety(cg, cs), getsetlength(cg, cs), &dummy, &datum, 0); break; case 4: /* Y median */ getmedian( cg, cs, DATA_Y, &datum ); break; case 5: /* X minimum */ datum = g[cg].p[cs].xmin; break; case 6: /* X maximum */ datum = g[cg].p[cs].xmax; break; case 7: /* X mean */ stasum(getx(cg, cs), getsetlength(cg, cs), &datum, &dummy, 0); break; case 8: /* X std dev */ stasum(getx(cg, cs), getsetlength(cg, cs), &dummy, &datum, 0); break; case 9: /* X median */ getmedian( cg, cs, DATA_X, &datum ); break; case 10: /* frequency and period */ case 11: if ( ilog2(getsetlength(cg, cs)) <= 0) /* only DFT */ do_fourier(0, cs, 0, 1, 0, 0, 0); else /* FFT */ do_fourier(1, cs, 0, 1, 0, 0, 0); sprintf( tbuf, "FT of set %d", cs ); fts = 0; while( strcmp( tbuf, g[cg].p[fts].comments+1 ) ) fts++; minmax(gety(cg, fts), getsetlength(cg, fts),&y1,&y2,&iy1,&iy2); if( feature == 8 ) datum = g[cg].p[fts].ex[0][iy2-1]; else datum = 1./g[cg].p[fts].ex[0][iy2-1]; killset( cg, fts ); /* get rid of Fourier set */ break; case 12: /* first zero crossing */ if( get_zero_crossing( getsetlength( cg, cs ), getx( cg, cs ),gety( cg, cs ), &datum ) ){ sprintf( tbuf+strlen(tbuf), "Unable to find zero crossing of set %d\n", cs ); errwin( tbuf ); extract_err = 1; } break; case 13: /* rise time */ if( get_rise_time( getsetlength(cg,cs), getx(cg,cs), gety(cg,cs), g[cg].p[cs].ymin, g[cg].p[cs].ymax, &datum ) ){ sprintf( tbuf+strlen(tbuf), "Unable to find rise time of set %d\n", cs ); errwin( tbuf ); extract_err = 1; } break; case 14: /* fall time */ if( get_fall_time( getsetlength(cg,cs), getx(cg,cs), gety(cg,cs), g[cg].p[cs].ymin, g[cg].p[cs].ymax, &datum ) ){ sprintf( tbuf+strlen(tbuf), "Unable to find fall time of set %d\n", cs ); extract_err = 1; errwin( tbuf ); } break; case 15: /* slope */ if( mute_linear_regression( getsetlength( cg, cs ), getx( cg, cs ),gety( cg, cs ), &datum, &dummy ) ) { sprintf( tbuf+strlen(tbuf), "Unable to find slope of set %d\n", cs ); errwin( tbuf ); extract_err = 1; } break; case 16: /* Y intercept */ if( mute_linear_regression( getsetlength( cg, cs ), getx( cg, cs ), gety( cg, cs ), &dummy, &datum ) ) { sprintf( tbuf+strlen(tbuf), "Unable to find y-intercept of set %d\n", cs ); errwin( tbuf ); extract_err = 1; } break; case 17: /* set length */ datum = getsetlength( cg, cs ); break; case 18: /* half maximal widths */ if( get_half_max_width(getsetlength( cg, cs ), getx(cg,cs), gety(cg,cs), g[cg].p[cs].ymin, g[cg].p[cs].ymax,&datum) ) { sprintf( tbuf+strlen(tbuf), "Unable to find half maximal width of set %d\n", cs ); extract_err = 1; errwin( tbuf ); } break; case 19: /* Barycenter X */ get_barycenter( getsetlength( cg, cs ), gety(cg,cs), getx(cg,cs), &datum ); break; case 20: /* Barycenter Y */ get_barycenter( getsetlength( cg, cs ), getx(cg,cs), gety(cg,cs), &datum ); break; case 21: /* X of Maximum Y */ get_max_pos( gety(cg, cs), getx( cg, cs ), getsetlength( cg, cs ), g[cg].p[cs].ymax, &datum ); break; case 22: /* Y of Maximum X */ get_max_pos( getx(cg, cs), gety( cg, cs ), getsetlength( cg, cs ), g[cg].p[cs].xmax, &datum ); break; } if( !extract_err ) add_point( gto, ns, abscissa[i], datum, 0, 0, SET_XY ); cs++; } /* set comment */ switch( feature ) { case 0: /* Y minimum */ sprintf(tbuf,"Y minima of graph %d",cg); break; case 1: /* Y maximum */ sprintf(tbuf,"Y maxima of graph %d",cg); break; case 2: /* Y mean */ sprintf(tbuf,"Y means of graph %d",cg); break; case 3: /* Y std dev */ sprintf(tbuf,"Y std. dev.'s of graph %d",cg); break; case 4: /* Y median */ sprintf(tbuf,"Y medians of graph %d",cg); break; case 5: /* X minimum */ sprintf(tbuf,"X minima of graph %d",cg); break; case 6: /* X maximum */ sprintf(tbuf,"X maxima of graph %d",cg); break; case 7: /* X mean */ sprintf(tbuf,"X means of graph %d",cg); break; case 8: /* X std dev */ sprintf(tbuf,"X std. dev.'s of graph %d",cg); break; case 9: /* X median */ sprintf(tbuf,"X medians of graph %d",cg); break; case 10: /* frequency and period */ sprintf(tbuf,"frequencies of graph %d",cg); break; case 11: sprintf(tbuf,"periods of graph %d",cg); break; case 12: /* first zero crossing */ sprintf(tbuf,"zero crossings of graph %d",cg); break; case 13: /* rise time */ sprintf(tbuf,"rise times of graph %d",cg); break; case 14: /* fall time */ sprintf(tbuf,"fall times of graph %d",cg); break; case 15: /* slopes */ sprintf(tbuf,"slopes of graph %d",cg); break; case 16: /* Y intercepts */ sprintf(tbuf,"Y intercepts of graph %d",cg); break; case 17: /* set lengths */ sprintf(tbuf,"set lengths of graph %d",cg); break; case 18: /* 1/2 maximal widths */ sprintf(tbuf,"half maximal widths of graph %d",cg); break; case 19: /* barycenter X */ sprintf(tbuf,"X barycenters of graph %d",cg); break; case 20: /* barycenter Y */ sprintf(tbuf,"Y barycenters of graph %d",cg); break; case 21: /* X of maximum Y */ sprintf(tbuf,"X positions of maximum Y's of graph %d",cg); break; case 22: /* Y of maximum X */ sprintf(tbuf,"Y positions of maximum X's of graph %d",cg); break; } setcomment( gto, ns, tbuf ); free( abscissa ); plotone( gto ); }