home *** CD-ROM | disk | FTP | other *** search
- /*
- * hippoprint.c - line printer display for hippo package.
- *
- * Copyright (C) 1991 The Board of Trustees of The Leland Stanford
- * Junior University. All Rights Reserved.
- *
- * $Id: hippoprint.c,v 3.5 1992/04/10 22:48:36 rensing Rel $
- *
- * by jonas karlsson, at SLAC, August 1990
- * split up by Paul Rensing, Feb 28,1991
- */
-
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #ifndef THINK_C
- #include <string.h>
- #endif
- #include "hippo.h"
- #include "hippoutil.h"
-
- GLOB_QUAL const char hippoprint_c_rcsid[] =
- "$Id: hippoprint.c,v 3.5 1992/04/10 22:48:36 rensing Rel $";
-
- #define SCREENWIDTH 50
- #define BININDEX(x, y, z, xs, ys) ((xs) * (ys) * (z) + (x) * (ys) + y)
-
- static void print1D(display disp, FILE *file);
- static void print2D(display disp, FILE *file);
- static void print3D(display disp, FILE *file);
-
- void h_fprint(display disp, FILE *file)
- {
- if (h_bin(disp) != 0) return;
-
- switch (disp->dim) {
- case 1:
- print1D(disp, file);
- break;
- case 2:
- print2D(disp, file);
- break;
- case 3:
- print3D(disp, file);
- break;
- default:
- break;
- }
-
-
- }
-
- static void print1D(display disp, FILE *file)
- {
- int dim, i, j, nchar=0, bi;
- float binedge, bw=0.0;
- float ylow=0.0, range=0.0;
- float csize;
- int zeropt;
- char string[80];
- double d1,d2;
-
- dim = disp->binding.x;
-
- if (disp->title != NULL)
- fprintf(file,"%s\n\n",
- h_expandLabel( string, disp->title, 80, disp));
- if (disp->xAxis.label != NULL)
- fprintf(file,"X Axis label \"%s\"\n",
- h_expandLabel( string, disp->xAxis.label, 80, disp));
- fprintf(file,"%d bins, from %f to %f\n\n", disp->bins.xAxis.nBins,
- disp->xAxis.low, disp->xAxis.high);
-
- fprintf(file," bin xlow content\n");
-
- range = disp->bins.binMax - disp->bins.binMin;
- if (range <= 0.0) range = 1.0;
- ylow = disp->bins.binMin - 0.1*range;
- csize = (float)SCREENWIDTH / (1.2*range);
-
- zeropt = -ylow*csize;
- if (zeropt < 0) zeropt = 0;
-
- binedge = disp->xAxis.low;
- bw = ((float) (disp->xAxis.high - disp->xAxis.low)) /
- (float) disp->bins.xAxis.nBins;
-
- for (i = 0; i < disp->bins.xAxis.nBins; i++) {
- bi = BININDEX(i, 0, 0, disp->bins.xAxis.nBins, 1);
-
- fprintf(file,"\n%4d:%11.4g%11.4g ",
- i, binedge, disp->bins.data[bi]);
- binedge += bw;
-
- if (disp->bins.data[bi] >= 0)
- {
- for (j = 0; j < zeropt; j++) {
- putc(' ', file);
- }
- nchar = (disp->bins.data[bi] - ylow) * csize - zeropt;
- for (j = 0; j < nchar; j++) {
- putc('X', file);
- }
- if (nchar <= 0) putc('|', file);
- }
- else
- {
- nchar = (disp->bins.data[bi] - ylow) * csize;
- for (j = 0; j < nchar; j++) {
- putc(' ', file);
- }
- for (j = 0; j < zeropt - nchar; j++) {
- putc('X', file);
- }
- if ((zeropt - nchar) <= 0) putc('|', file);
- }
- }
- d1 = disp->bins.totals[0][0];
- d2 = disp->bins.totals[2][0];
-
- fprintf(file,"\nunderflow:%g overflow:%g\n",d1,d2);
- /*
- disp->bins.totals[0][0],
- disp->bins.totals[2][0]);
- */
- return;
- }
-
-
-
- static void print2D(display disp, FILE *file)
- {
- fprintf(file, "2D printer output is not yet implemented\n");
-
- return;
- }
-
- static void print3D(display disp, FILE *file)
- {
- fprintf(file, "3D printer output is not yet implemented\n");
-
- return;
- }
-
-