** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: projections.cpp,v 1.40 2001/01/07 23:03:28 kevin Exp $
+** $Id: projections.cpp,v 1.45 2001/01/16 20:55:29 kevin Exp $
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License (version 2) as
bool
Projections::copyViewData (const char* const filename, std::ostream& os, int startView, int endView)
{
- frnetorderstream is (filename, ios::in | ios::binary);
+ frnetorderstream is (filename, std::ios::in | std::ios::binary);
kuint16 sizeHeader, signature;
kuint32 _nView, _nDet;
+ is.seekg (0);
+ if (is.fail()) {
+ sys_error (ERR_SEVERE, "Unable to read projection file %s", filename);
+ return false;
+ }
+
is.readInt16 (sizeHeader);
is.readInt16 (signature);
is.readInt32 (_nView);
int nDet = _nDet;
if (signature != m_signature) {
- sys_error (ERR_FATAL, "Illegal signature in projection file %s", filename);
+ sys_error (ERR_SEVERE, "Illegal signature in projection file %s", filename);
return false;
}
delete pViewData;
if (is.fail())
- sys_error (ERR_FATAL, "Error reading projection file");
+ sys_error (ERR_SEVERE, "Error reading projection file");
if (os.fail())
- sys_error (ERR_FATAL, "Error writing projection file");
+ sys_error (ERR_SEVERE, "Error writing projection file");
return (! (is.fail() | os.fail()));
}
is.readInt16 (signature);
is.seekg (0);
if (signature != m_signature) {
- sys_error (ERR_FATAL, "Illegal signature in projection file %s", filename);
+ sys_error (ERR_SEVERE, "Illegal signature in projection file %s", filename);
return false;
}
unsigned char* pHdrData = new unsigned char [sizeHeader];
is.read (reinterpret_cast<char*>(pHdrData), sizeHeader);
if (is.fail()) {
- sys_error (ERR_FATAL, "Error reading header");
+ sys_error (ERR_SEVERE, "Error reading header");
return false;
}
os.write (reinterpret_cast<char*>(pHdrData), sizeHeader);
if (os.fail()) {
- sys_error (ERR_FATAL, "Error writing header");
+ sys_error (ERR_SEVERE, "Error writing header");
return false;
}
if (m_projData != NULL) {
if (startView < 0)
startView = 0;
+ if (endView < 0)
+ endView = m_nView - 1;
if (startView > m_nView - 1)
startView = m_nView - 1;
if (endView > m_nView - 1)
calcArrayPolarCoordinates (nx, ny, ppdView, ppdDet);
std::complex<double>** ppcDetValue = new std::complex<double>* [m_nView];
- for (unsigned int iView = 0; iView < m_nView; iView++) {
+ unsigned int iView;
+ for (iView = 0; iView < m_nView; iView++) {
ppcDetValue[iView] = new std::complex<double> [m_nDet];
for (unsigned int iDet = 0; iDet < m_nDet; iDet++)
ppcDetValue[iView][iDet] = std::complex<double>(getDetectorArray (iView).detValues()[iDet], 0);
v[ix][iy] = 0;
}
} else if (iInterpolationID == POLAR_INTERP_BILINEAR) {
- int iFloorView = ppdView[ix][iy];
+ int iFloorView = static_cast<int>(ppdView[ix][iy]);
double dFracView = ppdView[ix][iy] - iFloorView;
- int iFloorDet = ppdDet[ix][iy];
+ int iFloorDet = static_cast<int>(ppdDet[ix][iy]);
double dFracDet = ppdDet[ix][iy] - iFloorDet;
if (iFloorDet >= 0 && iFloorView >= 0) {