** This is part of the CTSim program
** Copyright (C) 1983-2001 Kevin Rosenberg
**
-** $Id: threadrecon.cpp,v 1.24 2001/03/11 15:27:30 kevin Exp $
+** $Id: threadrecon.cpp,v 1.25 2001/03/13 08:24:41 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
ReconstructorSupervisorThread::ReconstructorSupervisorThread (ProjectionFileView* pProjView, int iNX, int iNY,
const char* pszFilterName, double dFilterParam, const char* pszFilterMethod, int iZeropad,
const char* pszFilterGenerationName, const char* pszInterpName, int iInterpParam,
- const char* pszBackprojectName, const char* const pszLabel, ReconstructionROI* pROI)
+ const char* pszBackprojectName, const char* const pszLabel, ReconstructionROI* pROI, bool bRebinToParallel)
: SupervisorThread(), m_pProjView(pProjView), m_iNX(iNX), m_iNY(iNY), m_strFilterName(pszFilterName), m_dFilterParam(dFilterParam),
m_strFilterMethod(pszFilterMethod), m_iZeropad(iZeropad), m_strFilterGenerationName(pszFilterGenerationName),
m_strInterpName(pszInterpName), m_iInterpParam(iInterpParam), m_strBackprojectName(pszBackprojectName),
- m_strLabel(pszLabel), m_reconROI(*pROI)
+ m_strLabel(pszLabel), m_reconROI(*pROI), m_bRebinToParallel(bRebinToParallel)
{
}
wxThread::ExitCode
ReconstructorSupervisorThread::Entry()
{
- ReconstructorSupervisor reconSupervisor (this, m_pProjView, m_iNX, m_iNY,
+ Projections* pProj = &m_pProjView->GetDocument()->getProjections();
+
+ if (m_bRebinToParallel)
+ pProj = pProj->interpolateToParallel();
+
+ ReconstructorSupervisor reconSupervisor (this, pProj, m_pProjView, m_iNX, m_iNY,
m_strFilterName.c_str(), m_dFilterParam, m_strFilterMethod.c_str(), m_iZeropad, m_strFilterGenerationName.c_str(),
m_strInterpName.c_str(), m_iInterpParam, m_strBackprojectName.c_str(), m_strLabel.c_str(), &m_reconROI);
reconSupervisor.onDone();
reconSupervisor.deleteWorkers();
+ if (m_bRebinToParallel)
+ delete pProj;
+
return static_cast<wxThread::ExitCode>(0);
}
//
/////////////////////////////////////////////////////////////////////
-ReconstructorSupervisor::ReconstructorSupervisor (SupervisorThread* pThread, ProjectionFileView* pProjView,
- int iImageNX, int iImageNY, const char* pszFilterName, double dFilterParam, const char* pszFilterMethod,
- int iZeropad, const char* pszFilterGenerationName, const char* pszInterpName, int iInterpParam,
- const char* pszBackprojectName, const char* const pszLabel, ReconstructionROI* pROI)
+ReconstructorSupervisor::ReconstructorSupervisor (SupervisorThread* pThread, Projections* pProj,
+ ProjectionFileView* pProjView, int iImageNX, int iImageNY, const char* pszFilterName, double dFilterParam,
+ const char* pszFilterMethod, int iZeropad, const char* pszFilterGenerationName,
+ const char* pszInterpName, int iInterpParam, const char* pszBackprojectName, const char* const pszLabel,
+ ReconstructionROI* pROI)
: BackgroundSupervisor (pThread, pProjView->GetFrame(), pProjView->GetDocument(), "Reconstructing", pProjView->GetDocument()->getProjections().nView()),
- m_pProjView(pProjView), m_pProjDoc(pProjView->GetDocument()),
+ m_pProj(pProj), m_pProjView(pProjView), m_pProjDoc(pProjView->GetDocument()),
m_iImageNX(iImageNX), m_iImageNY(iImageNY),
m_pszFilterName(pszFilterName), m_dFilterParam(dFilterParam), m_pszFilterMethod(pszFilterMethod),
m_iZeropad(iZeropad), m_pszFilterGenerationName(pszFilterGenerationName), m_pszInterpName(pszInterpName),
ReconstructorSupervisor::createWorker (int iThread, int iStartUnit, int iNumUnits)
{
ReconstructorWorker* pThread = new ReconstructorWorker (this, iThread, iStartUnit, iNumUnits);
- pThread->SetParameters (m_pProjView, m_vecpChildImageFile[iThread], m_pszFilterName, m_dFilterParam,
- m_pszFilterMethod, m_iZeropad, m_pszFilterGenerationName, m_pszInterpName,
+ pThread->SetParameters (m_pProj, m_pProjView, m_vecpChildImageFile[iThread], m_pszFilterName,
+ m_dFilterParam, m_pszFilterMethod, m_iZeropad, m_pszFilterGenerationName, m_pszInterpName,
m_iInterpParam, m_pszBackprojectName, m_pReconROI);
return pThread;
wxCriticalSectionLocker critsect (doneSection);
ImageFile* pImageFile = getImageFile();
- pImageFile->labelAdd (m_pProjView->GetDocument()->getProjections().getLabel());
+ pImageFile->labelAdd (m_pProj->getLabel());
pImageFile->labelAdd (m_pszLabel, getTimerEnd());
wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT );
/////////////////////////////////////////////////////////////////////
void
-ReconstructorWorker::SetParameters (ProjectionFileView* pProjView, ImageFile* pImageFile,
+ReconstructorWorker::SetParameters (const Projections* pProj, ProjectionFileView* pProjView, ImageFile* pImageFile,
const char* pszFilterName, double dFilterParam, const char* pszFilterMethod, int iZeropad,
const char* pszFilterGenerationName, const char* pszInterpName, int iInterpParam,
const char* pszBackprojectName, ReconstructionROI* pROI)
{
+ m_pProj = pProj;
m_pProjView = pProjView;
m_pImageFile = pImageFile;
m_pszFilterName = pszFilterName;
wxThread::ExitCode
ReconstructorWorker::Entry ()
{
- Reconstructor* pReconstructor = new Reconstructor (m_pProjView->GetDocument()->getProjections(),
- *m_pImageFile, m_pszFilterName, m_dFilterParam, m_pszFilterMethod, m_iZeropad,
- m_pszFilterGenerationName, m_pszInterpName, m_iInterpParam, m_pszBackprojectName, Trace::TRACE_NONE,
- m_pReconROI);
+ Reconstructor* pReconstructor = new Reconstructor (*m_pProj, *m_pImageFile, m_pszFilterName,
+ m_dFilterParam, m_pszFilterMethod, m_iZeropad, m_pszFilterGenerationName, m_pszInterpName,
+ m_iInterpParam, m_pszBackprojectName, Trace::TRACE_NONE, m_pReconROI, false);
bool bFail = pReconstructor->fail();
std::string failMsg;