r586: *** empty log message ***
[ctsim.git] / src / threadproj.h
1 /*****************************************************************************
2 ** FILE IDENTIFICATION
3 **
4 **   Name:          threadproj.h
5 **   Purpose:       Header file for thread reconstructions
6 **   Programmer:    Kevin Rosenberg
7 **   Date Started:  February 2001
8 **
9 **  This is part of the CTSim program
10 **  Copyright (C) 1983-2001 Kevin Rosenberg
11 **
12 **  $Id: threadproj.h,v 1.3 2001/02/25 19:24:01 kevin Exp $
13 **
14 **  This program is free software; you can redistribute it and/or modify
15 **  it under the terms of the GNU General Public License (version 2) as
16 **  published by the Free Software Foundation.
17 **
18 **  This program is distributed in the hope that it will be useful,
19 **  but WITHOUT ANY WARRANTY; without even the implied warranty of
20 **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 **  GNU General Public License for more details.
22 **
23 **  You should have received a copy of the GNU General Public License
24 **  along with this program; if not, write to the Free Software
25 **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
26 ******************************************************************************/
27
28 #ifndef _THREADPROJ_H
29 #define _THREADPROJ_H
30
31 #include <vector>
32 #include <wx/thread.h>
33 #include <wx/progdlg.h>
34 #include "timer.h"
35 #include "backgroundsupr.h"
36
37
38 class Reconstructor;
39 class ImageFile;
40 class PhantomFileDocument;
41 class ProjectorWorker;
42 class ProjectionFileView;
43
44 class ProjectorSupervisorThread : public SupervisorThread {
45 private:
46   PhantomFileView* m_pPhantomView;
47   const int m_iNDet;
48   const int m_iNView;
49   const std::string m_strGeometry;
50   const int m_iNSample;
51   const double m_dRotation;
52   const double m_dFocalLength;
53   const double m_dViewRatio;
54   const double m_dScanRatio;
55   const std::string m_strLabel;
56
57 public:
58   ProjectorSupervisorThread(PhantomFileView* pProjView, int iNDet, int iNView, 
59    const char* pszGeometry, int iNSample, double dRotation, double dFocalLength, double dViewRatio, 
60    double dScanRatio, const char* const pszLabel);
61
62   virtual wxThread::ExitCode Entry();
63
64   virtual void OnExit();
65 };
66
67
68
69 class ProjectorSupervisor : public BackgroundSupervisor {
70 private:
71
72   std::vector<Projections*> m_vecpChildProjections;
73   PhantomFileDocument* m_pPhantomDoc;
74   PhantomFileView* m_pPhantomView;
75   Scanner* m_pScanner;
76   
77   const int m_iNDet;
78   const int m_iNView;
79   const char* const m_pszGeometry;
80   const int m_iNSample;
81   const double m_dRotation;
82   const double m_dFocalLength;
83   const double m_dViewRatio;
84   const double m_dScanRatio;
85   const char* const m_pszLabel;
86
87
88 public:
89    ProjectorSupervisor (SupervisorThread* pThread, PhantomFileView* pProjView, int iNDet, int iNView, 
90    const char* pszGeometry, int iNSample, double dRotation, double dFocalLength, double dViewRatio, 
91    double dScanRatio, const char* const pszLabel);
92
93    virtual BackgroundWorkerThread* createWorker (int iThread, int iStartUnit, int iNumUnits);
94
95    virtual ~ProjectorSupervisor ();
96
97   void onDone();
98
99   Projections* getProjections();
100
101 };
102
103
104
105
106 class ProjectorWorker : public BackgroundWorkerThread {
107 private:
108   PhantomFileView* m_pPhantomView;
109   Projections* m_pProjections;
110   Scanner* m_pScanner;
111   int m_iNDet;
112   int m_iNView;
113   const char* m_pszGeometry;
114   int m_iNSample;
115   double m_dRotation;
116   double m_dFocalLength;
117   double m_dViewRatio;
118   double m_dScanRatio;
119
120
121 public:
122   ProjectorWorker (ProjectorSupervisor* pSupervisor, int iThread, int iStartView, int iNumViews) 
123     : BackgroundWorkerThread (pSupervisor, iThread, iStartView, iNumViews)
124   {}
125   
126   void SetParameters (PhantomFileView* pPhantomFile, Projections* pProjections, Scanner* pScanner, 
127    int iNDet, int iView, 
128    const char* const pszGeometry, int iNSample, double dRotation, double dFocalLength, double dViewRatio,
129    double dScanRatio);
130
131   virtual wxThread::ExitCode Entry();      // thread execution starts here
132
133   virtual void OnExit();
134 };
135
136
137 #endif
138