X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=libctsim%2Fprojections.cpp;h=878f50c1fb04357363171c6847ab3836791eaa7b;hp=d80579e5f897ab0ea3d17372dd5ed6d5fd5fecdd;hb=505de7e90b7c4a6ab3e81ee3192a7d9837701806;hpb=11ea72090da18aa290e2c3ab217f1d27736bca50 diff --git a/libctsim/projections.cpp b/libctsim/projections.cpp index d80579e..878f50c 100644 --- a/libctsim/projections.cpp +++ b/libctsim/projections.cpp @@ -8,7 +8,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: projections.cpp,v 1.48 2001/02/20 17:44:14 kevin Exp $ +** $Id: projections.cpp,v 1.51 2001/03/02 02:08:14 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 @@ -33,14 +33,14 @@ const int Projections::POLAR_INTERP_NEAREST = 0; const int Projections::POLAR_INTERP_BILINEAR = 1; const int Projections::POLAR_INTERP_BICUBIC = 2; -const char* Projections::s_aszInterpName[] = +const char* const Projections::s_aszInterpName[] = { {"nearest"}, {"bilinear"}, // {"bicubic"}, }; -const char* Projections::s_aszInterpTitle[] = +const char* const Projections::s_aszInterpTitle[] = { {"Nearest"}, {"Bilinear"}, @@ -152,6 +152,7 @@ Projections::initFromScanner (const Scanner& scanner) m_detInc = scanner.detInc(); m_geometry = scanner.geometry(); m_dFocalLength = scanner.focalLength(); + m_dSourceDetectorLength = scanner.sourceDetectorLength(); m_dViewDiameter = scanner.viewDiameter(); m_rotStart = 0; m_detStart = -(scanner.detLen() / 2); @@ -232,6 +233,7 @@ Projections::headerWrite (fnetorderstream& fs) kfloat64 _detInc = m_detInc; kfloat64 _viewDiameter = m_dViewDiameter; kfloat64 _focalLength = m_dFocalLength; + kfloat64 _sourceDetectorLength = m_dSourceDetectorLength; kfloat64 _fanBeamAngle = m_dFanBeamAngle; fs.seekp(0); @@ -250,6 +252,7 @@ Projections::headerWrite (fnetorderstream& fs) fs.writeFloat64 (_detInc); fs.writeFloat64 (_viewDiameter); fs.writeFloat64 (_focalLength); + fs.writeFloat64 (_sourceDetectorLength); fs.writeFloat64 (_fanBeamAngle); fs.writeInt16 (_year); fs.writeInt16 (_month); @@ -279,7 +282,7 @@ Projections::headerRead (fnetorderstream& fs) { kuint16 _hsize, _signature, _year, _month, _day, _hour, _minute, _second, _remarksize = 0; kuint32 _nView, _nDet, _geom; - kfloat64 _calcTime, _rotStart, _rotInc, _detStart, _detInc, _focalLength, _viewDiameter, _fanBeamAngle; + kfloat64 _calcTime, _rotStart, _rotInc, _detStart, _detInc, _focalLength, _sourceDetectorLength, _viewDiameter, _fanBeamAngle; fs.seekg(0); if (! fs) @@ -297,6 +300,7 @@ Projections::headerRead (fnetorderstream& fs) fs.readFloat64 (_detInc); fs.readFloat64 (_viewDiameter); fs.readFloat64 (_focalLength); + fs.readFloat64 (_sourceDetectorLength); fs.readFloat64 (_fanBeamAngle); fs.readInt16 (_year); fs.readInt16 (_month); @@ -342,6 +346,7 @@ Projections::headerRead (fnetorderstream& fs) m_detStart = _detStart; m_detInc = _detInc; m_dFocalLength = _focalLength; + m_dSourceDetectorLength = _sourceDetectorLength; m_dViewDiameter = _viewDiameter; m_dFanBeamAngle = _fanBeamAngle; m_year = _year; @@ -630,11 +635,11 @@ Projections::printProjectionData (int startView, int endView) printf("Projections Data\n\n"); printf("Description: %s\n", m_remark.c_str()); printf("Geometry: %s\n", Scanner::convertGeometryIDToName (m_geometry)); - printf("nView = %8d nDet = %8d\n", m_nView, m_nDet); - printf("focalLength = %8.4f ViewDiameter = %8.4f\n", m_dFocalLength, m_dViewDiameter); - printf("fanBeamAngle= %8.4f\n", convertRadiansToDegrees(m_dFanBeamAngle)); - printf("rotStart = %8.4f rotInc = %8.4f\n", m_rotStart, m_rotInc); - printf("detStart = %8.4f detInc = %8.4f\n", m_detStart, m_detInc); + printf("nView = %8d nDet = %8d\n", m_nView, m_nDet); + printf("focalLength = %8.4f ViewDiameter = %8.4f\n", m_dFocalLength, m_dViewDiameter); + printf("fanBeamAngle= %8.4f SourceDetector = %8.4f\n", convertRadiansToDegrees(m_dFanBeamAngle), m_dSourceDetectorLength); + printf("rotStart = %8.4f rotInc = %8.4f\n", m_rotStart, m_rotInc); + printf("detStart = %8.4f detInc = %8.4f\n", m_detStart, m_detInc); if (m_projData != NULL) { if (startView < 0) startView = 0; @@ -662,6 +667,7 @@ Projections::printScanInfo (std::ostringstream& os) const os << "Description: " << m_remark.c_str()<< "\n"; os << "Geometry: " << Scanner::convertGeometryIDToName (m_geometry)<< "\n"; os << "Focal Length: " << m_dFocalLength<< "\n"; + os << "Source Detector Length: " << m_dSourceDetectorLength << "\n"; os << "View Diameter: " << m_dViewDiameter<< "\n"; os << "Fan Beam Angle: " << convertRadiansToDegrees(m_dFanBeamAngle) << "\n"; os << "detStart: " << m_detStart<< "\n"; @@ -875,3 +881,13 @@ Projections::interpolatePolar (ImageFileArray& v, ImageFileArray& vImag, } +bool +Projections::initFromSomatomAR_STAR (int iNViews, int iNDets, unsigned char* pData, unsigned long lDataLength) +{ + init (iNViews, iNDets); + + if (iNDets != 1024) + return false; + if (iNViews == 750 && +} +