int plot_fit_curve(float *a, int ncoeff, float tmin, float tmax) { int i,j; /* Looping variables */ int nstep=500; /* Number of steps used to compute curve */ float xtmp,ytmp; /* Values of x,y used in constructing the curve */ float *polyx=NULL; /* Polynomial in x */ cpgsci(2); cpgslw(5); /* * Allocate memory for container for polynomial values */ if(!(polyx = new_array(ncoeff,1))) { fprintf(stderr,"ERROR: plot_fit_curve\n"); return 1; } /* * Loop through range of x values in step sizes determined by nstep. * At each value of x, compute the value of y by first calling poly * to compute the values of the various powers of x at that step, and * then multiplying by the coefficients contained in a. */ for(i=0; i<nstep; i++) { /* * Compute the values of x and y at this step */ xtmp = tmin + i*(tmax - tmin)/(1.0 * nstep); sinpoly(xtmp,polyx-1,ncoeff); ytmp = 0; for(j=0; j<ncoeff; j++) ytmp += a[j] * polyx[j]; /* * Now connect this point to the previous one with a cpgdraw call */ if(i == 0) cpgmove(xtmp,ytmp); else cpgdraw(xtmp,ytmp); } /* * Clean up and exit */ cpgslw(1); cpgsci(1); polyx = del_array(polyx); return 0; }
void markcatobj(Secat object) { cpgsci(2); cpgsfs(2); cpgslw(3); cpgcirc(object.x,object.y,3.0*object.fwhm); cpgsci(1); cpgslw(1); }
void plot_profile(int proflen, float *profile, const char *title, const char *probtxt, const char *foldtxt, int showerr, float *errors, int showid) { int ii; float *x, overy, ymin, ymax; float errmin = 0.0, errmax = 0.0, offset, avg = 0.0, av[2]; find_min_max_arr(proflen, profile, &ymin, &ymax); if (showerr) find_min_max_arr(proflen, errors, &errmin, &errmax); overy = 0.1 * (ymax + errmax - ymin - errmin); ymax = ymax + overy + errmax; ymin = ymin - overy - errmin; x = gen_fvect(proflen); for (ii = 0; ii < proflen; ii++) x[ii] = (float) ii / (float) proflen; cpgenv(0.0, 1.00001, ymin, ymax, 0, 0); cpgscf(2); cpglab("Pulse Phase", "Counts", ""); if (showid) cpgiden(); cpgslw(5); if (showerr) { cpgbin(proflen, x, profile, 0); } else { cpgline(proflen, x, profile); } cpgslw(1); if (showerr) { offset = 0.5 / (float) proflen; for (ii = 0; ii < proflen; ii++) x[ii] += offset; cpgerrb(6, proflen, x, profile, errors, 2); cpgpt(proflen, x, profile, 5); } for (ii = 0; ii < proflen; ii++) avg += profile[ii]; avg /= proflen; cpgsls(4); x[0] = 0.0; x[1] = 1.0; av[0] = avg; av[1] = avg; cpgline(2, x, av); cpgsls(1); cpgsch(1.3); cpgmtxt("T", +2.0, 0.5, 0.5, title); cpgsch(1.0); cpgmtxt("T", +0.8, 0.5, 0.5, foldtxt); cpgmtxt("T", -1.5, 0.5, 0.5, probtxt); vect_free(x); }
static void demo2() { static int nx = 40, ny = 40; int i, j, k, lw, ci, ls; float f[1600], fmin, fmax, alev; double x, y; static float tr[6] = {0.0, 1.0, 0.0, 0.0, 0.0, 1.0}; /* Compute a suitable function. A C array is used to emulate a 2D fortran array f(nx,ny). */ fmin = fmax = 0.0; for (j=1; j<=ny; j++) { for (i=1; i<=ny; i++) { k = (j-1)*nx + (i-1); /* Fortran convention */ x = tr[0] + tr[1]*i + tr[2]*j; y = tr[3] + tr[4]*i + tr[5]*j; f[k] = cos(0.3*sqrt(x*2)-0.13333*y)*cos(0.13333*x)+ (x-y)/(double)nx; if (f[k] < fmin) fmin = f[k]; if (f[k] > fmax) fmax = f[k]; } } /* Clear the screen. Set up window and viewport. */ cpgpage(); cpgsvp(0.05, 0.95, 0.05, 0.95); cpgswin(1.0, (float) nx, 1.0, (float) ny); cpgbox("bcts", 0.0, 0, "bcts", 0.0, 0); cpgmtxt("t", 1.0, 0.0, 0.0, "Contouring using cpgcont()"); /* Draw the map. cpgcont is called once for each contour, using different line attributes to distinguish contour levels. */ cpgbbuf(); for (i=1; i<21; i++) { alev = fmin + i*(fmax-fmin)/20.0; lw = (i%5 == 0) ? 3 : 1; ci = (i < 10) ? 2 : 3; ls = (i < 10) ? 2 : 1; cpgslw(lw); cpgsci(ci); cpgsls(ls); cpgcont(f, nx, ny, 1, nx, 1, ny, &alev, -1, tr); } cpgslw(1); cpgsls(1); cpgsci(1); cpgebuf(); return; }
void aitoffGrid(void) { int i,j; double phi[MM], lam[MM], x[MM], y[MM]; double rr, dd; cpgsci(DARKGRAY); cpgslw(1); for(i=0; i<MM; i++) phi[i] = i*M_PI/(double)(MM-1) - M_PI/2.0; // make meridians for each ra in (-180,180) for(i=0; i<NM; i++) { rr = i*2.0*M_PI/(double)(NM-1) - M_PI; // steps in dec on (-90,90) for(j=0; j<MM; j++) { project(rr,phi[j],&x[j],&y[j]); } for(j=1; j<MM; j++) { cpgmove(x[j-1],y[j-1]); cpgdraw(x[j],y[j]); } } // make parallels // steps in dec on (-90,90) for(i=0; i<MM; i++) phi[i] *= 2.0; for(i=0; i<NP; i++) { dd = i*M_PI/(double)(NP-1) - M_PI/2.0; // steps in RA from (-180,180) for(j=0; j<MM; j++) { project(phi[j],dd,&x[j],&y[j]); } for(j=1; j<MM; j++) { cpgmove(x[j-1],y[j-1]); cpgdraw(x[j],y[j]); } } cpgsci(1); cpgslw(1); }
void Plotter2::resetAttributes(const Plotter2ViewportInfo& vi) { cpgstbg(0); // reset background colour to the initial one (white) cpgsci(1); // reset foreground colour to the initial one (black) cpgsls(1); // reset line style to solid cpgslw(1); // reset line width to 1 cpgscf(1); // reset font style to normal cpgsch(vi.fontSizeDef);// reset font size cpgsfs(1); // reset fill style (solid) }
static void plot_harmonics(double rr, int zoomlevel, fftpart * fp) { int ii, hh; double offsetf; char label[20]; fftview *harmview; cpgsubp(4, 4); for (ii = 0, hh = 2; ii < 8; ii++, hh++) { cpgpanl(ii % 4 + 1, ii / 4 + 1); harmview = get_harmonic(hh * rr, zoomlevel, fp); if (harmview != NULL) { offsetf = plot_fftview(harmview, 0.0, 2.0, hh * rr, 2); snprintf(label, 20, "Harmonic %d", hh); cpgsave(); cpgsch(2.0); cpgmtxt("T", -1.8, 0.05, 0.0, label); cpgunsa(); free(harmview); } } for (ii = 8, hh = 2; ii < 16; ii++, hh++) { cpgpanl(ii % 4 + 1, ii / 4 + 1); harmview = get_harmonic(rr / (double) hh, zoomlevel, fp); if (harmview != NULL) { offsetf = plot_fftview(harmview, 0.0, 2.0, rr / (double) hh, 2); snprintf(label, 20, "Harmonic 1/%d", hh); cpgsave(); cpgsch(2.0); cpgmtxt("T", -1.8, 0.05, 0.0, label); cpgunsa(); free(harmview); } } cpgsubp(1, 1); cpgpanl(1, 1); cpgsvp(0.0, 1.0, 0.0, 1.0); cpgswin(2.0, 6.0, -2.0, 2.0); cpgmove(2.0, 0.0); cpgslw(3); cpgdraw(6.0, 0.0); cpgslw(1); }
void plotsection(SET *p, GRAPHCONTROL *gr, int mode) { float *x = (mode == LAT) ? p->y : p->x; float *y = p->d; int i; float x1, x2, y1, y2; /* Check we have data */ if (p->n ==0) { cpgsvp(0.07, 0.52, 0.07, 0.30); cpgswin(0.0, 1.0, 0.0, 1.0); cpgmtxt("T",-3, 0.5, 0.5, "-- Sem Dados -- "); return; } x1 = x2 = x[0]; y1 = y2 = y[0]; for(i=0;i<p->n; i++) { if (x[i] < x1) x1 = x[i]; if (x[i] > x2) x2 = x[i]; if (y[i] < y1) y1 = y[i]; if (y[i] > y2) y2 = y[i]; } y2 = (( (int)y2 / 50 ) + 1) * 50.0; // Plot cpgsvp(0.07, 0.52, 0.07, 0.30); cpgswin(x1, x2, y2, 0.0); cpgbox("BCNST", 0.0, 0, "BCNST", 0.0, 0); cpgsch(0.7); cpgmtxt("R", 1.0, 0.0, 0.0, "[L] Trocar Lat/Lon"); cpgmtxt("B", 3.0, 0.5, 0.5, (mode == LAT) ? "Latitude\\m94" : "Longitude\\m94"); cpgmtxt("L", 3.0, 0.5, 0.5, "Profundidade (km)"); (gr->printout) ? cpgsch(1.5) : (p->n > 50) ? cpgsch(FS) : cpgsch(1.0); cpgbbuf(); for(i = 0; i< p->n; i++) { if (gr->colormode == COLORDEPTH) cpgsci(depthcolor(y[i])); else if (gr->colormode == COLORMAG) cpgsci(magcolor(p->m[i])); cpgpt1(x[i], y[i], 1); } cpgebuf(); // Terminate cpgsch(FS); cpgsci(1); cpgslw(1); return; }
// make a single Aitoff sky projection plot // using the data in ravec[field], decvec[field], and value[filter][field], // using the min and max data values in valmin[filter] and valmax[filter] // with filter=0 void plotOne(double nfields, double *value, double *ravec, double *decvec, double valmin, double valmax, char *label, char *title, char *plotName) { int nf; double xmin, xmax, ymin, ymax; // set up the plot openPlot(plotName); cpgbbuf(); cpgpap(PLOTSIZE/0.7,0.7); cpgsvp(0.02,0.98,0.02,0.98); xmax = M_PI; xmin = -xmax; ymax = 0.67*M_PI; ymin = -ymax; ymin -= 0.1*ymax; ymax -= 0.1*ymax; setupImplot(0.0, 1.0); cpgswin(xmin,xmax,ymin,ymax); // make a projected field circle for each field cpgsch(1.0); for(nf=0; nf<nfields; nf++) { projCircle(ravec[nf], decvec[nf], FIELD_RADIUS, (value[nf]-valmin)/(valmax-valmin)); } // the grids and galactic exclusion aitoffGrid(); galaxy(peakL, taperL, taperB); cpgslw(2); cpgsch(2.0); cpgswin(0,1,0,1); mywedg(0.21, 0.15, 1.0, 12.0, valmin, valmax, label); cpgptxt(0.5,0.95,0.0,0.5,title); cpgslw(1); cpgebuf(); closePlot(); }
void plothistogram(SET *p, float w, int mode, float lm, float hm) { float *x = (mode == MAG) ? p->m : p->d; int i; char t[1024]; float x1, x2, y1, y2; float *bins = NULL; float *freq = NULL; int nb; float a, b; float rms = -1; cpgsvp(0.63, 0.93, 0.07, 0.30); /* Check we have data */ if (p->n ==0) { cpgswin(0.0, 1.0, 0.0, 1.0); cpgmtxt("T",-3, 0.5, 0.5, "-- Sem Dados -- "); return; } if (mode == MAG) { nb = gomag(x, p->n, w, &bins, &freq); rms = linefit(bins, freq, nb, lm, hm, &a, &b); } else { nb = godep(x, p->n, w, &bins, &freq); } /* * Plot */ minmax(x, p->n, &x1, &x2); minmax(freq, nb, &y1, &y2); cpgswin(x1, x2, y1 - (y2-y1)*0.1, y2 * 1.2); cpgbox("BCNST", 0.0, 0, "BCMST", 0.0, 0); /* * Labels */ cpgsch(0.7); cpgmtxt("L", 2.2, 0.0, 0.0, "[H] Trocar Mag/Dep"); cpgmtxt("L", 1.0, 0.0, 0.0, "[B] Ajustar largura do bin"); if (mode == MAG) { cpgmtxt("R", 3.0, 0.5, 0.5, "Log(n) Acumulado"); cpgmtxt("B", 3.0, 0.5, 0.5, "Magnitude"); } else { cpgmtxt("R", 3.0, 0.5, 0.5, "Log(n)"); cpgmtxt("B", 3.0, 0.5, 0.5, "Profundidade (km)"); } sprintf(t,"Min: %.1f Max: %.1f",x1,x2); if (mode == MAG) { cpgmtxt("B", -1.0, 0.05, 0.0,t); } else { cpgmtxt("T", -2.0, 0.95, 1.0,t); } cpgsch(FS); /* * Plots */ cpgbin(nb, bins, freq, 1); if (mode == MAG) { cpgmove(x1, a*x1 + b); cpgdraw(x2, a*x2 + b); if ( lm >= 0.0 ) { float temp; cpgsci(2); cpgsch(1.2); temp = fabs((a*x1+b) - (a*x2+b)); cpgpt1(lm, a*lm+b -temp * 0.06, 30); cpgpt1(hm, a*hm+b -temp * 0.06, 30); cpgsci(1); cpgsch(FS); } } if (mode == MAG) { cpgsch(0.7); sprintf(t,"f(x)=%.2f\\.x+%.2f",a,b); cpgmtxt("T",-2.0, 0.9, 1.0,t); sprintf(t,"b=%.2f",fabs(a)); cpgmtxt("T",-3.2, 0.9, 1.0,t); cpgsch(FS); } cpgbbuf(); /* * Terminate */ cpgsci(1); cpgslw(1); cpgebuf(); if (bins != NULL) free(bins); if (freq != NULL) free(freq); bins = NULL; freq = NULL; return; }
/* * Class: pulsarhunter_PgplotInterface * Method: pgslw * Signature: (I)V */ JNIEXPORT void JNICALL Java_pulsarhunter_PgplotInterface_pgslw (JNIEnv *env, jclass cl , jint w){ cpgslw(w); }
int main() { char text[80]; int ci, crval1, crval2, ilat, ilng, j, k, latpole, lonpole, stat[361], status; float xr[512], yr[512]; double lat[181], lng[361], phi[361], theta[361], x[361], y[361]; struct celprm native, celestial; printf( "Testing WCSLIB celestial coordinate transformation routines (tcel1.c)\n" "---------------------------------------------------------------------\n"); /* List status return messages. */ printf("\nList of cel status return values:\n"); for (status = 1; status <= 6; status++) { printf("%4d: %s.\n", status, cel_errmsg[status]); } printf("\n"); /* Initialize. */ celini(&native); /* Reference angles for the native graticule (in fact, the defaults). */ native.ref[0] = 0.0; native.ref[1] = 0.0; /* Set up Bonne's projection with conformal latitude at +35. */ strcpy(native.prj.code, "BON"); native.prj.pv[1] = 35.0; /* Celestial graticule. */ celini(&celestial); celestial.prj = native.prj; /* PGPLOT initialization. */ strcpy(text, "/xwindow"); cpgbeg(0, text, 1, 1); /* Define pen colours. */ cpgscr(0, 0.0f, 0.0f, 0.0f); cpgscr(1, 1.0f, 1.0f, 0.0f); cpgscr(2, 1.0f, 1.0f, 1.0f); cpgscr(3, 0.5f, 0.5f, 0.8f); cpgscr(4, 0.8f, 0.5f, 0.5f); cpgscr(5, 0.8f, 0.8f, 0.8f); cpgscr(6, 0.5f, 0.5f, 0.8f); cpgscr(7, 0.8f, 0.5f, 0.5f); cpgscr(8, 0.3f, 0.5f, 0.3f); /* Define PGPLOT viewport. */ cpgenv(-180.0f, 180.0f, -90.0f, 140.0f, 1, -2); /* Loop over CRVAL2, LONPOLE, and LATPOLE with CRVAL1 incrementing by */ /* 15 degrees each time (it has an uninteresting effect). */ crval1 = -180; for (crval2 = -90; crval2 <= 90; crval2 += 30) { for (lonpole = -180; lonpole <= 180; lonpole += 30) { for (latpole = -1; latpole <= 1; latpole += 2) { /* For the celestial graticule, set the celestial coordinates of * the reference point of the projection (which for Bonne's * projection is at the intersection of the native equator and * prime meridian), the native longitude of the celestial pole, * and extra information needed to determine the celestial * latitude of the native pole. These correspond to FITS keywords * CRVAL1, CRVAL2, LONPOLE, and LATPOLE. */ celestial.ref[0] = (double)crval1; celestial.ref[1] = (double)crval2; celestial.ref[2] = (double)lonpole; celestial.ref[3] = (double)latpole; /* Skip invalid values of LONPOLE. */ if (celset(&celestial)) { continue; } /* Skip redundant values of LATPOLE. */ if (latpole == 1 && fabs(celestial.ref[3]) < 0.1) { continue; } /* Buffer PGPLOT output. */ cpgbbuf(); cpgeras(); /* Write a descriptive title. */ sprintf(text, "Bonne's projection (BON) - 15 degree graticule"); printf("\n%s\n", text); cpgtext(-180.0f, -100.0f, text); sprintf(text, "centred on celestial coordinates (%7.2f,%6.2f)", celestial.ref[0], celestial.ref[1]); printf("%s\n", text); cpgtext (-180.0f, -110.0f, text); sprintf(text, "with north celestial pole at native coordinates " "(%7.2f,%7.2f)", celestial.ref[2], celestial.ref[3]); printf("%s\n", text); cpgtext(-180.0f, -120.0f, text); /* Draw the native graticule faintly in the background. */ cpgsci(8); /* Draw native meridians of longitude. */ for (j = 0, ilat = -90; ilat <= 90; ilat++, j++) { lat[j] = (double)ilat; } for (ilng = -180; ilng <= 180; ilng += 15) { lng[0] = (double)ilng; if (ilng == -180) lng[0] = -179.99; if (ilng == 180) lng[0] = 179.99; /* Dash the longitude of the celestial pole. */ if ((ilng-lonpole)%360 == 0) { cpgsls(2); cpgslw(5); } cels2x(&native, 1, 181, 1, 1, lng, lat, phi, theta, x, y, stat); k = 0; for (j = 0; j < 181; j++) { if (stat[j]) { if (k > 1) cpgline(k, xr, yr); k = 0; continue; } xr[k] = -x[j]; yr[k] = y[j]; k++; } cpgline(k, xr, yr); cpgsls(1); cpgslw(1); } /* Draw native parallels of latitude. */ lng[0] = -179.99; lng[360] = 179.99; for (j = 1, ilng = -179; ilng < 180; ilng++, j++) { lng[j] = (double)ilng; } for (ilat = -90; ilat <= 90; ilat += 15) { lat[0] = (double)ilat; cels2x(&native, 361, 1, 1, 1, lng, lat, phi, theta, x, y, stat); k = 0; for (j = 0; j < 361; j++) { if (stat[j]) { if (k > 1) cpgline(k, xr, yr); k = 0; continue; } xr[k] = -x[j]; yr[k] = y[j]; k++; } cpgline(k, xr, yr); } /* Draw a colour-coded celestial coordinate graticule. */ ci = 1; /* Draw celestial meridians of longitude. */ for (j = 0, ilat = -90; ilat <= 90; ilat++, j++) { lat[j] = (double)ilat; } for (ilng = -180; ilng <= 180; ilng += 15) { lng[0] = (double)ilng; if (++ci > 7) ci = 2; cpgsci(ilng?ci:1); /* Dash the reference longitude. */ if ((ilng-crval1)%360 == 0) { cpgsls(2); cpgslw(5); } cels2x(&celestial, 1, 181, 1, 1, lng, lat, phi, theta, x, y, stat); k = 0; for (j = 0; j < 181; j++) { if (stat[j]) { if (k > 1) cpgline(k, xr, yr); k = 0; continue; } /* Test for discontinuities. */ if (j > 0) { if (fabs(x[j]-x[j-1]) > 4.0 || fabs(y[j]-y[j-1]) > 4.0) { if (k > 1) cpgline(k, xr, yr); k = 0; } } xr[k] = -x[j]; yr[k] = y[j]; k++; } cpgline(k, xr, yr); cpgsls(1); cpgslw(1); } /* Draw celestial parallels of latitude. */ for (j = 0, ilng = -180; ilng <= 180; ilng++, j++) { lng[j] = (double)ilng; } ci = 1; for (ilat = -90; ilat <= 90; ilat += 15) { lat[0] = (double)ilat; if (++ci > 7) ci = 2; cpgsci(ilat?ci:1); /* Dash the reference latitude. */ if (ilat == crval2) { cpgsls(2); cpgslw(5); } cels2x(&celestial, 361, 1, 1, 1, lng, lat, phi, theta, x, y, stat); k = 0; for (j = 0; j < 361; j++) { if (stat[j]) { if (k > 1) cpgline(k, xr, yr); k = 0; continue; } /* Test for discontinuities. */ if (j > 0) { if (fabs(x[j]-x[j-1]) > 4.0 || fabs(y[j]-y[j-1]) > 4.0) { if (k > 1) cpgline(k, xr, yr); k = 0; } } xr[k] = -x[j]; yr[k] = y[j]; k++; } cpgline(k, xr, yr); cpgsls(1); cpgslw(1); } /* Flush PGPLOT buffer. */ cpgebuf(); printf(" Type <RETURN> for next page: "); getc(stdin); /* Cycle through celestial longitudes. */ if ((crval1 += 15) > 180) crval1 = -180; /* Skip boring celestial latitudes. */ if (crval2 == 0) break; } if (crval2 == 0) break; } } cpgask(0); cpgend(); return 0; }
void doPlot(pulsar *psr,int npsr,float *scale,int nScale,char *grDev,int plotUs,float fontSize,float centreMJD,int ptStyle,float ptSize,int error,float minyv,float maxyv,float minxv,float maxxv,int nOverlay,float labelsize,float fracX) { int i,j,fitFlag=2,exitFlag=0,scale1=0,scale2,count[MAX_PSR],p,xautoscale=0,k,graphics=1; int yautoscale=0,plotpre=1; int ps,pe,pi; int time=0; char xstr[1000],ystr[1000]; float px[2],py[2],pye1[2],pye2[2]; float x[MAX_PSR][MAX_OBSN],y[MAX_PSR][MAX_OBSN],yerr1[MAX_PSR][MAX_OBSN],yerr2[MAX_PSR][MAX_OBSN],tmax,tmin,tmaxy1,tminy1,tmaxy2,tminy2; float sminy[MAX_PSR],smaxy[MAX_PSR]; float minx[MAX_PSR],maxx[MAX_PSR],miny[MAX_PSR],maxy[MAX_PSR],plotx1,plotx2,ploty1,ploty2,mean; float fx[2],fy[2]; float mouseX,mouseY; char key; // float widthPap=0.0,aspectPap=0.618; float widthPap=0.0,aspectPap=1; float xx[MAX_OBSN],yy[MAX_OBSN],yyerr1[MAX_OBSN],yyerr2[MAX_OBSN]; int num=0,colour; /* Obtain a graphical PGPLOT window */ cpgbeg(0,grDev,1,1); // cpgpap(widthPap,aspectPap); cpgsch(fontSize); cpgscf(2); cpgslw(2); cpgask(0); for (p=0;p<npsr;p++) { scale2 = psr[p].nobs; /* sprintf(xstr,"MJD-%.1Lf",psr[0].param[param_pepoch].val[0]); */ if (centreMJD == -1) sprintf(xstr,"Year"); else sprintf(xstr,"MJD-%.1f",centreMJD); sprintf(ystr,"Residual (\\gmsec)"); count[p]=0; printf("points = %d\n",psr[p].nobs); for (i=0;i<psr[p].nobs;i++) { if (psr[p].obsn[i].deleted == 0 && (psr[p].param[param_start].paramSet[0]!=1 || psr[p].param[param_start].fitFlag[0]!=1 || psr[p].param[param_start].val[0] < psr[p].obsn[i].bat) && (psr[p].param[param_finish].paramSet[0]!=1 || psr[p].param[param_finish].fitFlag[0]!=1 || psr[p].param[param_finish].val[0] > psr[p].obsn[i].bat)) { /* x[p][count[p]] = (double)(psr[p].obsn[i].bat-psr[0].param[param_pepoch].val[0]); */ if (centreMJD == -1) x[p][count[p]] = calcYr(psr[p].obsn[i].bat); else x[p][count[p]] = (double)(psr[p].obsn[i].bat-centreMJD); y[p][count[p]] = (double)psr[p].obsn[i].residual*1.0e6; if (nScale>0) y[p][count[p]] *= scale[p]; count[p]++; } } /* Remove mean from the residuals and calculate error bars */ mean = findMean(y[p],psr,p,scale1,count[p]); count[p]=0; for (i=0;i<psr[p].nobs;i++) { if (psr[p].obsn[i].deleted==0 && (psr[p].param[param_start].paramSet[0]!=1 || psr[p].param[param_start].fitFlag[0]!=1 || psr[p].param[param_start].val[0] < psr[p].obsn[i].bat) && (psr[p].param[param_finish].paramSet[0]!=1 || psr[p].param[param_finish].fitFlag[0]!=1 || psr[p].param[param_finish].val[0] > psr[p].obsn[i].bat)) { psr[p].obsn[i].residual-=mean/1.0e6; y[p][count[p]]-=mean; yerr1[p][count[p]] = y[p][count[p]]-(float)psr[p].obsn[i].toaErr; yerr2[p][count[p]] = y[p][count[p]]+(float)psr[p].obsn[i].toaErr; count[p]++; } } /* Get scaling for graph */ if (minxv == maxxv) { minx[p] = findMin(x[p],psr,p,scale1,count[p]); maxx[p] = findMax(x[p],psr,p,scale1,count[p]); } else { minx[p] = minxv; maxx[p] = maxxv; } if (minyv == maxyv){ miny[p] = findMin(y[p],psr,p,scale1,count[p]); maxy[p] = findMax(y[p],psr,p,scale1,count[p]); } else { miny[p] = minyv; maxy[p] = maxyv; } sminy[p] = miny[p]/1e6; smaxy[p] = maxy[p]/1e6; } for (p=0;p<npsr;p++) { for (i=0;i<count[p];i++) { y[p][i] = (y[p][i]-miny[p])/(maxy[p]-miny[p]); yerr1[p][i] = (yerr1[p][i]-miny[p])/(maxy[p]-miny[p]); yerr2[p][i] = (yerr2[p][i]-miny[p])/(maxy[p]-miny[p]); } // maxy[p] = 1.0; // miny[p] = 0.0; } tmin = findMinVal(minx,npsr); tmax = findMaxVal(maxx,npsr); tminy2 = 0.0; //findMinVal(miny,npsr); tmaxy2 = 1.0; //findMaxVal(maxy,npsr); plotx1 = tmin-(tmax-tmin)*0.1; plotx2 = tmax+(tmax-tmin)*0.1; // ploty1 = tminy2-(tmaxy2-tminy2)*0.1; // ploty2 = tmaxy2+(tmaxy2-tminy2)*0.1; ploty1 = 0.1; ploty2 = 0.9; for (p=0;p<npsr;p++) { for (i=0;i<count[p];i++) { y[p][i]=(p)+ploty1+y[p][i]*(ploty2-ploty1); yerr1[p][i]=(p)+ploty1+yerr1[p][i]*(ploty2-ploty1); yerr2[p][i]=(p)+ploty1+yerr2[p][i]*(ploty2-ploty1); } } printf("ytick = %g\n",ploty2-ploty1); /* cpgenv(plotx1,plotx2,ploty1,ploty2+(ploty2-ploty1)*(npsr-1),0,0); */ // cpgenv(plotx1,plotx2,0,npsr+1,0,-1); if (labelsize!=-1) cpgsch(labelsize); cpgsvp(fracX,1.0,0.1,1.0); cpgswin(0,1,0,npsr); cpgbox("ABC",0.0,0,"C",0.0,0); cpgsch(fontSize); char str[1000]; for (p=0;p<npsr;p++) { cpgsch(fontSize); // cpgtext(tmax+(tmax-tmin)*0.05,p+1.5-0.5,psr[p].name); cpgtext(0,p+0.6,psr[p].name); // cpgsch(fontSize); if (plotUs==0) { sprintf(str,"%.2f",(double)((smaxy[p]-sminy[p])*psr[p].param[param_f].val[0])); cpgtext(0,p+0.4,str); // cpgtext(tmax+(tmax-tmin)*0.05,p+1.1-0.5,str); } else { sprintf(str,"%.2f\\gms",(double)((smaxy[p]-sminy[p])/1e-6)); // cpgtext(tmax+(tmax-tmin)*0.05,p+1.1-0.5,str); cpgtext(0,p+0.1,str); } cpgsch(1); px[0] = 0; // px[1] = tmax; //+(tmax-tmin)*0.03; px[1] = 1; py[0] = p; py[1] = p; cpgline(2,px,py); } if (labelsize!=-1) cpgsch(labelsize); cpgsvp(0.1,fracX,0.1,1.0); cpgswin(plotx1,plotx2,0,npsr); cpgbox("ATNSBC",0.0,0,"B",0.0,0); cpglab(xstr,"",""); cpgsch(fontSize); for (p=0;p<npsr;p++) { cpgsls(1); px[0] = plotx1; // px[1] = tmax; //+(tmax-tmin)*0.03; px[1] = plotx2; py[0] = p; py[1] = p; cpgline(2,px,py); cpgsls(4); px[0] = tmin; px[1] = tmax+(tmax-tmin)*0.03; py[0]=py[1] =(p)+ploty1+(-miny[p]/(maxy[p]-miny[p]))*(ploty2-ploty1); // py[0]=py[1] = (p)+ploty1; // py[0] = py[1] = (0-miny[p])/(maxy[p]-miny[p])/(ploty2-ploty1)+p; cpgline(2,px,py); px[0] = plotx1+0.005*(plotx2-plotx1); py[0] = p; pye1[0] = p + 5/(ploty2-ploty1); pye2[0] = p - 5/(ploty2-ploty1); cpgsls(1); cpgsch(3); // cpgerry(1,px,pye1,pye2,1); cpgsch(1); for (colour=0;colour<5;colour++) { num=0; for (i=0;i<count[p];i++) { if ((colour==0 && psr[p].obsn[i].freq<=500) || (colour==1 && psr[p].obsn[i].freq>500 && psr[p].obsn[i].freq<=1000) || (colour==2 && psr[p].obsn[i].freq>1000 && psr[p].obsn[i].freq<=1500) || (colour==3 && psr[p].obsn[i].freq>1500 && psr[p].obsn[i].freq<=3300) || (colour==4 && psr[p].obsn[i].freq>3300)) { xx[num]=x[p][i]; yy[num]=y[p][i]; yyerr1[num]=yerr1[p][i]; yyerr2[num]=yerr2[p][i]; // printf("plotting: %g\n",yy[num]); num++; } } cpgsci(colour+1); cpgsch(ptSize); cpgpt(num,xx,yy,ptStyle); if (error==1) cpgerry(num,xx,yyerr1,yyerr2,1); cpgsch(fontSize); // Plot arrow giving one period fx[0] = fx[1] = tmin-(tmax-tmin)*0.05; // fy[0] = (p+1)+0.5-(float)(1.0/psr[p].param[param_f].val[0])/2.0/(ploty2-ploty1); // fy[1] = (p+1)+0.5+(float)(1.0/psr[p].param[param_f].val[0])/2.0/(ploty2-ploty1); // fy[0] = (-(float)(1.0/psr[p].param[param_f].val[0])/2.0/1.0e6 - miny[p])/(maxy[p]-miny[p])/(ploty2-ploty1) + (p+1)+0.5; // fy[1] = ((float)(1.0/psr[p].param[param_f].val[0])/2.0/1.0e6 - miny[p])/(maxy[p]-miny[p])/(ploty2-ploty1) + (p+1)+0.5; fy[0] = (p+1)+0.5+(float)(1.0/psr[p].param[param_f].val[0])/2.0/(maxy[p]-miny[p])*1e6; fy[1] = (p+1)+0.5-(float)(1.0/psr[p].param[param_f].val[0])/2.0/(maxy[p]-miny[p])*1e6; if (fy[0] > (p+1)+1) fy[0] = (p+1)+1; if (fy[1] < (p+1)) fy[1] = (p+1); // cpgsls(1); cpgline(2,fx,fy); cpgsls(1); } cpgsci(1); } cpgend(); }
int plot_shifts(Secat *shiftcat, int nshift) { int i; /* Looping variable */ int no_error=1; /* Flag set to 0 on error */ float x1,x2,y1,y2; /* Limits on plot */ float *fdx=NULL; /* float version of x offsets */ float *fdy=NULL; /* float version of y offsets */ float *fxptr,*fyptr; /* Navigation pointers */ double *dx=NULL; /* x offsets */ double *dy=NULL; /* y offsets */ double *xptr,*yptr; /* Navigation pointers */ double xmean, xsig, xmed; /* Statistics on dx */ double ymean, ysig, ymed; /* Statistics on dx */ Secat *sptr; /* Pointer to navigate shiftcat */ FILE *ofp=NULL; /* Output file pointer */ /* * Allocate memory for dx and dy arrays */ if(!(dx = new_doubarray(nshift))) { fprintf(stderr,"ERROR: calc_shift_stats\n"); return 1; } if(!(dy = new_doubarray(nshift))) no_error = 0; if(!(fdx = new_array(nshift,1))) no_error = 0; if(!(fdy = new_array(nshift,1))) no_error = 0; if(no_error) { /* * Transfer info to new arrays */ for(i=0,sptr=shiftcat,xptr=dx,yptr=dy,fxptr=fdx,fyptr=fdy; i<nshift; i++,sptr++,xptr++,yptr++,fxptr++,fyptr++) { *xptr = sptr->dx; *yptr = sptr->dy; *fxptr = (float) sptr->dx; *fyptr = (float) sptr->dy; } /* * Calculate statistics on dx and dy */ doubstats(dx,nshift,&xmean,&xsig,&xmed); doubstats(dy,nshift,&ymean,&ysig,&ymed); /* * Give output values */ printf("\nStatistics on x shift:\n"); printf(" mean = %f\n",xmean); printf(" rms = %f\n",xsig); printf(" median = %f\n",xmed); printf("Statistics on y shift:\n"); printf(" mean = %f\n",ymean); printf(" rms = %f\n",ysig); printf(" median = %f\n",ymed); /* * Set the limits and median */ x1 = xmed - 5.0 * xsig; x2 = xmed + 5.0 * xsig; y1 = ymed - 5.0 * ysig; y2 = ymed + 5.0 * ysig; /* * Plot distribution */ cpgslct(2); cpgenv(x1,x2,y1,y2,0,1); cpglab("x shift","y shift","Calculated Shifts"); cpgpt(nshift,fdx,fdy,9); /* * Plot median */ cpgsci(2); cpgslw(5); fdx[0] = fdx[1] = xmed; fdy[0] = y1; fdy[1] = y2; cpgline(2,fdx,fdy); fdy[0] = fdy[1] = ymed; fdx[0] = x1; fdx[1] = x2; cpgline(2,fdx,fdy); cpgsci(1); cpgslw(1); } /* * Write median shifts to output file -- NB: for these to be the * proper shifts for an iraf imcombine offsets file, the value * need to be the negative of what the above calculation gives. */ if(!(ofp = open_writefile("tmp.offsets"))) no_error = 0; else fprintf(ofp,"%8.2f %8.2f\n",-xmed,-ymed); /* * Clean up and exit */ dx = del_doubarray(dx); dy = del_doubarray(dy); fdx = del_array(fdx); fdy = del_array(fdy); if(ofp) fclose(ofp); if(no_error) return 0; else { fprintf(stderr,"ERROR: calc_shift_stats\n"); return 1; } }
int main() { /* Set up a 2 x 2 lookup table. */ const int M = 2; const int K[] = {K1, K2}; const int map[] = {0, 1}; const double crval[] = {0.0, 0.0}; char text[80]; int i, j, k, l, l1, l2, l3, lstep, m, stat[NP*NP], status; float array[NP][NP], clev[31], v0, v1, w; const float scl = 2.0f/(NP-1); float ltm[6]; double x[NP][NP][2], world[NP][NP][2]; struct tabprm tab; printf("Testing WCSLIB coordinate lookup table routines (ttab2.c)\n" "---------------------------------------------------------\n"); /* List status return messages. */ printf("\nList of tab status return values:\n"); for (status = 1; status <= 5; status++) { printf("%4d: %s.\n", status, tab_errmsg[status]); } printf("\n"); /* PGPLOT initialization. */ strcpy(text, "/xwindow"); cpgbeg(0, text, 1, 1); cpgvstd(); cpgsch(0.7f); /* The viewport is slightly oversized. */ cpgwnad(-0.65f, 1.65f, -0.65f, 1.65f); for (l = 0; l <= 30; l++) { clev[l] = 0.2f*(l-10); } ltm[0] = -scl*(1.0f + (NP-1)/4.0f); ltm[1] = scl; ltm[2] = 0.0f; ltm[3] = -scl*(1.0f + (NP-1)/4.0f); ltm[4] = 0.0f; ltm[5] = scl; /* Set up the lookup table. */ tab.flag = -1; if ((status = tabini(1, M, K, &tab))) { printf("tabini ERROR %d: %s.\n", status, tab_errmsg[status]); return 1; } tab.M = M; for (m = 0; m < tab.M; m++) { tab.K[m] = K[m]; tab.map[m] = map[m]; tab.crval[m] = crval[m]; for (k = 0; k < tab.K[m]; k++) { tab.index[m][k] = (double)k; } } /* Subdivide the interpolation element. */ for (i = 0; i < NP; i++) { for (j = 0; j < NP; j++) { x[i][j][0] = j*(K1-1.0)*scl - 0.5 - crval[0]; x[i][j][1] = i*(K2-1.0)*scl - 0.5 - crval[1]; } } /* The first coordinate element is static. */ tab.coord[0] = 0.0; tab.coord[2] = 0.0; tab.coord[4] = 0.0; tab.coord[6] = 0.0; /* (k1,k2) = (0,0). */ tab.coord[1] = 0.0; /* The second coordinate element varies in three of the corners. */ for (l3 = 0; l3 <= 100; l3 += 20) { /* (k1,k2) = (1,1). */ tab.coord[7] = 0.01 * l3; for (l2 = 0; l2 <= 100; l2 += 20) { /* (k1,k2) = (0,1). */ tab.coord[5] = 0.01 * l2; cpgpage(); for (l1 = 0; l1 <= 100; l1 += 2) { /* (k1,k2) = (1,0). */ tab.coord[3] = 0.01 * l1; /* Compute coordinates within the interpolation element. */ tab.flag = 0; if ((status = tabx2s(&tab, NP*NP, 2, (double *)x, (double *)world, stat))) { printf("tabx2s ERROR %d: %s.\n", status, tab_errmsg[status]); } /* Start a new plot. */ cpgbbuf(); cpgeras(); cpgsci(1); cpgslw(3); cpgbox("BCNST", 0.0f, 0, "BCNSTV", 0.0f, 0); cpgmtxt("T", 0.7f, 0.5f, 0.5f, "-TAB coordinates: " "linear interpolation / extrapolation in 2-D"); /* Draw the boundary of the interpolation element in red. */ cpgsci(2); cpgmove(-0.5f, 0.0f); cpgdraw( 1.5f, 0.0f); cpgmove( 1.0f, -0.5f); cpgdraw( 1.0f, 1.5f); cpgmove( 1.5f, 1.0f); cpgdraw(-0.5f, 1.0f); cpgmove( 0.0f, 1.5f); cpgdraw( 0.0f, -0.5f); /* Label the value of the coordinate element in each corner. */ sprintf(text, "%.1f", tab.coord[1]); cpgtext(-0.09f, -0.05f, text); sprintf(text, "%.2f", tab.coord[3]); cpgtext( 1.02f, -0.05f, text); sprintf(text, "%.1f", tab.coord[5]); cpgtext(-0.13f, 1.02f, text); sprintf(text, "%.1f", tab.coord[7]); cpgtext( 1.02f, 1.02f, text); cpgsci(1); /* Contour labelling: bottom. */ v0 = world[0][0][1]; v1 = world[0][NP-1][1]; if (v0 != v1) { lstep = (abs((int)((v1-v0)/0.2f)) < 10) ? 20 : 40; for (l = -200; l <= 300; l += lstep) { w = -0.5f + 2.0f * (l*0.01f - v0) / (v1 - v0); if (w < -0.5 || w > 1.5) continue; sprintf(text, "%4.1f", l*0.01f); cpgptxt(w+0.04f, -0.56f, 0.0f, 1.0f, text); } } /* Contour labelling: left. */ v0 = world[0][0][1]; v1 = world[NP-1][0][1]; if (v0 != v1) { lstep = (abs((int)((v1-v0)/0.2f)) < 10) ? 20 : 40; for (l = -200; l <= 300; l += lstep) { w = -0.5f + 2.0f * (l*0.01f - v0) / (v1 - v0); if (w < -0.5 || w > 1.5) continue; sprintf(text, "%4.1f", l*0.01f); cpgptxt(-0.52f, w-0.02f, 0.0f, 1.0f, text); } } /* Contour labelling: right. */ v0 = world[0][NP-1][1]; v1 = world[NP-1][NP-1][1]; if (v0 != v1) { lstep = (abs((int)((v1-v0)/0.2f)) < 10) ? 20 : 40; for (l = -200; l <= 300; l += lstep) { w = -0.5f + 2.0f * (l*0.01f - v0) / (v1 - v0); if (w < -0.5 || w > 1.5) continue; sprintf(text, "%.1f", l*0.01f); cpgptxt(1.52f, w-0.02f, 0.0f, 0.0f, text); } } /* Contour labelling: top. */ v0 = world[NP-1][0][1]; v1 = world[NP-1][NP-1][1]; if (v0 != v1) { lstep = (abs((int)((v1-v0)/0.2f)) < 10) ? 20 : 40; for (l = -200; l <= 300; l += lstep) { w = -0.5f + 2.0f * (l*0.01f - v0) / (v1 - v0); if (w < -0.5 || w > 1.5) continue; sprintf(text, "%4.1f", l*0.01f); cpgptxt(w+0.04f, 1.52f, 0.0f, 1.0f, text); } } /* Draw contours for the second coordinate element. */ for (i = 0; i < NP; i++) { for (j = 0; j < NP; j++) { array[i][j] = world[i][j][1]; } } cpgsci(4); cpgslw(2); cpgcont(array[0], NP, NP, 1, NP, 1, NP, clev, 10, ltm); cpgsci(7); cpgcont(array[0], NP, NP, 1, NP, 1, NP, clev+10, 1, ltm); cpgsci(5); cpgcont(array[0], NP, NP, 1, NP, 1, NP, clev+11, 20, ltm); cpgebuf(); } } } cpgend(); tabfree(&tab); return 0; }
// make six Aitoff sky projection plots // using the data in ravec[field], decvec[field], and value[filter][field], // using the min and max data values in valmin[filter] and valmax[filter] // with filter=0 to NFILTERS-1 void plotSix(double nfields, double **value, double *ravec, double *decvec, double *valmin, double *valmax, int horizontal, char *label, char *title, char* plotName, int mask) { char str[1024]; int filt, nf; double xmin, xmax, ymin, ymax; openPlot(plotName); cpgbbuf(); if(horizontal==1) cpgpap(PLOTSIZE/0.5,0.5); else cpgpap(PLOTSIZE/1.0,1.0); cpgsvp(0.02,0.98,0.15,0.95); xmax = 0.9*(M_PI); xmin = -xmax; ymax = 0.9*(0.6*M_PI); ymin = -ymax; ymin -= 0.18*ymax; ymax -= 0.18*ymax; setupImplot(0.0, 1.0); if(horizontal==1) cpgsubp(3,2); else cpgsubp(2,3); cpgsch(3.0); cpgslw(2); for(filt=0; filt<NFILTERS; filt++) { int thereisdata = 0; for(nf=0; nf<nfields; nf++) { if (value[filt][nf] != 0.0) { thereisdata = 1; } } if ( thereisdata ) { if(horizontal==1) cpgpanl(hpanelx[filt],hpanely[filt]); else cpgpanl(vpanelx[filt],vpanely[filt]); cpgswin(xmin,xmax,ymin,ymax); for(nf=0; nf<nfields; nf++) { if ( mask == 0 ) { if(value[filt][nf] > 0.0) projCircle(ravec[nf], decvec[nf], FIELD_RADIUS, (value[filt][nf]-valmin[filt])/(valmax[filt]-valmin[filt])); } else if ( mask == 1) { if(value[filt][nf] != 0.0) projCircle(ravec[nf], decvec[nf], FIELD_RADIUS, (value[filt][nf]-valmin[filt])/(valmax[filt]-valmin[filt])); } } aitoffGrid(); galaxy(peakL, taperL, taperB); sprintf(str,"%s: %s", label, filtername[filt]); if(valmax[filt]>valmin[filt]) mywedg(0.2, 0.15, 1.0, 8.0, valmin[filt], valmax[filt], str); } } cpgsch(1.0); cpgsubp(1,1); cpgswin(0,1,0,1); cpgptxt(0.5,1.02,0.0,0.5,title); cpgslw(1); cpgebuf(); closePlot(); }
void plot(GRAPHCONTROL *gr, SET *p) { char t[1024]; cpgsch(FS); cpgsci(1); cpgsvp(0.07, 0.93, 0.35, 0.9); cpgeras(); cpgswin(gr->xmin, gr->xmax, gr->ymin, gr->ymax); cpgbox("BCNST", 0.0, 0, "BCNST", 0.0, 0); cpgbbuf(); cpgsch(0.8); float yp = 3.4; sprintf(t,"[n] Ano: %d/%d", p->y1, p->y2); cpgmtxt("T", yp, 0.0, 0.0, t); sprintf(t,"[m] Magnitude: %.2f/%.2f", p->m1, p->m2); cpgmtxt("T", yp, 0.25, 0.0, t); sprintf(t,"[s/0] Selecionar Regiao"); (p->region) ? cpgsci(ON) : cpgsci(OFF); cpgmtxt("T", yp, 0.6, 0.0, t); cpgsci(1); cpgmtxt("T", yp, 0.85, 0.0, "[=] Salvar Print-out"); yp -= 1.2; sprintf(t,"N: %ld",p->n); cpgmtxt("T", yp, 0.0, 0.0, t); sprintf(t,"[p] Profundidade(p): %.1f/%.1f",p->d1, p->d2); cpgmtxt("T", yp, 0.25, 0.0, t); sprintf(t,"Longitude: %.2f/%.2f",p->lon1, p->lon2); cpgmtxt("T", yp, 0.6, 0.0, t); cpgmtxt("T", yp, 0.85, 0.0, "[J] Definir intervalo"); yp -= 1.2; sprintf(t,"Latitude: %.2f/%.2f", p->lat1, p->lat2); cpgmtxt("T", yp, 0.6, 0.0, t); sprintf(t,"[w] Zoom para todo o mapa"); cpgmtxt("T", yp, 0.25, 0.0, t); cpgmtxt("T", yp, 0.85, 0.0, " de ajuste"); sprintf(t,"[c] Cor: %s", (gr->colormode == COLORDEPTH) ? "Profundidade" : (gr->colormode == COLORMAG) ? "Magnitude" : "Neutra"); cpgmtxt("R", 1.0, 1.0, 1.0, t); (gr->hascontinents) ? cpgsci(ON) : cpgsci(OFF); sprintf(t,"[1] Continentes"); cpgmtxt("R", 1.0, 0.25, 0.0, t); cpgsci(1); (gr->hasplates) ? cpgsci(ON) : cpgsci(OFF); sprintf(t,"[2] Placas"); cpgmtxt("R", 1.0, 0.0, 0.0, t); cpgsci(1); // Legenda cores cpgsci(1); cpgsch(FS); /* Graphs */ int i; if (gr->haspoints && p->n > 0) { int symbol = 17; (p->n > 50) ? cpgsch(0.4) : cpgsch(FS); if (gr->colormode == COLORDEPTH) for(i = 0; i< p->n; i++) { cpgsci(depthcolor(p->d[i])); cpgpt1(p->x[i], p->y[i], symbol); } else if (gr->colormode == COLORMAG) for(i = 0; i< p->n; i++) { cpgsci(magcolor(p->m[i])); cpgpt1(p->x[i], p->y[i], symbol); } else cpgpt(p->n, p->x, p->y, symbol); cpgsci(1); cpgsch(FS); } if (gr->hascontinents >= 1) { cpgsci(1); cpgslw(2); for(i=0; i < ncontinentes; i++) { if (continentes[i][0] == -999 && continentes[i][1] == 999 ) { i++; cpgmove(continentes[i][0], continentes[i][1]); continue; } cpgdraw(continentes[i][0], continentes[i][1]); } if (gr->hascontinents >=2) { cpgslw(1); cpgsci(15); for(i=0; i < nborders; i++) { if (borders[i][0] == -999 && borders[i][1] == 999 ) { i++; cpgmove(borders[i][0], borders[i][1]); continue; } cpgdraw(borders[i][0], borders[i][1]); } } } if (gr->hasplates == 1) { cpgsci(3); cpgslw(3); for(i=0; i < nplates; i++) { if (plates[i][0] == -999 && plates[i][1] == 999 ) { i++; cpgmove(plates[i][0], plates[i][1]); continue; } if (fabs(plates[i][0] - plates[i-1][0]) > 180) { cpgmove(plates[i][0], plates[i][1]); } cpgdraw(plates[i][0], plates[i][1]); } } if (gr->colormode == COLORMAG) scalemag(); else if (gr->colormode == COLORDEPTH) scaledep(); cpgsci(1); cpgslw(1); cpgebuf(); cpgsvp(0.07, 0.93, 0.35, 0.9); cpgswin(gr->xmin, gr->xmax, gr->ymin, gr->ymax); return; }
int main (int argc,char **argv) { int argPos, argNum = argc; char charBuffer [RGPBufferSIZE], panelTitle [RGPBufferSIZE], *outFile = (char *) "rgisplot"; int panelRow, panelCol, panelRowNum,panelColNum, defaultLW; DBInt dataNum, entryNum = 0; DBInt ret, mode = 0, device = 0, format = 0, layout = 0; float x0, y0, x1, y1, pWidth = -1.0, pHeight = -1.0; DBObjData *dbData; for (argPos = 1;argPos < argNum; ) { if (CMargTest (argv [argPos],"-m","--mode")) { const char *modes [] = { "interactive", "batch", (char *) NULL }; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing mode!"); return (CMfailed); } if ((mode = CMoptLookup (modes,argv [argPos],true)) == DBFault) { CMmsgPrint (CMmsgUsrError,"Invalid mode %s",argv [argPos]); goto Usage; } if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-d","--device")) { const char *devices [] = { "screen", "file", (char *) NULL }; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing device!"); return (CMfailed); } if ((device = CMoptLookup (devices,argv [argPos],true)) == DBFault) { CMmsgPrint (CMmsgUsrError,"Invalid device %s",argv [argPos]); goto Usage; } if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-p","--psize")) { if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing psize!"); return (CMfailed); } if ((argv [argPos] == (char *) NULL) || (sscanf (argv [argPos],"%f,%f",&pWidth,&pHeight) != 2)) { CMmsgPrint (CMmsgUsrError,"Invalid page size %s",argv [argPos]); goto Usage; } if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-f","--format")) { const char *formats [] = { "eps", "gif", "ppm", (char *) NULL }; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing format!"); return (CMfailed); } if ((format = CMoptLookup (formats,argv [argPos],true)) == DBFault) { CMmsgPrint (CMmsgUsrError,"Invalid format %s",argv [argPos]); goto Usage; } if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-l","--layout")) { const char *layouts [] = { "portrait","landscape", (char *) NULL }; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing layout!"); return (CMfailed); } if ((layout = CMoptLookup (layouts,argv [argPos],true)) == DBFault) { CMmsgPrint (CMmsgUsrError,"Invalid layout %s",argv [argPos]); goto Usage; } if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-o","--output")) { if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing output!"); return (CMfailed); } if (argv [argPos] == (char *) NULL) { CMmsgPrint (CMmsgUsrError,"Invalid output file"); goto Usage; } outFile = argv [argPos]; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-h","--help")) { Usage: CMmsgPrint (CMmsgUsrError,"Usage: rgisPlot [-m <>] [-d <>] [-f <>] [-l <>] [-o <>] -h"); CMmsgPrint (CMmsgUsrError," -m, --mode <interactive | batch>"); CMmsgPrint (CMmsgUsrError," -d, --device <screen | file>"); CMmsgPrint (CMmsgUsrError," -p, --psize width,height"); CMmsgPrint (CMmsgUsrError," -f, --format <eps | gif>"); CMmsgPrint (CMmsgUsrError," -l, --layout <landscape | portrait>"); CMmsgPrint (CMmsgUsrError," -o, --output <filename>"); argNum = CMargShiftLeft (argPos,argv,argNum); return (DBSuccess); } if ((argv [argPos][0] == '-') && (strlen (argv [argPos]) > 1)) { CMmsgPrint (CMmsgUsrError,"Unknown option: %s!",argv [argPos]); return (CMfailed); } argPos++; } switch (device) { case 0: cpgopen ("/XWINDOW"); break; case 1: { char *formatStrings [] = { (char *) "CPS", (char *) "GIF", (char *) "PPM" }; sprintf (charBuffer,layout == 0 ? "%s/V%s" : "%s/%s", outFile, formatStrings [format]); cpgopen (charBuffer); } break; default: return (CMfailed); } cpgscrn (0,"WHITE",&ret); if ((pWidth > 0.0) && (pHeight > 0.0)) cpgpap (pWidth, pHeight / pWidth); do { RGPPrintMessage (mode,&entryNum,"Panel Layout [horizontal,vertical]:"); while (fgets (charBuffer,sizeof (charBuffer) - 1,stdin) == (char *) NULL); if (sscanf (charBuffer,"%d,%d",&panelColNum,&panelRowNum) == 2) break; else if (RGPPrintError (mode,entryNum,"Panel layout input error")) goto Stop; } while (true); RGPInitPenColors (); cpgsubp (panelColNum,panelRowNum); cpgqlw (&defaultLW); ret = DBSuccess; for (panelRow = 0;panelRow < panelRowNum;++panelRow) for (panelCol = 0;panelCol < panelColNum; ++panelCol) { cpgpanl (panelCol + 1,panelRow + 1); cpgsch (1.8); cpgvstd (); do { sprintf (charBuffer,"Panel Title [%d,%d]:",panelRow,panelCol); RGPPrintMessage (mode,&entryNum,charBuffer); if (fgets (panelTitle,sizeof (panelTitle) - 1,stdin) != (char *) NULL) { if (panelTitle [strlen (panelTitle) - 1] == '\n') panelTitle [strlen (panelTitle) - 1] = '\0'; if (strlen (panelTitle) > 0) break; } RGPPrintError (mode,entryNum,"Panel Title input error"); goto Stop; } while (true); dataNum = 0; do { RGPPrintMessage (mode,&entryNum,"Mapextent [X0,Y0,X1,Y1]:"); if (fgets (charBuffer,sizeof (charBuffer) - 1,stdin) == (char *) NULL) continue; if (sscanf (charBuffer,"%f,%f,%f,%f",&x0,&y0,&x1,&y1) == 4) break; else if (RGPPrintError (mode,entryNum,"Mapextent input error")) goto Stop; } while (true); cpgwnad (x0,x1,y0,y1); do { sprintf (charBuffer,"RiverGIS data file [%d]:",++dataNum); RGPPrintMessage (mode,&entryNum, charBuffer); if ((fgets (charBuffer,sizeof (charBuffer) - 1,stdin) != (char *) NULL) && (strlen (charBuffer) > 0) && charBuffer [0] != '\n') { if (charBuffer [strlen (charBuffer) - 1] == '\n') charBuffer [strlen (charBuffer) - 1] = '\0'; dbData = new DBObjData (); if (dbData->Read (charBuffer) != DBSuccess) { dataNum--; continue; } switch (dbData->Type ()) { case DBTypeVectorPoint: if ((ret = RGPDrawVecPoint (mode, &entryNum, dbData)) == DBFault) goto Stop; break; case DBTypeVectorLine: if ((ret = RGPDrawVecLine (mode, &entryNum, dbData)) == DBFault) goto Stop; break; case DBTypeVectorPolygon: break; case DBTypeGridContinuous: if ((ret = RGPDrawGridContinuous (mode,&entryNum,dbData)) == DBFault) goto Stop; break; case DBTypeGridDiscrete: break; case DBTypeNetwork: if ((ret = RGPDrawNetwork (mode, &entryNum, dbData)) == DBFault) goto Stop; break; default: CMmsgPrint (CMmsgUsrError,"Invalid data type"); dataNum--; break; } delete dbData; } else break; } while (true); cpgbox ("BCMTS",0.0,0,"BCNMTS",0.0,0); cpgslw (2); cpgsch (2.5); cpgmtxt ("T",1.5,0.5,0.5,panelTitle); cpgslw (defaultLW); } Stop: cpgend (); return (ret); }
int plot_resid(Fluxrec *flux, int npoints, float *a, int ncoeff, float *meanrms) { int i,j; /* Looping variables */ int no_error=1; /* Flag set to 0 on error */ float ytmp; /* Value of fitted function at a given day */ float mean; /* Mean of residual curve */ float *polyx=NULL; /* Polynomial in x */ Fluxrec *resid=NULL; /* Residual curve */ Fluxrec *rptr; /* Pointer to navigate resid */ Fluxrec *fptr; /* Pointer to navigate flux */ /* * Allocate memory */ if(!(polyx = new_array(ncoeff,1))) { fprintf(stderr,"ERROR: plot_resid\n"); return 1; } if(!(resid = new_fluxrec(npoints))) no_error = 0; /* * Loop through flux, at each step compute the value of the function * and then subtract it from the flux. */ if(no_error) { for(i=0,fptr=flux,rptr=resid; i<npoints; i++,fptr++,rptr++) { /* * Compute the function value at this step */ sinpoly(fptr->day,polyx-1,ncoeff); ytmp = 0; for(j=0; j<ncoeff; j++) ytmp += a[j] * polyx[j]; /* * Now set resid->flux to be the difference between flux->flux and the * fitted function */ *rptr = *fptr; rptr->flux -= ytmp; } } /* * Now plot the points */ if(no_error) if(plot_lcurve(resid,npoints,"Days","Residual Flux Density","")) no_error = 0; /* * Draw a line at 0.0 residual */ if(no_error) { cpgsci(2); cpgslw(5); cpgmove(-999,0.0); cpgdraw(999,0.0); cpgslw(1); cpgsci(1); } /* * Calculate mean and rms */ if(no_error) { if(calc_mean(resid,npoints,&mean,meanrms)) no_error = 0; else { *meanrms /= sqrt(npoints); printf("\nplot_resid: Mean of residuals = %8.4f. ",mean); printf("RMS uncertainty in mean = %6.4f\n",*meanrms); } } /* * Clean up and exit */ cpgslw(1); cpgsci(1); polyx = del_array(polyx); resid = del_fluxrec(resid); if(no_error) return 0; else { fprintf(stderr,"ERROR: plot_resid\n"); return 1; } }
void Plotter2::plot() { open(); if ((width > 0.0) && (aspect > 0.0)) { cpgpap(width, aspect); } cpgscr(0, 1.0, 1.0, 1.0); // set background color white cpgscr(1, 0.0, 0.0, 0.0); // set foreground color black for (unsigned int i = 0; i < vInfo.size(); ++i) { Plotter2ViewportInfo vi = vInfo[i]; if (vi.showViewport) { resetAttributes(vi); // setup viewport cpgsvp(vi.vpPosXMin, vi.vpPosXMax, vi.vpPosYMin, vi.vpPosYMax); cpgswin(vi.vpRangeXMin, vi.vpRangeXMax, vi.vpRangeYMin, vi.vpRangeYMax); // background color (default is transparent) if (vi.vpBColor >= 0) { cpgsci(vi.vpBColor); cpgrect(vi.vpRangeXMin, vi.vpRangeXMax, vi.vpRangeYMin, vi.vpRangeYMax); cpgsci(1); // reset foreground colour to the initial one (black) } // data for (unsigned int j = 0; j < vi.vData.size(); ++j) { resetAttributes(vi); Plotter2DataInfo di = vi.vData[j]; std::vector<float> vxdata = di.xData; int ndata = vxdata.size(); float* pxdata = new float[ndata]; float* pydata = new float[ndata]; for (int k = 0; k < ndata; ++k) { pxdata[k] = di.xData[k]; pydata[k] = di.yData[k]; } if (di.drawLine) { cpgsls(di.lineStyle); cpgslw(di.lineWidth); int colorIdx = di.lineColor; if (colorIdx < 0) { colorIdx = (j + 1) % 15 + 1; } cpgsci(colorIdx); cpgline(ndata, pxdata, pydata); } if (di.drawMarker) { cpgsch(di.markerSize); cpgsci(di.markerColor); cpgpt(ndata, pxdata, pydata, di.markerType); } delete [] pxdata; delete [] pydata; } //calculate y-range of xmasks std::vector<float> yrange = vi.getRangeY(); float yexcess = 0.1*(yrange[1] - yrange[0]); float xmaskymin = yrange[0] - yexcess; float xmaskymax = yrange[1] + yexcess; // masks for (unsigned int j = 0; j < vi.vRect.size(); ++j) { resetAttributes(vi); Plotter2RectInfo ri = vi.vRect[j]; cpgsci(ri.color); cpgsfs(ri.fill); cpgslw(ri.width); cpgshs(45.0, ri.hsep, 0.0); float* mxdata = new float[4]; float* mydata = new float[4]; mxdata[0] = ri.xmin; mxdata[1] = ri.xmax; mxdata[2] = ri.xmax; mxdata[3] = ri.xmin; mydata[0] = xmaskymin; mydata[1] = xmaskymin; mydata[2] = xmaskymax; mydata[3] = xmaskymax; cpgpoly(4, mxdata, mydata); } // arrows for (unsigned int j = 0; j < vi.vArro.size(); ++j) { resetAttributes(vi); Plotter2ArrowInfo ai = vi.vArro[j]; cpgsci(ai.color); cpgslw(ai.width); cpgsls(ai.lineStyle); cpgsch(ai.headSize); cpgsah(ai.headFillStyle, ai.headAngle, ai.headVent); cpgarro(ai.xtail, ai.ytail, ai.xhead, ai.yhead); } // arbitrary texts for (unsigned int j = 0; j < vi.vText.size(); ++j) { resetAttributes(vi); Plotter2TextInfo ti = vi.vText[j]; cpgsch(ti.size); cpgsci(ti.color); cpgstbg(ti.bgcolor); cpgptxt(ti.posx, ti.posy, ti.angle, ti.fjust, ti.text.c_str()); } // viewport outline and ticks resetAttributes(vi); cpgbox("BCTS", vi.majorTickIntervalX, vi.nMinorTickWithinMajorTicksX, "BCTSV", vi.majorTickIntervalY, vi.nMinorTickWithinMajorTicksY); // viewport numberings std::string numformatx, numformaty; if (vi.numLocationX == "b") { numformatx = "N"; } else if (vi.numLocationX == "t") { numformatx = "M"; } else if (vi.numLocationX == "") { numformatx = ""; } if (vi.numLocationY == "l") { numformaty = "NV"; } else if (vi.numLocationY == "r") { numformaty = "MV"; } else if (vi.numLocationY == "") { numformaty = ""; } cpgbox(numformatx.c_str(), vi.majorTickIntervalX * vi.nMajorTickWithinTickNumsX, 0, numformaty.c_str(), vi.majorTickIntervalY * vi.nMajorTickWithinTickNumsY, 0); float xpos, ypos; // x-label vi.getWorldCoordByWindowCoord(vi.labelXPosX, vi.labelXPosY, &xpos, &ypos); cpgsch(vi.labelXSize); cpgsci(vi.labelXColor); cpgstbg(vi.labelXBColor); //outside viewports, works ONLY with /xwindow cpgptxt(xpos, ypos, vi.labelXAngle, vi.labelXFJust, vi.labelXString.c_str()); // y-label vi.getWorldCoordByWindowCoord(vi.labelYPosX, vi.labelYPosY, &xpos, &ypos); cpgsch(vi.labelYSize); cpgsci(vi.labelYColor); cpgstbg(vi.labelYBColor); //outside viewports, works ONLY with /xwindow cpgptxt(xpos, ypos, vi.labelYAngle, vi.labelYFJust, vi.labelYString.c_str()); // title vi.getWorldCoordByWindowCoord(vi.titlePosX, vi.titlePosY, &xpos, &ypos); cpgsch(vi.titleSize); cpgsci(vi.titleColor); cpgstbg(vi.titleBColor); //outside viewports, works ONLY with /xwindow cpgptxt(xpos, ypos, vi.titleAngle, vi.titleFJust, vi.titleString.c_str()); } } close(); }
static double plot_fftview(fftview * fv, float maxpow, float charhgt, float vertline, int vertline_color) /* The return value is offsetf */ { int ii; double lor, lof, hir, hif, offsetf = 0.0; float *freqs; cpgsave(); cpgbbuf(); /* Set the "Normal" plotting attributes */ cpgsls(1); cpgslw(1); cpgsch(charhgt); cpgsci(1); cpgvstd(); if (maxpow == 0.0) /* Autoscale for the maximum value */ maxpow = 1.1 * fv->maxpow; lor = fv->lor; lof = lor / T; hir = lor + fv->dr * DISPLAYNUM; hif = hir / T; offsetf = 0.0; /* Period Labels */ if (fv->zoomlevel >= 0 && lof > 1.0) { double lop, hip, offsetp = 0.0; lop = 1.0 / lof; hip = 1.0 / hif; offsetp = 0.0; if ((lop - hip) / hip < 0.001) { int numchar; char label[50]; offsetp = 0.5 * (hip + lop); numchar = snprintf(label, 50, "Period - %.15g (s)", offsetp); cpgmtxt("T", 2.5, 0.5, 0.5, label); } else { cpgmtxt("T", 2.5, 0.5, 0.5, "Period (s)"); } cpgswin(lop - offsetp, hip - offsetp, 0.0, maxpow); cpgbox("CIMST", 0.0, 0, "", 0.0, 0); } /* Frequency Labels */ if ((hif - lof) / hif < 0.001) { int numchar; char label[50]; offsetf = 0.5 * (hif + lof); numchar = snprintf(label, 50, "Frequency - %.15g (Hz)", offsetf); cpgmtxt("B", 2.8, 0.5, 0.5, label); } else { cpgmtxt("B", 2.8, 0.5, 0.5, "Frequency (Hz)"); } cpgswin(lof - offsetf, hif - offsetf, 0.0, maxpow); /* Add zapboxes if required */ if (numzaplist) { double zaplo, zaphi; cpgsave(); cpgsci(15); cpgsfs(1); for (ii = 0; ii < numzaplist; ii++) { zaplo = zaplist[ii].lobin; zaphi = zaplist[ii].hibin; if ((zaplo < hir && zaplo > lor) || (zaphi < hir && zaphi > lor)) { cpgrect(zaplo / T - offsetf, zaphi / T - offsetf, 0.0, 0.95 * maxpow); } } cpgunsa(); } /* Add a background vertical line if requested */ if (vertline != 0.0 && vertline_color != 0) { cpgsave(); cpgsci(vertline_color); cpgmove(vertline / T - offsetf, 0.0); cpgdraw(vertline / T - offsetf, maxpow); cpgunsa(); } if (fv->zoomlevel >= 0 && lof > 1.0) cpgbox("BINST", 0.0, 0, "BCNST", 0.0, 0); else cpgbox("BCINST", 0.0, 0, "BCNST", 0.0, 0); /* Plot the spectrum */ freqs = gen_fvect(DISPLAYNUM); for (ii = 0; ii < DISPLAYNUM; ii++) freqs[ii] = fv->rs[ii] / T - offsetf; if (fv->zoomlevel > 0) { /* Magnified power spectrum */ cpgline(DISPLAYNUM, freqs, fv->powers); } else { /* Down-sampled power spectrum */ for (ii = 0; ii < DISPLAYNUM; ii++) { cpgmove(freqs[ii], 0.0); cpgdraw(freqs[ii], fv->powers[ii]); } } vect_free(freqs); cpgmtxt("L", 2.5, 0.5, 0.5, "Normalized Power"); cpgebuf(); cpgunsa(); return offsetf; }
void galaxy(double peakL, double taperL, double taperB) { int i; double band; double galL[NG], xb[NG], ra, dec; double x, y; band = peakL - taperL; // (-180,180) for(i=0; i<NG;i++) { galL[i] = -M_PI + ((double)i/(double)(NG-1)) * 2.0*M_PI; xb[i] = peakL - band*fabs(galL[i])/taperB; } // plot galactic plane cpgsci(2); for(i=1;i<NG;i++) { eqgal(galL[i],0.0,&ra,&dec); project(ra,dec,&x,&y); cpgpt1(x,y,-2); } for(i=0; i<NG;i++) { galL[i] = 0.0 + ((double)i/(double)(NG-1)) * taperB; xb[i] = peakL - band*fabs(galL[i])/taperB; } // Northern boundary of exclusion zone cpgsci(LIGHTGRAY); for(i=1;i<NG;i++) { eqgal(galL[i],xb[i],&ra,&dec); project(ra,dec,&x,&y); cpgpt1(x,y,-2); } // Southern boundary of exclusion zone for(i=1;i<NG;i++) { eqgal(galL[i],-xb[i],&ra,&dec); project(ra,dec,&x,&y); cpgpt1(x,y,-2); } for(i=0; i<NG;i++) { galL[i] = 0.0 - ((double)i/(double)(NG-1)) * taperB; xb[i] = peakL - band*fabs(galL[i])/taperB; } // Northern boundary of exclusion zone cpgsci(LIGHTGRAY); for(i=1;i<NG;i++) { eqgal(galL[i],xb[i],&ra,&dec); project(ra,dec,&x,&y); cpgpt1(x,y,-2); } // Southern boundary of exclusion zone for(i=1;i<NG;i++) { eqgal(galL[i],-xb[i],&ra,&dec); project(ra,dec,&x,&y); cpgpt1(x,y,-2); } cpgsci(1); #if 0 // galactic center cpgsci(2); ra = 17.76*15.0/DEG_IN_RADIAN; FIXRA(ra); dec = -28.9333/DEG_IN_RADIAN; project(ra,dec,&x,&y); cpgpt1(x,y,71); cpgsci(2); // galactic anticenter cpgsci(2); ra = (180+17.76*15.0)/DEG_IN_RADIAN; FIXRA(ra); dec = 27.117/DEG_IN_RADIAN; project(ra,dec,&x,&y); cpgpt1(x,y,103); cpgsci(2); #endif // plot ecliptic cpgslw(5); cpgsci(2); // (-180,180) for(i=0; i<NG;i++) { galL[i] = -M_PI + ((double)i/(double)(NG-1)) * 2.0*M_PI; xb[i] = peakL - band*fabs(galL[i])/taperB; } for(i=0; i<NG; i++) { dec = atan(sin(galL[i])*tan(23.43333*M_PI/180.0)); project(galL[i],dec,&x,&y); cpgpt1(x,y,-2); } cpgslw(1); cpgsci(1); }
static int plot_dataview(dataview * dv, float minval, float maxval, float charhgt) /* The return value is offsetn */ { int ii, lon, hin, offsetn = 0, tmpn; double lot, hit, offsett = 0.0; float ns[MAXDISPNUM], hiavg[MAXDISPNUM], loavg[MAXDISPNUM]; float scalemin = 0.0, scalemax = 0.0, dscale; cpgsave(); cpgbbuf(); /* Set the "Normal" plotting attributes */ cpgsls(1); cpgslw(1); cpgsch(charhgt); cpgsci(1); cpgvstd(); /* Autoscale for the maximum value */ if (maxval > 0.5 * LARGENUM) scalemax = dv->maxval; else scalemax = maxval; /* Autoscale for the minimum value */ if (minval < 0.5 * SMALLNUM) scalemin = dv->minval; else scalemin = minval; dscale = 0.1 * (scalemax - scalemin); if (maxval > 0.5 * LARGENUM) maxval = scalemax + dscale; if (minval < 0.5 * SMALLNUM) minval = scalemin - dscale; lon = dv->lon; lot = lon * idata.dt; hin = lon + dv->numsamps; hit = hin * idata.dt; /* Time Labels (top of box) */ if ((hit - lot) / hit < 0.001) { int numchar; char label[50]; offsett = 0.5 * (hit + lot); numchar = snprintf(label, 50, "Time - %.15g (s)", offsett); cpgmtxt("T", 2.5, 0.5, 0.5, label); } else { cpgmtxt("T", 2.5, 0.5, 0.5, "Time (s)"); } cpgswin(lot - offsett, hit - offsett, minval, maxval); cpgbox("CMST", 0.0, 0, "", 0.0, 0); /* Sample number labels */ if (lon > 10000000 || (double) (hin - lon) / (double) hin < 0.001) { int numchar; char label[50]; offsetn = (lon / 10000) * 10000; numchar = snprintf(label, 50, "Sample - %d", offsetn); cpgmtxt("B", 2.8, 0.5, 0.5, label); } else { cpgmtxt("B", 2.8, 0.5, 0.5, "Sample"); } cpgswin(lon - offsetn, hin - offsetn, minval, maxval); cpgbox("BNST", 0.0, 0, "BCNST", 0.0, 0); /* Plot the rawdata if required */ tmpn = lon - offsetn; if (plotstats == 0 || plotstats == 2) { if (dv->zoomlevel > 0) { for (ii = 0; ii < dv->dispnum; ii++) ns[ii] = tmpn + ii; cpgbin(dv->dispnum, ns, dv->vals, 0); } else { /* Plot the min/max values */ for (ii = 0; ii < dv->numchunks; ii++, tmpn += dv->chunklen) { cpgmove((float) tmpn, dv->mins[ii]); cpgdraw((float) tmpn, dv->maxs[ii]); } } } /* Plot the other statistics if requested */ if (plotstats == 0 || plotstats == 1) { tmpn = lon - offsetn; for (ii = 0; ii < dv->numchunks; ii++, tmpn += dv->chunklen) { ns[ii] = tmpn; hiavg[ii] = dv->avgmeds[ii] + dv->stds[ii]; loavg[ii] = dv->avgmeds[ii] - dv->stds[ii]; } if (dv->numchunks > 512) { if (plotstats == 1) { cpgline(dv->numchunks, ns, dv->mins); cpgline(dv->numchunks, ns, dv->maxs); } cpgsci(AVGMED_COLOR); cpgline(dv->numchunks, ns, dv->avgmeds); if (usemedian) cpgmtxt("T", -1.4, 0.02, 0.0, "Median"); else cpgmtxt("T", -1.4, 0.02, 0.0, "Average"); cpgsci(STDDEV_COLOR); cpgline(dv->numchunks, ns, hiavg); cpgline(dv->numchunks, ns, loavg); cpgmtxt("T", -2.6, 0.02, 0.0, "+/- 1 Std Dev"); } else { if (plotstats == 1) { cpgbin(dv->numchunks, ns, dv->mins, 0); cpgbin(dv->numchunks, ns, dv->maxs, 0); } cpgsci(AVGMED_COLOR); cpgbin(dv->numchunks, ns, dv->avgmeds, 0); if (usemedian) cpgmtxt("T", -1.4, 0.02, 0.0, "Median"); else cpgmtxt("T", -1.4, 0.02, 0.0, "Average"); cpgsci(STDDEV_COLOR); cpgbin(dv->numchunks, ns, hiavg, 0); cpgbin(dv->numchunks, ns, loavg, 0); cpgmtxt("T", -2.6, 0.02, 0.0, "+/- 1 Std Dev"); } } cpgsci(1); cpgmtxt("L", 2.5, 0.5, 0.5, "Sample Value"); cpgebuf(); cpgunsa(); return offsetn; }
/* set line width */ static void _pgslw (int *i) { cpgslw (*i); }