~Array2dFileLabel();
- const string& getLabelString (void) const
+ string getLabelString (void) const
{ return label_str; }
kfloat64 getCalcTime (void) const
kfloat64 getLabelType (void) const
{ return label_type; }
+ string& setLabelString (const char* const str)
+ { label_str = str; return (label_str); }
+
+ string& setLabelString (const string& str)
+ { label_str = str; return (label_str); }
+
void getDateString (string& str) const;
};
void labelAdd (int type, const char* const label_str, double calc_time=0.);
+ void labelsCopy (Array2dFile& file, const char* const idStr = NULL);
+
void fileClose (void);
void setPixelType (int type)
void setAxisExtent (double mMinX, double mMaxX, double mMinY, double mMaxY);
- void getPixelValueRange (T& pvmin, T& pvmax);
+ void getPixelValueRange (T& pvmin, T& pvmax) const;
void doPixelOffsetScale (double offset, double scale);
bool arrayDataWrite (void);
+ void arrayDataClear (void);
+
bool fileRead (void);
bool fileCreate (void);
template<class T>
void
-Array2dFile<T>::getPixelValueRange (T& pvmin, T& pvmax)
+Array2dFile<T>::getPixelValueRange (T& pvmin, T& pvmax) const
{
- if (array != NULL) {
- T** da = array.GetArray();
+ if (array != NULL) {
+ T** da = array->getArray();
pvmax = pvmin = da[0][0];
- for (int ix = 0; ix < mNX; ix++)
- for (int iy = 0; iy < mNY; iy++)
- if (pvmax < da[ix][iy])
- pvmax = da[ix][iy];
- else if (pvmin > da[ix][iy])
+ for (int ix = 0; ix < mNX; ix++)
+ for (int iy = 0; iy < mNY; iy++)
+ if (pvmax < da[ix][iy])
+ pvmax = da[ix][iy];
+ else if (pvmin > da[ix][iy])
pvmin = da[ix][iy];
- }
+ }
}
template<class T>
fsync(file_id);
}
+template<class T>
+void
+Array2dFile<T>::labelsCopy (Array2dFile& copyFile, const char* const idStr)
+{
+ string id = idStr;
+ for (int i = 0; i < copyFile.getNumLabels(); i++) {
+ Array2dFileLabel l;
+ copyFile.labelRead (l, i);
+ string lstr = l.getLabelString();
+ lstr = idStr + lstr;
+ l.setLabelString (lstr);
+ labelAdd (l);
+ }
+}
+
+template<class T>
+void
+Array2dFile<T>::arrayDataClear (void)
+{
+ if (array != NULL) {
+ T** v = array->getArray();
+ for (unsigned int ix = 0; ix < mNX; ix++)
+ for (unsigned int iy = 0; iy < mNY; iy++)
+ v[ix][iy] = 0;
+ }
+}
-#endif
#ifdef MPI_CT
#include <mpi.h>
adf.setPixelType (Array2dFile<kfloat64>::FLOAT32);
}
+ kfloat32** getArray(void) const
+ { return adf.getArray(); }
+
+ kuint32 nx(void) const
+ { return adf.nx(); }
+
+ kuint32 ny(void) const
+ { return adf.ny(); }
+
#ifdef MPI_CT
MPI_Datatype getMPIDataType (void) const
{ return MPI_FLOAT; }
{
adf.setPixelType (Array2dFile<kfloat64>::FLOAT64);
}
+
+ kfloat64** getArray(void) const
+ { return adf.getArray(); }
+
+ kuint32 nx(void) const
+ { return adf.nx(); }
+
+ kuint32 ny(void) const
+ { return adf.ny(); }
};
typedef F64Image ImageFile;
typedef kfloat64* ImageFileColumn;
typedef kfloat64** ImageFileArray;
+#endif
+
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: ir.h,v 1.21 2000/06/07 03:49:54 kevin Exp $
+** $Id: ir.h,v 1.22 2000/06/07 07:43:39 kevin Exp $
** $Log: ir.h,v $
+** Revision 1.22 2000/06/07 07:43:39 kevin
+** *** empty log message ***
+**
** Revision 1.21 2000/06/07 03:49:54 kevin
** *** empty log message ***
**
static const int POINTS_PER_CIRCLE=90;
#define MAXREMARK 99
-typedef FMTX_2D IMAGE_ARRAY; /* use 2d floating point matrix */
-typedef float IMAGE_ELEM_VAL; /* use floats for image storing */
-
-struct image_st {
- IMAGE_ARRAY v; /* values of voxels in matrix form */
- SDF_2D *dfp_2d; /* Pointer to disk image file */
- int nx, ny; /* size of voxel matrix */
- double xmin, xmax, ymin, ymax; /* extent of voxel matrix in phm coord */
- char remark[MAXREMARK+1]; /* description of voxel data */
- float calctime; /* time to calculate voxels in seconds */
-};
-typedef struct image_st IMAGE;
-
typedef enum {
RECTANGLE,
TRIANGLE,
#endif
-/* From reconstr.c */
-IMAGE *image_reconst (IMAGE *im, RAYSUM *rs, const FilterType filt_type, double filt_param, InterpolationType interp_type, int interp_param, const BackprojType backproj_type, int const ir_trace);
-
-/* From bproj.c */
-void backproj_init (const RAYSUM *rs, IMAGE *im, const BackprojType bproj_method);
-int backproj_calc (const RAYSUM *rs, IMAGE *im, const double *t, const double view_angle,
- const int interp_type, const int bproj_method);
-void backproj_term (const RAYSUM *rs, IMAGE *im, const int bproj_method);
-
-void backproj_init_trig (const RAYSUM *rs, IMAGE *im);
-int backproj_calc_trig (const RAYSUM *rs, IMAGE *im, const double *t,
- const double view_angle, const int interp_type);
-void backproj_term_trig (const RAYSUM *rs, IMAGE *im);
-void backproj_init_table (const RAYSUM *rs, IMAGE *im);
-int backproj_calc_table (const RAYSUM *rs, IMAGE *im, const double *t,
- const double view_angle, const int interp_type);
-void backproj_term_table (const RAYSUM *rs, IMAGE *im);
-void backproj_init_d (const RAYSUM *rs, IMAGE *im);
-int backproj_calc_d (const RAYSUM *rs, IMAGE *im, const double *t,
- const double view_angle, const int interp_type);
-void backproj_term_d (const RAYSUM *rs, IMAGE *im);
-void backproj_init_d2 (const RAYSUM *rs, IMAGE *im);
-int backproj_calc_d2 (const RAYSUM *rs, IMAGE *im, const double *t,
- const double view_angle, const int interp_type);
-void backproj_term_d2 (const RAYSUM *rs, IMAGE *im);
-void backproj_init_id (const RAYSUM *rs, IMAGE *im);
-int backproj_calc_id (const RAYSUM *rs, IMAGE *im, const double *t,
- const double view_angle, const int interp_type);
-void backproj_term_id (const RAYSUM *rs, IMAGE *im);
-void backproj_init_id2 (const RAYSUM *rs, IMAGE *im);
-int backproj_calc_id2 (const RAYSUM *rs, IMAGE *im, const double *t,
- const double view_angle, const int interp_type);
-void backproj_term_id2 (const RAYSUM *rs, IMAGE *im);
-
/* bspline.c */
int bspline(int samples, int zoom_factor, int spline_order, double input[], double output[]);
double sinc(double x, double mult);
double integral_abscos(double u, double w);
-/* image.c */
-IMAGE *image_create(const char *fname, const int nx, const int ny);
-int image_clear(IMAGE *im);
-int image_save(IMAGE *im);
-IMAGE *image_load(const char *fname);
-void image_filter_response(IMAGE *im, const DomainType domain, double bw, const FilterType filt_type, double filt_param, const int opt_trace);
-int image_display (const IMAGE *im);
-int image_display_scale (const IMAGE *im, const int scale, const double pmin, const double pmax);
-
/* options.c */
int opt_set_trace(const char *optarg);
const char *name_of_phantom(const int phmid);
void phm_draw(const PHANTOM *phm);
#endif
-/* phm2image.c */
-void phm_to_image(const PHANTOM *phm, IMAGE *im, const int col_start, const int col_count, const int nsample, const int trace);
-int pelm_is_point_inside(PELM *obj, const double x, const double y, const CoordType coord_type);
-
/* phmstd.c */
void phm_std_herman (PHANTOM *phm);
void phm_std_rowland (PHANTOM *phm);
#ifdef __cplusplus
}
+/* From phm2image.cpp */
void phm_to_imagefile (const PHANTOM *phm, ImageFile& im, const int col_start, const int col_count, const int nsample, const int trace);
+int pelm_is_point_inside(PELM *obj, const double x, const double y, const CoordType coord_type);
+
+/* image.cpp */
+void image_filter_response(ImageFile& im, const DomainType domain, double bw, const FilterType filt_type, double filt_param, const int opt_trace);
+int image_display (const ImageFile& im);
+int image_display_scale (const ImageFile& im, const int scale, const double pmin, const double pmax);
+
+/* From reconstr.cpp */
+ImageFile& proj_reconst (ImageFile& im, RAYSUM *rs, const FilterType filt_type, double filt_param, InterpolationType interp_type, int interp_param, const BackprojType backproj_type, int const ir_trace);
+
+/* From bproj.cpp */
+void backproj_init (const RAYSUM *rs, ImageFile& im, const BackprojType bproj_method);
+int backproj_calc (const RAYSUM *rs, ImageFile& im, const double *t, const double view_angle, const int interp_type, const int bproj_method);
+void backproj_term (const RAYSUM *rs, ImageFile& im, const int bproj_method);
+
+void backproj_init_trig (const RAYSUM *rs, ImageFile& im);
+int backproj_calc_trig (const RAYSUM *rs, ImageFile& im, const double *t,
+ const double view_angle, const int interp_type);
+void backproj_term_trig (const RAYSUM *rs, ImageFile& im);
+void backproj_init_table (const RAYSUM *rs, ImageFile& im);
+int backproj_calc_table (const RAYSUM *rs, ImageFile& im, const double *t,
+ const double view_angle, const int interp_type);
+void backproj_term_table (const RAYSUM *rs, ImageFile& im);
+void backproj_init_d (const RAYSUM *rs, ImageFile& im);
+int backproj_calc_d (const RAYSUM *rs, ImageFile& im, const double *t,
+ const double view_angle, const int interp_type);
+void backproj_term_d (const RAYSUM *rs, ImageFile& im);
+void backproj_init_d2 (const RAYSUM *rs, ImageFile& im);
+int backproj_calc_d2 (const RAYSUM *rs, ImageFile& im, const double *t,
+ const double view_angle, const int interp_type);
+void backproj_term_d2 (const RAYSUM *rs, ImageFile& im);
+void backproj_init_id (const RAYSUM *rs, ImageFile& im);
+int backproj_calc_id (const RAYSUM *rs, ImageFile& im, const double *t,
+ const double view_angle, const int interp_type);
+void backproj_term_id (const RAYSUM *rs, ImageFile& im);
+void backproj_init_id2 (const RAYSUM *rs, ImageFile& im);
+int backproj_calc_id2 (const RAYSUM *rs, ImageFile& im, const double *t,
+ const double view_angle, const int interp_type);
+void backproj_term_id2 (const RAYSUM *rs, ImageFile& im);
+
#endif /* __cplusplus */