├── LICENSE
├── README.md
├── _config.yml
├── docs
├── RecViewManual230218en.pdf
├── RecViewManual230218ja.pdf
├── conv1800.bat
├── conv1800offset.bat
├── conv3600.bat
├── conv3600offset.bat
├── conv450.bat
├── conv900.bat
├── output1800.log
├── output1800offset.log
├── output3600.log
├── output3600offset.log
├── output450.log
└── output900.log
├── source
├── CFileDlgFolderSelect.cpp
├── CFileDlgFolderSelect.h
├── ChildFrm.cpp
├── ChildFrm.h
├── ClassDiagram1.cd
├── ClassDiagram3.cd
├── DlgDialbox.cpp
├── DlgDialbox.h
├── DlgFrameList.cpp
├── DlgFrameList.h
├── DlgGeneral.cpp
├── DlgGeneral.h
├── DlgHistoOpt.cpp
├── DlgHistoOpt.h
├── DlgHistogram.cpp
├── DlgHistogram.h
├── DlgHorizcenter.cpp
├── DlgHorizcenter.h
├── DlgLsqfit.cpp
├── DlgLsqfit.h
├── DlgMessage.cpp
├── DlgMessage.h
├── DlgOverlay.cpp
├── DlgOverlay.h
├── DlgPolygon.cpp
├── DlgPolygon.h
├── DlgProperty.cpp
├── DlgProperty.h
├── DlgQueue.cpp
├── DlgQueue.h
├── DlgReconOpt.cpp
├── DlgReconOpt.h
├── DlgReconst.cpp
├── DlgReconst.h
├── DlgRefraction.cpp
├── DlgRefraction.h
├── DlgRenumFiles.cpp
├── DlgRenumFiles.h
├── DlgResolnPlot.cpp
├── DlgResolnPlot.h
├── MainFrm.cpp
├── MainFrm.h
├── StdAfx.cpp
├── StdAfx.h
├── ccmplx.cpp
├── ccmplx.h
├── cerror.cpp
├── cerror.h
├── cfft.cpp
├── cfft.h
├── chdf5.cpp
├── chdf5.h
├── clReconst.cpp
├── clReconst.h
├── clReconstDummy.cpp
├── constants.h
├── cudaReconst.cu
├── cudaReconst.h
├── cudaReconstDummy.cpp
├── cudaReconstHost.cpp
├── cxyz.cpp
├── cxyz.h
├── gazo.aps
├── gazo.cpp
├── gazo.h
├── gazo.rc
├── gazo.sln
├── gazo.suo
├── gazo.vcproj
├── gazo.vcxproj
├── gazo.vcxproj.filters
├── gazo.vcxproj.user
├── gazoDoc.cpp
├── gazoDoc.h
├── gazoVS2008.sln
├── gazoView.cpp
├── gazoView.h
├── general.cpp
├── general.h
├── projx32.asm
├── projx32VS2008.asm
├── projx64.asm
├── projx64.lst
├── projx64VS2008.asm
├── reconstinfo.h
├── res
│ ├── Toolbar.bmp
│ ├── cursor1.cur
│ ├── gazo.ico
│ ├── gazo.rc2
│ └── gazoDoc.ico
└── resource.h
└── testPattern.png
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2016, Mizutani Lab
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without
5 | modification, are permitted provided that the following conditions are met:
6 |
7 | * Redistributions of source code must retain the above copyright notice, this
8 | list of conditions and the following disclaimer.
9 |
10 | * Redistributions in binary form must reproduce the above copyright notice,
11 | this list of conditions and the following disclaimer in the documentation
12 | and/or other materials provided with the distribution.
13 |
14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
18 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
20 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
21 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
22 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## RecView RRID:SCR_016531
2 | RecView is a program for tomographic reconstruction and image processing. It consists of over 25,000 lines of custom source codes in C++, CUDA C, OpenCL, and x86/x86_64 (x64) assembly languages including SIMD instructions up to AVX-512. RecView is designed for processing data obtained at the BL20B2, BL20XU, BL37XU, and BL47XU beamlines of the SPring-8 synchrotron radiation facility and also those taken at the 32-ID beamline of Advanced Photon Source (APS) of Argonne National Laboratory.
3 | Executables and manuals are available from the Releases pane of the repository homepage. The manuals are separately provided also in the docs folder.
4 |
5 |
6 | Three-dimensional structural analysis with microtomography (micro-CT) or nanotomography (nano-CT) is performed by recording two-dimensional x-ray images while rotating the sample. Then tomographic sections are calculated from the x-ray images with the convolution back-projection method. This calculation is repeated for each tomographic slice to reconstruct the entire three-dimensional structure. RecView is a program for the tomographic reconstruction calculation with graphical user interfaces. Multiple datasets can be continuously processed by using its queueing function. Zooming reconstruction (an example is shown left), Gaussian convolution for denoising, and many other procedures for image processing are also implemented. Resolution of real sample images can be estimated with the Fourier domain plot by using this program.
7 |
8 |
9 | ## License
10 | RecView is provided under the BSD 2-Clause License.
11 |
12 | ## References
13 |
- R. Mizutani, A. Takeuchi, R.Y. Osamura, S. Takekoshi, K. Uesugi and Y. Suzuki (2010). Submicrometer tomographic resolution examined using a micro-fabricated test object. Micron 41(1), 90-95.
14 | DOI
15 | PubMed
16 | arXiv
17 |
18 | - R. Mizutani, K. Taguchi, A. Takeuchi, K. Uesugi and Y. Suzuki (2010). Estimation of presampling modulation transfer function in synchrotron radiation microtomography. Nuclear Instrum. Meth. A 621(1-3), 615-619.
19 | DOI
20 | arXiv
21 |
22 | - R. Mizutani, R. Saiga, S. Takekoshi, C. Inomoto, N. Nakamura, M. Itokawa, M. Arai, K. Oshima, A. Takeuchi, K. Uesugi, Y. Terada and Y. Suzuki (2016). A method for estimating spatial resolution of real image in the Fourier domain. J. Microscopy 261(1), 57-66.
23 | DOI
24 | PubMed
25 | arXiv
26 |
27 | - R. Saiga, A. Takeuchi, K. Uesugi, Y. Terada, Y. Suzuki and R. Mizutani (2018). Method for estimating modulation transfer function from sample images. Micron 105, 64-69.
28 | DOI
29 | PubMed
30 | arXiv
31 |
32 |
33 | ## Release notes
34 | The current Release contains 64-bit (x64) and 32-bit (x86) executables complied using Visual Studio 2017 C++ and CUDA Toolkit 10.0. If your PC is running 64-bit Windows and has NVIDIA Tesla, GeForce, Quadro,or RTX GPUs with 'compute capability' of 3.0 or higher (Kepler or later), the reconstruction calculation can be executed on the GPU.
35 | The present version can also be compiled with Visual Studio 2008 and CUDA Toolkit 5.5 by using gazoVS2008.sln file. An x64CUDA executable built with VS2008 is included in the current Release. This exe can run on GPUs with 'compute capability' of 2.0 (Fermi). A CUDA executable for x86 platform can be built with VS2008.
36 |
37 | A test dataset in TIFF format is also included in the Release.
38 |
39 |
40 | - Build-240605. Minor debugs in determining the number of frames per dataset of data obtained with the syncreadout mode of Hamamatsu detectors.
41 | - Build-230615. Updated the histogram and resolution plot dialogs to make the display compatible with the Screen DPI awareness. Added a function to automatically preprocess raw data when reading individual a*.img files. Added an ability to maintain contrast on the LAC scale when moving back and forth between image frames. Other misc updates.
42 | - Build-220422. Tomographic reconstruction code using AVX-512 instructions is now implemented. The AVX-512 assembler routine is enabled if both of AVX-512F and AVX-512DQ features are available. The previous rouitnes can also be chosen from the 'Computing config' dialog. The acceleration with AVX-512 was very subtle in the following example.
43 |
44 | - Tau (RTX A4000, 6144 cores, 1.56 GHz) = 0.029 nsec (0.22 sec for a 2048x2048 slice from 1800 projections)
45 | - Tau (Core i5-11400 (x64), 6 threads, 2.6 GHz, AVX-512) = 0.22 nsec (1.67 sec for a 2048x2048 tomogram from 1800 projections)
46 | - Tau (Core i5-11400 (x64), 6 threads, 2.6 GHz, AVX2) = 0.22 nsec (1.68 sec for a 2048x2048 tomogram from 1800 projections)
47 |
48 | - Build-211204. A bugfix to detect empty output.log file.
49 | - Build-210621. Frame loss detection routines were updated to deal with multiple frame loss. A bugfix in sample center calculation in the zoomed reconstruction.
50 | - Build-201127. Updates for 'syncreadout' mode of the Hamamatsu camera and also for several other minor functional improvements.
51 | - Build-191001. A bugfix in the CUDA memory freeing routine.
52 | - Build-190729. Default memory usage in the Computing config dialog is now set to 40%. This minimizes memory paging and boosts the batch recon calculation.
53 |
54 | - Tau (Quadro P4000, 1792 cores, 1.48 GHz) = 0.161 nsec (1.22 sec for a 2048x2048 slice from 1800 projections)
55 |
56 | - Build-190713. A bugfix in multithreading. Some improved GUI functions were implemented. CUDA stream is enabled by default. The source code can now be compiled also by using Visual Studio 2008 and CUDA Toolkit 5.5.
57 | - Build-190530. A checkbox to enablie/disable CUDA stream pipelining was implemented in the Tomography-Computing config dialog.
58 | - Build-190118. CUDA routines were revised by using the 'stream' pipelining to parallelize the calculation. Performances are:
59 |
60 | - Tau (Quadro K5000, 1536 cores, 706 MHz) = 0.130 nsec (0.98 sec for a 2048x2048 slice from 1800 projections)
61 | - Tau (Core i5-4670 (x64), 4 threads, 3.4 GHz) = 0.38 nsec (2.9 sec for a 2048x2048 tomogram from 1800 projections)
62 |
63 | - Build-190111. On-the-fly reconstruction with which you can adjust the rotation axis in real time was implemented. If your PC has a sufficient computing power (over 1500 cores of GPU or 8 cores of AVX2-compatible CPU preferably Skylake or later), the axis position can be adjusted in real time using mouse wheel + shift key. Procedures for the data transfer between CPU and GPU were revised to accelerate the calculation.
64 | - Build-190102. We moved to Visual Studio 2017 and CUDA Toolkit 10.0 in this release. CUDA executable on the x86 platform became unavailable. ATI executable is not compiled at present. The x86/x64 reconstruction kernels were revised by using the AVX2 instruction set. CUDA routines were revised to be compatible with the new CUDA Toolkit.
65 | - Build-181222. Axis-scan images can be generated by specifying different center values with the same slice position. An alternative robust algorithm for least-square 3D fitting is now implemented. A bugfix in multithreading.
66 | - Build-180614. Bugfix of the pause/resume function in the queueing dialog.
67 | - Build-180505. Reslicing routine was revised to minimize memory usage and to allow users to specify the reslicing direction with a vector. Polygon lasso function was implemented for defining ROI of statistical analysis.
68 | - v5.4.1 (27 Jan 2018). Image analysis routines were updated. No revision were made in the offset CT kernel. Errors observed for some offset-CT data taken at SPring-8 were due to the 'conv.bat' files. Its workaround is described in the FAQ section below. Executable of this release is available only for x64 platforms because this is a very minor revision.
69 | - v5.4.0 (3 May 2017). Image analysis routines were updated. The offset CT routine is now under revision.
70 | - v5.3.0 (6 Jan 2017). Routines for our dial input device were implemented.
71 | - v5.2.0 (13 Nov 2016). Frame selection dialog was implemented. Routines for the sinogram generation were revised.
72 | - v5.1.1 (released 18 Sep 2016). Reconstruction kernels for x86/x64 processors were updated using assembly code. The kernels are accelerated with vectorized instructions. Performances are:
73 |
74 | - Tau (Quadro K4200, 1344 cores, 780 MHz) = 0.27 nsec (2.1 sec for a 2048x2048 tomogram from 1800 projections),
75 | - Tau (Core i5-4670 (x64), 4 threads, 3.4 GHz) = 0.34 nsec (2.6 sec for a 2048x2048 tomogram from 1800 projections),
76 | - Tau (Core i5-4670 (x86), 4 threads, 3.4 GHz) = 0.34 nsec (2.5 sec for a 2048x2048 tomogram from 1800 projections).
77 |
78 | - v5.1.0 (released 12 Sep 2016). OpenCL routines for ATI processors were updated. Performances are:
79 |
80 | - Tau (Quadro K5000, 1536 cores, 706 MHz) = 0.23 nsec (1.75 sec for a 2048x2048 tomogram from 1800 projections),
81 | - Tau (Quadro K4200, 1344 cores, 780 MHz) = 0.30 nsec (2.3 sec for a 2048x2048 tomogram from 1800 projections),
82 | - Tau (Radeon HD 5450, 80 cores, 650 MHz) = 8.47 nsec (61.0 sec for a 2000x2000 tomogram from 1800 projections),
83 | - Tau (Core i5-4670 (x64), 4 threads, 3.4 GHz) = 0.50 nsec (3.8 sec for a 2048x2048 tomogram from 1800 projections),
84 | - Tau (Core i5-4670 (x86), 4 threads, 3.4 GHz) = 0.91 nsec (6.9 sec for a 2048x2048 tomogram from 1800 projections),
85 | - Tau (Xeon E5-2609 (x64), 4 threads, 2.4 GHz) = 0.93 nsec (7.0 sec for a 2048x2048 tomogram from 1800 projections).
86 |
87 | Here, tau is the time constant required for one pixel projection. For example, one tomogram of 2000 x 2000 pixels from 1800 projection frames can be reconstructed in tau x 2000 x 2000 x 1800 sec.
88 | - v5.0.1 (released 5 Aug 2016). Reconstruction kernels were revised in order to improve sin/cos func precision in the reconstruction calculation. There would be no obvious difference in the appearance of reconstructed images, though pixel values are different from those of previous versions. The previous execulables are also still provided in the binary folder. Fourier domain plot for the resolution estimation can be generated from the "Analysis - Resolution plot" menu, without using the spread sheet software.
89 | - v4.9.0 (released 21 Jul 2016). APS-ANL data in HDF5 format are now supported. This page was moved here from our laboratory site.
90 | - v4.7.0 (released 13 Nov 2015). A dedicated routine for resolution estimation plot (J. Microsc. 261, 57-66, 2016) was implemented. CSV files now can be generated from 'Analysis==>Resolution plot' menu. ATI processors are not supported in this release.
91 | - v4.5.0 (released 6 Jan 2015). Update to support recent output.log format. Fourier transformations now can be generated from Tomography menu. A faster HIS-file reading routine was also implemented. A problem with the tilt angle direction of x64 reconstruction routine was fixed. User interfaces were updated.
92 | - v4.0.2 (released 22 Oct 2013). Back projection routines running on CUDA processors were updated to support the CUDA 5.5 computing environment. The CUDA version for x64 platforms was also included from this release. Queues from multiple RecView instances are now executed sequentially.
93 | - v3.0.0 (released 27 May 2010). Back projection routines running on Tesla, GeForce, Quadro processors were updated to support the CUDA 3.0 computing environment. The OpenCL 1.0 routines for ATI Radeon, FireStream or FirePro processors were also implemented. Performances are:
94 |
95 | - Tau (448 cores, 607 MHz) = 0.0813 nsec (23.4 sec for a 8000x8000 tomogram from 4500 projections) by using GeForce GTX470 with 1.28 GB of GDDR5 memory,
96 | - Tau (112 cores, 500 MHz) = 0.243 nsec (1.75 sec for a 2000x2000 tomogram from 1800 projections) by using Quadro FX 3700 with 512 MB of GDDR3 memory,
97 | - Tau (80 cores, 650 MHz) = 2.86 nsec (20.6 sec for a 2000x2000 tomogram from 1800 projections) by using Radeon HD 5450 with 512 MB of DDR2 memory,
98 | - Tau (4 threads, 3.16 GHz) = 0.825 nsec (5.94 sec for a 2000x2000 tomogram from 1800 projections) by using Xeon E5410 (x86),
99 | - Tau (4 threads, 3.16 GHz) = 0.808 nsec (5.82 sec for a 2000x2000 tomogram from 1800 projections) by using Xeon E5410 (x64).
100 |
101 | Here, tau is the time constant required for one pixel projection. For example, one tomogram of 2000 x 2000 pixels from 1800 projection frames can be reconstructed in tau x 2000 x 2000 x 1800 sec. Drift correction options were also provided in this revision.
102 | - v2.0.5 (released 9 Feb 2009). Back-projection routines running on Tesla, GeForce or Quadro processors supporting the CUDA programming environment were implemented. The x86 and x64 assembler routines were also revised. Performances are:
103 |
104 | - Tau (112 cores, 500 MHz) = 0.314 nsec (2.28 sec for a 2000x2000 tomogram from 1800 projections) using a Quadro FX 3700,
105 | - Tau (3.16 GHz) = 0.633 nsec (4.56 sec for a 2000x2000 tomogram from 1800 projections) using Core2Duo (x86, 2 threads), or tau = 1.336 nsec (x86, single thread),
106 | - Tau (3.16 GHz) = 0.802 nsec (5.77 sec for a 2000x2000 tomogram from 1800 projections) by using Xeon E5410 (x86, 4 threads), or tau = 1.724 nsec (x86, single thread),
107 | - Tau (3.16 GHz) = 0.768 nsec (5.53 sec for a 2000x2000 tomogram from 1800 projections) by using Xeon E5410 (x64, 4 threads), or tau = 1.651 nsec (x64, single thread).
108 |
109 | - v2.0.0 (released 21 Jan 2009). x64 platform is now supported. The x64 version can generate larger tomograms upto 106 x 106 pixels. Performance: tau(3.16 GHz) = 0.789 nsec using Xeon E5410 (x64, 4 threads). Performace of x86 version: tau(3.16 GHz) = 0.849 nsec using Core2Duo (x86, 2 threads), or tau = 1.395 nsec (x86, single thread).
110 | - v1.0.4 (released 1 Apr 2008). Multithreaded reconstruction routine was implemented. This function is partially written in x86 machine language, allowing faster execution of the reconstruction calculation.
111 | - v1.0.0 (released 6 Mar 2008).
112 |
113 |
114 | ## How to use
115 | Concise help can be found in the 'Help'-'About' menu. We believe that this program is self-explanatory, but the following tips would be helpul.
116 |
117 | Installation
118 | Download x64 or x86 executable from the Release pane of the repository homepage and place it any folder you like.
119 |
120 | Execution
121 | Double click the 'RecView' executable.
122 |
123 | Open data files
124 | From the menu bar, select 'File'-'Open' and choose an image file.
125 |
126 | Computing environment
127 | The GPU/CPU processors and memory usage can be specified in the 'Tomography'-'Computing config' dialog.
128 |
129 | Reconstruction
130 | Open 'Tomography'-'Reconstruction' dialog. Enter slice position in the 'From' or 'To' field. Tomographic sections can be generated with 'Show image' buttons. You can adjust the sample axis position using the 'Rotation center' field. 'Batch' invokes the reconstruction calculations through the 'From' to 'To' sections. Several options are also available, such as the 'Offset CT' checkbox to switch the reconstruction kernel to the offset-CT mode. Many other options including the zooming reconstruction can be found in the 'Options' dialog.
131 |
132 | Trimming or reformatting images
133 | The 'Tomography'-'Histogram/conversion' dialog provides several tools for trimming, converting to 8-bit TIFF, removing surrounding capillary pixels, and so on.
134 |
135 | ## Frequently asked questions
136 |
137 | - System requirements
138 | RecView can be executed on a Windows PC running Windows 10 or 11 with an x86 or x64 CPU and a local storage. Its reoncstruction kernel can run either on CPU or GPU. The CUDA kernel can be executed on NVIDIA GPU processors with 'compute capability' 3.0 or higher (this corresponds to Kepler processors or later). If you run RecView on a legacy CPU without using GPU, we recommend CPUs released after approx 2005 (i.e., Pentium4 / Athlon64 or later), because SSE2 SIMD instructions are used in the x86/x64 reconstruction kernel. This is not a requirement, but the performance may differ by a factor of 2-3 with or without the SIMD. The x86/x64 kernel also uses AVX2 or AVX-512 instructions if available.
139 | - Manuals
140 | Step-by-step manuals in English and Japanese are included in the Release. They are also separately provided in the docs folder.
141 | - What kind of data can be processed?
142 | RecView is designed for the reconstruction of tomographic data obtained at SPring-8 and APS. However, any kind of data can be processed. Please contact the author if you have problems in using this program with your own data. Dataset requirements are:
143 |
160 | - RecView returns an error when processing offset-CT data taken at SPring-8.
161 | In the offset CT, the sample is rotated by 360 degrees. Start and stop angles of the sample rotation vary depending on your setup, such as -180 to 180 deg or 0 to 360 deg. If the 'stop angle' was not exactly 360 deg in your offset-CT experiment, 'conv.bat' file seems to have incorrect contents. You have to edit it manually before the reconstruction calculation. Or you can find examples of conv.bat and output.log files in the 'docs' folder.
162 | - How to try test dataset in the Release.
163 |
164 | - Extract all files in the archived test dataset.
165 | - Open one of TIFF files (such as Q0005.tif) using RecView.
166 | - Open 'Tomography'-'Reconstruction...' dialog.
167 | - Enter '380' in the 'From'-'Layer' field.
168 | - Enter '311' in the 'From'-'Rotation center' field.
169 | - Click 'Show image' button. In seconds, a cross section of an aluminum wire with a square-wave pattern carved on its surface will be shown.
170 |
171 | - Does RecView make network connections?
172 | No, never. However, remote folders such as workgroup PCs are searched when you open files. It's probably one of default functions of Windows depending on your environment.
173 | - My samples showed drifts in reconsturcted images. How can I prepare biological samples best suited for the synchrotron radiation experiment?
174 | Please see the following:
175 | R. Saiga and R. Mizutani (2018). Preparation of soft tissue samples for synchrotron radiation microtomography and nanotomography. Protocol Exchange DOI: 10.1038/protex.2018.085.
176 | web DOI
177 | - How to prepare a development environment for RecView.
178 | You need Visual Studio 2017 and CUDA Toolkit 10.0 to compile the source code. The 'Desktop Environment with C++' package and 'Visual C++ MFC' component of VS2017 should be installed. You may also need to update GPU driver to the latest one to run the CUDA reconstruction kernel.
179 |
180 | - Install 'Visual Studio Comunity 2017' from the Microsoft site. Choose 'Desktop Development with C++' and include the 'Visual C++ MFC' component. We recommend to include language packs of English(US) and Japanese.
181 | - Download 'CUDA Toolkit 10.0' from the NVIDIA Toolkit site and istall. The installation will associate the toolkit with Visual Studio.
182 | - If your local PC has NVIDIA GPU, download the latest GPU driver from the NVIDIA driver site and install. It is not recommended to update the driver using Device Manager of Windows Control Panel.
183 | - Open Visual Studio solution file 'gazo.sln'. Choose your platform (x64 or Win32) and build configuration (Release or CUDA_Release) from the toolbar and generate executable from the 'Build' menu. You can find an .exe file under the 'x64' or 'Win32' folder. The recent CUDA Toolkit seems not compatible with the Win32 (x86) platform.
184 | - Another configuration 'CUDAFFT_Release' is also provided in the solution file. In this configuration, Fourier transform calculations in the deconvolution step can be executed on the GPU, though its elapsed time is comparable to that of the x86/x64 CPU. Dynamic link libraries ('cudart64_100.dll' and 'cufft64_100.dll') must be placed in the folder where the CUDAFFT executable is placed. The library files are available as part of the CUDA Toolkit.
185 |
186 |
187 |
188 | ## Contact
189 | Ryuta Mizutani, Dr., Prof.
190 | Department of Applied Biochemistry
191 | School of Engineering, Tokai University
192 | Kitakaname 4-1-1, Hiratsuka, Kanagawa 259-1292, Japan
193 | E-mail ryuta(at)tokai.ac.jp
194 | https://mizutanilab.github.io/
195 | Linkedin -
196 | YouTube
197 |
198 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-cayman
2 | plugins:
3 | - jekyll-sitemap
4 |
5 |
--------------------------------------------------------------------------------
/docs/RecViewManual230218en.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/docs/RecViewManual230218en.pdf
--------------------------------------------------------------------------------
/docs/RecViewManual230218ja.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/docs/RecViewManual230218ja.pdf
--------------------------------------------------------------------------------
/docs/conv450.bat:
--------------------------------------------------------------------------------
1 | his2img a.his
2 | img_ave a001.img a002.img a003.img a004.img a005.img a006.img a007.img a008.img a009.img a010.img a011.img a012.img a013.img a014.img a015.img a016.img a017.img a018.img a019.img a020.img a021.img a022.img a023.img a024.img a025.img a026.img a027.img a028.img a029.img a030.img dark.img
3 | img_ave a031.img a032.img a033.img a034.img a035.img a036.img a037.img a038.img a039.img a040.img a041.img a042.img a043.img a044.img a045.img a046.img a047.img a048.img a049.img a050.img a051.img a052.img a053.img a054.img a055.img a056.img a057.img a058.img a059.img a060.img q001.img
4 | ren a061.img q002.img
5 | ren a062.img q003.img
6 | ren a063.img q004.img
7 | ren a064.img q005.img
8 | ren a065.img q006.img
9 | ren a066.img q007.img
10 | ren a067.img q008.img
11 | ren a068.img q009.img
12 | ren a069.img q010.img
13 | ren a070.img q011.img
14 | ren a071.img q012.img
15 | ren a072.img q013.img
16 | ren a073.img q014.img
17 | ren a074.img q015.img
18 | ren a075.img q016.img
19 | ren a076.img q017.img
20 | ren a077.img q018.img
21 | ren a078.img q019.img
22 | ren a079.img q020.img
23 | ren a080.img q021.img
24 | ren a081.img q022.img
25 | ren a082.img q023.img
26 | ren a083.img q024.img
27 | ren a084.img q025.img
28 | ren a085.img q026.img
29 | ren a086.img q027.img
30 | ren a087.img q028.img
31 | ren a088.img q029.img
32 | ren a089.img q030.img
33 | ren a090.img q031.img
34 | ren a091.img q032.img
35 | ren a092.img q033.img
36 | ren a093.img q034.img
37 | ren a094.img q035.img
38 | ren a095.img q036.img
39 | ren a096.img q037.img
40 | ren a097.img q038.img
41 | ren a098.img q039.img
42 | ren a099.img q040.img
43 | ren a100.img q041.img
44 | ren a101.img q042.img
45 | ren a102.img q043.img
46 | ren a103.img q044.img
47 | ren a104.img q045.img
48 | ren a105.img q046.img
49 | ren a106.img q047.img
50 | ren a107.img q048.img
51 | ren a108.img q049.img
52 | ren a109.img q050.img
53 | ren a110.img q051.img
54 | ren a111.img q052.img
55 | ren a112.img q053.img
56 | ren a113.img q054.img
57 | ren a114.img q055.img
58 | ren a115.img q056.img
59 | ren a116.img q057.img
60 | ren a117.img q058.img
61 | ren a118.img q059.img
62 | ren a119.img q060.img
63 | ren a120.img q061.img
64 | ren a121.img q062.img
65 | ren a122.img q063.img
66 | ren a123.img q064.img
67 | ren a124.img q065.img
68 | ren a125.img q066.img
69 | ren a126.img q067.img
70 | ren a127.img q068.img
71 | ren a128.img q069.img
72 | ren a129.img q070.img
73 | ren a130.img q071.img
74 | ren a131.img q072.img
75 | ren a132.img q073.img
76 | ren a133.img q074.img
77 | ren a134.img q075.img
78 | ren a135.img q076.img
79 | ren a136.img q077.img
80 | ren a137.img q078.img
81 | ren a138.img q079.img
82 | ren a139.img q080.img
83 | ren a140.img q081.img
84 | ren a141.img q082.img
85 | ren a142.img q083.img
86 | ren a143.img q084.img
87 | ren a144.img q085.img
88 | ren a145.img q086.img
89 | ren a146.img q087.img
90 | ren a147.img q088.img
91 | ren a148.img q089.img
92 | ren a149.img q090.img
93 | ren a150.img q091.img
94 | ren a151.img q092.img
95 | ren a152.img q093.img
96 | ren a153.img q094.img
97 | ren a154.img q095.img
98 | ren a155.img q096.img
99 | ren a156.img q097.img
100 | ren a157.img q098.img
101 | ren a158.img q099.img
102 | ren a159.img q100.img
103 | ren a160.img q101.img
104 | ren a161.img q102.img
105 | ren a162.img q103.img
106 | ren a163.img q104.img
107 | ren a164.img q105.img
108 | ren a165.img q106.img
109 | ren a166.img q107.img
110 | ren a167.img q108.img
111 | ren a168.img q109.img
112 | ren a169.img q110.img
113 | ren a170.img q111.img
114 | ren a171.img q112.img
115 | ren a172.img q113.img
116 | ren a173.img q114.img
117 | ren a174.img q115.img
118 | ren a175.img q116.img
119 | ren a176.img q117.img
120 | ren a177.img q118.img
121 | ren a178.img q119.img
122 | ren a179.img q120.img
123 | ren a180.img q121.img
124 | ren a181.img q122.img
125 | ren a182.img q123.img
126 | ren a183.img q124.img
127 | ren a184.img q125.img
128 | ren a185.img q126.img
129 | ren a186.img q127.img
130 | ren a187.img q128.img
131 | ren a188.img q129.img
132 | ren a189.img q130.img
133 | ren a190.img q131.img
134 | ren a191.img q132.img
135 | ren a192.img q133.img
136 | ren a193.img q134.img
137 | ren a194.img q135.img
138 | ren a195.img q136.img
139 | ren a196.img q137.img
140 | ren a197.img q138.img
141 | ren a198.img q139.img
142 | ren a199.img q140.img
143 | ren a200.img q141.img
144 | ren a201.img q142.img
145 | ren a202.img q143.img
146 | ren a203.img q144.img
147 | ren a204.img q145.img
148 | ren a205.img q146.img
149 | ren a206.img q147.img
150 | ren a207.img q148.img
151 | ren a208.img q149.img
152 | ren a209.img q150.img
153 | ren a210.img q151.img
154 | ren a211.img q152.img
155 | ren a212.img q153.img
156 | ren a213.img q154.img
157 | ren a214.img q155.img
158 | ren a215.img q156.img
159 | ren a216.img q157.img
160 | ren a217.img q158.img
161 | ren a218.img q159.img
162 | ren a219.img q160.img
163 | ren a220.img q161.img
164 | ren a221.img q162.img
165 | ren a222.img q163.img
166 | ren a223.img q164.img
167 | ren a224.img q165.img
168 | ren a225.img q166.img
169 | ren a226.img q167.img
170 | ren a227.img q168.img
171 | ren a228.img q169.img
172 | ren a229.img q170.img
173 | ren a230.img q171.img
174 | ren a231.img q172.img
175 | ren a232.img q173.img
176 | ren a233.img q174.img
177 | ren a234.img q175.img
178 | ren a235.img q176.img
179 | ren a236.img q177.img
180 | ren a237.img q178.img
181 | ren a238.img q179.img
182 | ren a239.img q180.img
183 | ren a240.img q181.img
184 | ren a241.img q182.img
185 | ren a242.img q183.img
186 | ren a243.img q184.img
187 | ren a244.img q185.img
188 | ren a245.img q186.img
189 | ren a246.img q187.img
190 | ren a247.img q188.img
191 | ren a248.img q189.img
192 | ren a249.img q190.img
193 | ren a250.img q191.img
194 | ren a251.img q192.img
195 | ren a252.img q193.img
196 | ren a253.img q194.img
197 | ren a254.img q195.img
198 | ren a255.img q196.img
199 | ren a256.img q197.img
200 | ren a257.img q198.img
201 | ren a258.img q199.img
202 | ren a259.img q200.img
203 | ren a260.img q201.img
204 | ren a261.img q202.img
205 | ren a262.img q203.img
206 | ren a263.img q204.img
207 | ren a264.img q205.img
208 | ren a265.img q206.img
209 | ren a266.img q207.img
210 | ren a267.img q208.img
211 | ren a268.img q209.img
212 | ren a269.img q210.img
213 | ren a270.img q211.img
214 | ren a271.img q212.img
215 | ren a272.img q213.img
216 | ren a273.img q214.img
217 | ren a274.img q215.img
218 | ren a275.img q216.img
219 | ren a276.img q217.img
220 | ren a277.img q218.img
221 | ren a278.img q219.img
222 | ren a279.img q220.img
223 | ren a280.img q221.img
224 | ren a281.img q222.img
225 | ren a282.img q223.img
226 | ren a283.img q224.img
227 | ren a284.img q225.img
228 | ren a285.img q226.img
229 | ren a286.img q227.img
230 | ren a287.img q228.img
231 | ren a288.img q229.img
232 | ren a289.img q230.img
233 | ren a290.img q231.img
234 | ren a291.img q232.img
235 | ren a292.img q233.img
236 | ren a293.img q234.img
237 | ren a294.img q235.img
238 | ren a295.img q236.img
239 | ren a296.img q237.img
240 | ren a297.img q238.img
241 | ren a298.img q239.img
242 | ren a299.img q240.img
243 | ren a300.img q241.img
244 | ren a301.img q242.img
245 | ren a302.img q243.img
246 | ren a303.img q244.img
247 | ren a304.img q245.img
248 | ren a305.img q246.img
249 | ren a306.img q247.img
250 | ren a307.img q248.img
251 | ren a308.img q249.img
252 | ren a309.img q250.img
253 | ren a310.img q251.img
254 | ren a311.img q252.img
255 | ren a312.img q253.img
256 | ren a313.img q254.img
257 | ren a314.img q255.img
258 | ren a315.img q256.img
259 | ren a316.img q257.img
260 | ren a317.img q258.img
261 | ren a318.img q259.img
262 | ren a319.img q260.img
263 | ren a320.img q261.img
264 | ren a321.img q262.img
265 | ren a322.img q263.img
266 | ren a323.img q264.img
267 | ren a324.img q265.img
268 | ren a325.img q266.img
269 | ren a326.img q267.img
270 | ren a327.img q268.img
271 | ren a328.img q269.img
272 | ren a329.img q270.img
273 | ren a330.img q271.img
274 | ren a331.img q272.img
275 | ren a332.img q273.img
276 | ren a333.img q274.img
277 | ren a334.img q275.img
278 | ren a335.img q276.img
279 | ren a336.img q277.img
280 | ren a337.img q278.img
281 | ren a338.img q279.img
282 | ren a339.img q280.img
283 | ren a340.img q281.img
284 | ren a341.img q282.img
285 | ren a342.img q283.img
286 | ren a343.img q284.img
287 | ren a344.img q285.img
288 | ren a345.img q286.img
289 | ren a346.img q287.img
290 | ren a347.img q288.img
291 | ren a348.img q289.img
292 | ren a349.img q290.img
293 | ren a350.img q291.img
294 | ren a351.img q292.img
295 | ren a352.img q293.img
296 | ren a353.img q294.img
297 | ren a354.img q295.img
298 | ren a355.img q296.img
299 | ren a356.img q297.img
300 | ren a357.img q298.img
301 | ren a358.img q299.img
302 | ren a359.img q300.img
303 | ren a360.img q301.img
304 | ren a361.img q302.img
305 | ren a362.img q303.img
306 | ren a363.img q304.img
307 | ren a364.img q305.img
308 | ren a365.img q306.img
309 | ren a366.img q307.img
310 | ren a367.img q308.img
311 | ren a368.img q309.img
312 | ren a369.img q310.img
313 | ren a370.img q311.img
314 | ren a371.img q312.img
315 | ren a372.img q313.img
316 | ren a373.img q314.img
317 | ren a374.img q315.img
318 | ren a375.img q316.img
319 | ren a376.img q317.img
320 | ren a377.img q318.img
321 | ren a378.img q319.img
322 | ren a379.img q320.img
323 | ren a380.img q321.img
324 | ren a381.img q322.img
325 | ren a382.img q323.img
326 | ren a383.img q324.img
327 | ren a384.img q325.img
328 | ren a385.img q326.img
329 | ren a386.img q327.img
330 | ren a387.img q328.img
331 | ren a388.img q329.img
332 | ren a389.img q330.img
333 | ren a390.img q331.img
334 | ren a391.img q332.img
335 | ren a392.img q333.img
336 | ren a393.img q334.img
337 | ren a394.img q335.img
338 | ren a395.img q336.img
339 | ren a396.img q337.img
340 | ren a397.img q338.img
341 | ren a398.img q339.img
342 | ren a399.img q340.img
343 | ren a400.img q341.img
344 | ren a401.img q342.img
345 | ren a402.img q343.img
346 | ren a403.img q344.img
347 | ren a404.img q345.img
348 | ren a405.img q346.img
349 | ren a406.img q347.img
350 | ren a407.img q348.img
351 | ren a408.img q349.img
352 | ren a409.img q350.img
353 | ren a410.img q351.img
354 | ren a411.img q352.img
355 | ren a412.img q353.img
356 | ren a413.img q354.img
357 | ren a414.img q355.img
358 | ren a415.img q356.img
359 | ren a416.img q357.img
360 | ren a417.img q358.img
361 | ren a418.img q359.img
362 | ren a419.img q360.img
363 | ren a420.img q361.img
364 | ren a421.img q362.img
365 | ren a422.img q363.img
366 | ren a423.img q364.img
367 | ren a424.img q365.img
368 | ren a425.img q366.img
369 | ren a426.img q367.img
370 | ren a427.img q368.img
371 | ren a428.img q369.img
372 | ren a429.img q370.img
373 | ren a430.img q371.img
374 | ren a431.img q372.img
375 | ren a432.img q373.img
376 | ren a433.img q374.img
377 | ren a434.img q375.img
378 | ren a435.img q376.img
379 | ren a436.img q377.img
380 | ren a437.img q378.img
381 | ren a438.img q379.img
382 | ren a439.img q380.img
383 | ren a440.img q381.img
384 | ren a441.img q382.img
385 | ren a442.img q383.img
386 | ren a443.img q384.img
387 | ren a444.img q385.img
388 | ren a445.img q386.img
389 | ren a446.img q387.img
390 | ren a447.img q388.img
391 | ren a448.img q389.img
392 | ren a449.img q390.img
393 | ren a450.img q391.img
394 | ren a451.img q392.img
395 | ren a452.img q393.img
396 | ren a453.img q394.img
397 | ren a454.img q395.img
398 | ren a455.img q396.img
399 | ren a456.img q397.img
400 | ren a457.img q398.img
401 | ren a458.img q399.img
402 | ren a459.img q400.img
403 | ren a460.img q401.img
404 | ren a461.img q402.img
405 | ren a462.img q403.img
406 | ren a463.img q404.img
407 | ren a464.img q405.img
408 | ren a465.img q406.img
409 | ren a466.img q407.img
410 | ren a467.img q408.img
411 | ren a468.img q409.img
412 | ren a469.img q410.img
413 | ren a470.img q411.img
414 | ren a471.img q412.img
415 | ren a472.img q413.img
416 | ren a473.img q414.img
417 | ren a474.img q415.img
418 | ren a475.img q416.img
419 | ren a476.img q417.img
420 | ren a477.img q418.img
421 | ren a478.img q419.img
422 | ren a479.img q420.img
423 | ren a480.img q421.img
424 | ren a481.img q422.img
425 | ren a482.img q423.img
426 | ren a483.img q424.img
427 | ren a484.img q425.img
428 | ren a485.img q426.img
429 | ren a486.img q427.img
430 | ren a487.img q428.img
431 | ren a488.img q429.img
432 | ren a489.img q430.img
433 | ren a490.img q431.img
434 | ren a491.img q432.img
435 | ren a492.img q433.img
436 | ren a493.img q434.img
437 | ren a494.img q435.img
438 | ren a495.img q436.img
439 | ren a496.img q437.img
440 | ren a497.img q438.img
441 | ren a498.img q439.img
442 | ren a499.img q440.img
443 | ren a500.img q441.img
444 | ren a501.img q442.img
445 | ren a502.img q443.img
446 | ren a503.img q444.img
447 | ren a504.img q445.img
448 | ren a505.img q446.img
449 | ren a506.img q447.img
450 | ren a507.img q448.img
451 | ren a508.img q449.img
452 | ren a509.img q450.img
453 | ren a510.img q451.img
454 | img_ave a541.img a540.img a539.img a538.img a537.img a536.img a535.img a534.img a533.img a532.img a531.img a530.img a529.img a528.img a527.img a526.img a525.img a524.img a523.img a522.img a521.img a520.img a519.img a518.img a517.img a516.img a515.img a514.img a513.img a512.img q452.img
455 | copy q452.img q453.img
456 | copy a511.img q454.img
457 |
--------------------------------------------------------------------------------
/docs/conv900.bat:
--------------------------------------------------------------------------------
1 | his2img a.his
2 | img_ave a001.img a002.img a003.img a004.img a005.img a006.img a007.img a008.img a009.img a010.img a011.img a012.img a013.img a014.img a015.img a016.img a017.img a018.img a019.img a020.img a021.img a022.img a023.img a024.img a025.img a026.img a027.img a028.img a029.img a030.img dark.img
3 | img_ave a031.img a032.img a033.img a034.img a035.img a036.img a037.img a038.img a039.img a040.img a041.img a042.img a043.img a044.img a045.img a046.img a047.img a048.img a049.img a050.img a051.img a052.img a053.img a054.img a055.img a056.img a057.img a058.img a059.img a060.img q001.img
4 | ren a061.img q002.img
5 | ren a062.img q003.img
6 | ren a063.img q004.img
7 | ren a064.img q005.img
8 | ren a065.img q006.img
9 | ren a066.img q007.img
10 | ren a067.img q008.img
11 | ren a068.img q009.img
12 | ren a069.img q010.img
13 | ren a070.img q011.img
14 | ren a071.img q012.img
15 | ren a072.img q013.img
16 | ren a073.img q014.img
17 | ren a074.img q015.img
18 | ren a075.img q016.img
19 | ren a076.img q017.img
20 | ren a077.img q018.img
21 | ren a078.img q019.img
22 | ren a079.img q020.img
23 | ren a080.img q021.img
24 | ren a081.img q022.img
25 | ren a082.img q023.img
26 | ren a083.img q024.img
27 | ren a084.img q025.img
28 | ren a085.img q026.img
29 | ren a086.img q027.img
30 | ren a087.img q028.img
31 | ren a088.img q029.img
32 | ren a089.img q030.img
33 | ren a090.img q031.img
34 | ren a091.img q032.img
35 | ren a092.img q033.img
36 | ren a093.img q034.img
37 | ren a094.img q035.img
38 | ren a095.img q036.img
39 | ren a096.img q037.img
40 | ren a097.img q038.img
41 | ren a098.img q039.img
42 | ren a099.img q040.img
43 | ren a100.img q041.img
44 | ren a101.img q042.img
45 | ren a102.img q043.img
46 | ren a103.img q044.img
47 | ren a104.img q045.img
48 | ren a105.img q046.img
49 | ren a106.img q047.img
50 | ren a107.img q048.img
51 | ren a108.img q049.img
52 | ren a109.img q050.img
53 | ren a110.img q051.img
54 | ren a111.img q052.img
55 | ren a112.img q053.img
56 | ren a113.img q054.img
57 | ren a114.img q055.img
58 | ren a115.img q056.img
59 | ren a116.img q057.img
60 | ren a117.img q058.img
61 | ren a118.img q059.img
62 | ren a119.img q060.img
63 | ren a120.img q061.img
64 | ren a121.img q062.img
65 | ren a122.img q063.img
66 | ren a123.img q064.img
67 | ren a124.img q065.img
68 | ren a125.img q066.img
69 | ren a126.img q067.img
70 | ren a127.img q068.img
71 | ren a128.img q069.img
72 | ren a129.img q070.img
73 | ren a130.img q071.img
74 | ren a131.img q072.img
75 | ren a132.img q073.img
76 | ren a133.img q074.img
77 | ren a134.img q075.img
78 | ren a135.img q076.img
79 | ren a136.img q077.img
80 | ren a137.img q078.img
81 | ren a138.img q079.img
82 | ren a139.img q080.img
83 | ren a140.img q081.img
84 | ren a141.img q082.img
85 | ren a142.img q083.img
86 | ren a143.img q084.img
87 | ren a144.img q085.img
88 | ren a145.img q086.img
89 | ren a146.img q087.img
90 | ren a147.img q088.img
91 | ren a148.img q089.img
92 | ren a149.img q090.img
93 | ren a150.img q091.img
94 | ren a151.img q092.img
95 | ren a152.img q093.img
96 | ren a153.img q094.img
97 | ren a154.img q095.img
98 | ren a155.img q096.img
99 | ren a156.img q097.img
100 | ren a157.img q098.img
101 | ren a158.img q099.img
102 | ren a159.img q100.img
103 | ren a160.img q101.img
104 | ren a161.img q102.img
105 | ren a162.img q103.img
106 | ren a163.img q104.img
107 | ren a164.img q105.img
108 | ren a165.img q106.img
109 | ren a166.img q107.img
110 | ren a167.img q108.img
111 | ren a168.img q109.img
112 | ren a169.img q110.img
113 | ren a170.img q111.img
114 | ren a171.img q112.img
115 | ren a172.img q113.img
116 | ren a173.img q114.img
117 | ren a174.img q115.img
118 | ren a175.img q116.img
119 | ren a176.img q117.img
120 | ren a177.img q118.img
121 | ren a178.img q119.img
122 | ren a179.img q120.img
123 | ren a180.img q121.img
124 | ren a181.img q122.img
125 | ren a182.img q123.img
126 | ren a183.img q124.img
127 | ren a184.img q125.img
128 | ren a185.img q126.img
129 | ren a186.img q127.img
130 | ren a187.img q128.img
131 | ren a188.img q129.img
132 | ren a189.img q130.img
133 | ren a190.img q131.img
134 | ren a191.img q132.img
135 | ren a192.img q133.img
136 | ren a193.img q134.img
137 | ren a194.img q135.img
138 | ren a195.img q136.img
139 | ren a196.img q137.img
140 | ren a197.img q138.img
141 | ren a198.img q139.img
142 | ren a199.img q140.img
143 | ren a200.img q141.img
144 | ren a201.img q142.img
145 | ren a202.img q143.img
146 | ren a203.img q144.img
147 | ren a204.img q145.img
148 | ren a205.img q146.img
149 | ren a206.img q147.img
150 | ren a207.img q148.img
151 | ren a208.img q149.img
152 | ren a209.img q150.img
153 | ren a210.img q151.img
154 | ren a211.img q152.img
155 | ren a212.img q153.img
156 | ren a213.img q154.img
157 | ren a214.img q155.img
158 | ren a215.img q156.img
159 | ren a216.img q157.img
160 | ren a217.img q158.img
161 | ren a218.img q159.img
162 | ren a219.img q160.img
163 | ren a220.img q161.img
164 | ren a221.img q162.img
165 | ren a222.img q163.img
166 | ren a223.img q164.img
167 | ren a224.img q165.img
168 | ren a225.img q166.img
169 | ren a226.img q167.img
170 | ren a227.img q168.img
171 | ren a228.img q169.img
172 | ren a229.img q170.img
173 | ren a230.img q171.img
174 | ren a231.img q172.img
175 | ren a232.img q173.img
176 | ren a233.img q174.img
177 | ren a234.img q175.img
178 | ren a235.img q176.img
179 | ren a236.img q177.img
180 | ren a237.img q178.img
181 | ren a238.img q179.img
182 | ren a239.img q180.img
183 | ren a240.img q181.img
184 | ren a241.img q182.img
185 | ren a242.img q183.img
186 | ren a243.img q184.img
187 | ren a244.img q185.img
188 | ren a245.img q186.img
189 | ren a246.img q187.img
190 | ren a247.img q188.img
191 | ren a248.img q189.img
192 | ren a249.img q190.img
193 | ren a250.img q191.img
194 | ren a251.img q192.img
195 | ren a252.img q193.img
196 | ren a253.img q194.img
197 | ren a254.img q195.img
198 | ren a255.img q196.img
199 | ren a256.img q197.img
200 | ren a257.img q198.img
201 | ren a258.img q199.img
202 | ren a259.img q200.img
203 | ren a260.img q201.img
204 | ren a261.img q202.img
205 | ren a262.img q203.img
206 | ren a263.img q204.img
207 | ren a264.img q205.img
208 | ren a265.img q206.img
209 | ren a266.img q207.img
210 | ren a267.img q208.img
211 | ren a268.img q209.img
212 | ren a269.img q210.img
213 | ren a270.img q211.img
214 | ren a271.img q212.img
215 | ren a272.img q213.img
216 | ren a273.img q214.img
217 | ren a274.img q215.img
218 | ren a275.img q216.img
219 | ren a276.img q217.img
220 | ren a277.img q218.img
221 | ren a278.img q219.img
222 | ren a279.img q220.img
223 | ren a280.img q221.img
224 | ren a281.img q222.img
225 | ren a282.img q223.img
226 | ren a283.img q224.img
227 | ren a284.img q225.img
228 | ren a285.img q226.img
229 | ren a286.img q227.img
230 | ren a287.img q228.img
231 | ren a288.img q229.img
232 | ren a289.img q230.img
233 | ren a290.img q231.img
234 | ren a291.img q232.img
235 | ren a292.img q233.img
236 | ren a293.img q234.img
237 | ren a294.img q235.img
238 | ren a295.img q236.img
239 | ren a296.img q237.img
240 | ren a297.img q238.img
241 | ren a298.img q239.img
242 | ren a299.img q240.img
243 | ren a300.img q241.img
244 | ren a301.img q242.img
245 | ren a302.img q243.img
246 | ren a303.img q244.img
247 | ren a304.img q245.img
248 | ren a305.img q246.img
249 | ren a306.img q247.img
250 | ren a307.img q248.img
251 | ren a308.img q249.img
252 | ren a309.img q250.img
253 | ren a310.img q251.img
254 | ren a311.img q252.img
255 | ren a312.img q253.img
256 | ren a313.img q254.img
257 | ren a314.img q255.img
258 | ren a315.img q256.img
259 | ren a316.img q257.img
260 | ren a317.img q258.img
261 | ren a318.img q259.img
262 | ren a319.img q260.img
263 | ren a320.img q261.img
264 | ren a321.img q262.img
265 | ren a322.img q263.img
266 | ren a323.img q264.img
267 | ren a324.img q265.img
268 | ren a325.img q266.img
269 | ren a326.img q267.img
270 | ren a327.img q268.img
271 | ren a328.img q269.img
272 | ren a329.img q270.img
273 | ren a330.img q271.img
274 | ren a331.img q272.img
275 | ren a332.img q273.img
276 | ren a333.img q274.img
277 | ren a334.img q275.img
278 | ren a335.img q276.img
279 | ren a336.img q277.img
280 | ren a337.img q278.img
281 | ren a338.img q279.img
282 | ren a339.img q280.img
283 | ren a340.img q281.img
284 | ren a341.img q282.img
285 | ren a342.img q283.img
286 | ren a343.img q284.img
287 | ren a344.img q285.img
288 | ren a345.img q286.img
289 | ren a346.img q287.img
290 | ren a347.img q288.img
291 | ren a348.img q289.img
292 | ren a349.img q290.img
293 | ren a350.img q291.img
294 | ren a351.img q292.img
295 | ren a352.img q293.img
296 | ren a353.img q294.img
297 | ren a354.img q295.img
298 | ren a355.img q296.img
299 | ren a356.img q297.img
300 | ren a357.img q298.img
301 | ren a358.img q299.img
302 | ren a359.img q300.img
303 | ren a360.img q301.img
304 | ren a361.img q302.img
305 | ren a362.img q303.img
306 | ren a363.img q304.img
307 | ren a364.img q305.img
308 | ren a365.img q306.img
309 | ren a366.img q307.img
310 | ren a367.img q308.img
311 | ren a368.img q309.img
312 | ren a369.img q310.img
313 | ren a370.img q311.img
314 | ren a371.img q312.img
315 | ren a372.img q313.img
316 | ren a373.img q314.img
317 | ren a374.img q315.img
318 | ren a375.img q316.img
319 | ren a376.img q317.img
320 | ren a377.img q318.img
321 | ren a378.img q319.img
322 | ren a379.img q320.img
323 | ren a380.img q321.img
324 | ren a381.img q322.img
325 | ren a382.img q323.img
326 | ren a383.img q324.img
327 | ren a384.img q325.img
328 | ren a385.img q326.img
329 | ren a386.img q327.img
330 | ren a387.img q328.img
331 | ren a388.img q329.img
332 | ren a389.img q330.img
333 | ren a390.img q331.img
334 | ren a391.img q332.img
335 | ren a392.img q333.img
336 | ren a393.img q334.img
337 | ren a394.img q335.img
338 | ren a395.img q336.img
339 | ren a396.img q337.img
340 | ren a397.img q338.img
341 | ren a398.img q339.img
342 | ren a399.img q340.img
343 | ren a400.img q341.img
344 | ren a401.img q342.img
345 | ren a402.img q343.img
346 | ren a403.img q344.img
347 | ren a404.img q345.img
348 | ren a405.img q346.img
349 | ren a406.img q347.img
350 | ren a407.img q348.img
351 | ren a408.img q349.img
352 | ren a409.img q350.img
353 | ren a410.img q351.img
354 | ren a411.img q352.img
355 | ren a412.img q353.img
356 | ren a413.img q354.img
357 | ren a414.img q355.img
358 | ren a415.img q356.img
359 | ren a416.img q357.img
360 | ren a417.img q358.img
361 | ren a418.img q359.img
362 | ren a419.img q360.img
363 | ren a420.img q361.img
364 | ren a421.img q362.img
365 | ren a422.img q363.img
366 | ren a423.img q364.img
367 | ren a424.img q365.img
368 | ren a425.img q366.img
369 | ren a426.img q367.img
370 | ren a427.img q368.img
371 | ren a428.img q369.img
372 | ren a429.img q370.img
373 | ren a430.img q371.img
374 | ren a431.img q372.img
375 | ren a432.img q373.img
376 | ren a433.img q374.img
377 | ren a434.img q375.img
378 | ren a435.img q376.img
379 | ren a436.img q377.img
380 | ren a437.img q378.img
381 | ren a438.img q379.img
382 | ren a439.img q380.img
383 | ren a440.img q381.img
384 | ren a441.img q382.img
385 | ren a442.img q383.img
386 | ren a443.img q384.img
387 | ren a444.img q385.img
388 | ren a445.img q386.img
389 | ren a446.img q387.img
390 | ren a447.img q388.img
391 | ren a448.img q389.img
392 | ren a449.img q390.img
393 | ren a450.img q391.img
394 | ren a451.img q392.img
395 | ren a452.img q393.img
396 | ren a453.img q394.img
397 | ren a454.img q395.img
398 | ren a455.img q396.img
399 | ren a456.img q397.img
400 | ren a457.img q398.img
401 | ren a458.img q399.img
402 | ren a459.img q400.img
403 | ren a460.img q401.img
404 | ren a461.img q402.img
405 | ren a462.img q403.img
406 | ren a463.img q404.img
407 | ren a464.img q405.img
408 | ren a465.img q406.img
409 | ren a466.img q407.img
410 | ren a467.img q408.img
411 | ren a468.img q409.img
412 | ren a469.img q410.img
413 | ren a470.img q411.img
414 | ren a471.img q412.img
415 | ren a472.img q413.img
416 | ren a473.img q414.img
417 | ren a474.img q415.img
418 | ren a475.img q416.img
419 | ren a476.img q417.img
420 | ren a477.img q418.img
421 | ren a478.img q419.img
422 | ren a479.img q420.img
423 | ren a480.img q421.img
424 | ren a481.img q422.img
425 | ren a482.img q423.img
426 | ren a483.img q424.img
427 | ren a484.img q425.img
428 | ren a485.img q426.img
429 | ren a486.img q427.img
430 | ren a487.img q428.img
431 | ren a488.img q429.img
432 | ren a489.img q430.img
433 | ren a490.img q431.img
434 | ren a491.img q432.img
435 | ren a492.img q433.img
436 | ren a493.img q434.img
437 | ren a494.img q435.img
438 | ren a495.img q436.img
439 | ren a496.img q437.img
440 | ren a497.img q438.img
441 | ren a498.img q439.img
442 | ren a499.img q440.img
443 | ren a500.img q441.img
444 | ren a501.img q442.img
445 | ren a502.img q443.img
446 | ren a503.img q444.img
447 | ren a504.img q445.img
448 | ren a505.img q446.img
449 | ren a506.img q447.img
450 | ren a507.img q448.img
451 | ren a508.img q449.img
452 | ren a509.img q450.img
453 | ren a510.img q451.img
454 | ren a511.img q452.img
455 | ren a512.img q453.img
456 | ren a513.img q454.img
457 | ren a514.img q455.img
458 | ren a515.img q456.img
459 | ren a516.img q457.img
460 | ren a517.img q458.img
461 | ren a518.img q459.img
462 | ren a519.img q460.img
463 | ren a520.img q461.img
464 | ren a521.img q462.img
465 | ren a522.img q463.img
466 | ren a523.img q464.img
467 | ren a524.img q465.img
468 | ren a525.img q466.img
469 | ren a526.img q467.img
470 | ren a527.img q468.img
471 | ren a528.img q469.img
472 | ren a529.img q470.img
473 | ren a530.img q471.img
474 | ren a531.img q472.img
475 | ren a532.img q473.img
476 | ren a533.img q474.img
477 | ren a534.img q475.img
478 | ren a535.img q476.img
479 | ren a536.img q477.img
480 | ren a537.img q478.img
481 | ren a538.img q479.img
482 | ren a539.img q480.img
483 | ren a540.img q481.img
484 | ren a541.img q482.img
485 | ren a542.img q483.img
486 | ren a543.img q484.img
487 | ren a544.img q485.img
488 | ren a545.img q486.img
489 | ren a546.img q487.img
490 | ren a547.img q488.img
491 | ren a548.img q489.img
492 | ren a549.img q490.img
493 | ren a550.img q491.img
494 | ren a551.img q492.img
495 | ren a552.img q493.img
496 | ren a553.img q494.img
497 | ren a554.img q495.img
498 | ren a555.img q496.img
499 | ren a556.img q497.img
500 | ren a557.img q498.img
501 | ren a558.img q499.img
502 | ren a559.img q500.img
503 | ren a560.img q501.img
504 | ren a561.img q502.img
505 | ren a562.img q503.img
506 | ren a563.img q504.img
507 | ren a564.img q505.img
508 | ren a565.img q506.img
509 | ren a566.img q507.img
510 | ren a567.img q508.img
511 | ren a568.img q509.img
512 | ren a569.img q510.img
513 | ren a570.img q511.img
514 | ren a571.img q512.img
515 | ren a572.img q513.img
516 | ren a573.img q514.img
517 | ren a574.img q515.img
518 | ren a575.img q516.img
519 | ren a576.img q517.img
520 | ren a577.img q518.img
521 | ren a578.img q519.img
522 | ren a579.img q520.img
523 | ren a580.img q521.img
524 | ren a581.img q522.img
525 | ren a582.img q523.img
526 | ren a583.img q524.img
527 | ren a584.img q525.img
528 | ren a585.img q526.img
529 | ren a586.img q527.img
530 | ren a587.img q528.img
531 | ren a588.img q529.img
532 | ren a589.img q530.img
533 | ren a590.img q531.img
534 | ren a591.img q532.img
535 | ren a592.img q533.img
536 | ren a593.img q534.img
537 | ren a594.img q535.img
538 | ren a595.img q536.img
539 | ren a596.img q537.img
540 | ren a597.img q538.img
541 | ren a598.img q539.img
542 | ren a599.img q540.img
543 | ren a600.img q541.img
544 | ren a601.img q542.img
545 | ren a602.img q543.img
546 | ren a603.img q544.img
547 | ren a604.img q545.img
548 | ren a605.img q546.img
549 | ren a606.img q547.img
550 | ren a607.img q548.img
551 | ren a608.img q549.img
552 | ren a609.img q550.img
553 | ren a610.img q551.img
554 | ren a611.img q552.img
555 | ren a612.img q553.img
556 | ren a613.img q554.img
557 | ren a614.img q555.img
558 | ren a615.img q556.img
559 | ren a616.img q557.img
560 | ren a617.img q558.img
561 | ren a618.img q559.img
562 | ren a619.img q560.img
563 | ren a620.img q561.img
564 | ren a621.img q562.img
565 | ren a622.img q563.img
566 | ren a623.img q564.img
567 | ren a624.img q565.img
568 | ren a625.img q566.img
569 | ren a626.img q567.img
570 | ren a627.img q568.img
571 | ren a628.img q569.img
572 | ren a629.img q570.img
573 | ren a630.img q571.img
574 | ren a631.img q572.img
575 | ren a632.img q573.img
576 | ren a633.img q574.img
577 | ren a634.img q575.img
578 | ren a635.img q576.img
579 | ren a636.img q577.img
580 | ren a637.img q578.img
581 | ren a638.img q579.img
582 | ren a639.img q580.img
583 | ren a640.img q581.img
584 | ren a641.img q582.img
585 | ren a642.img q583.img
586 | ren a643.img q584.img
587 | ren a644.img q585.img
588 | ren a645.img q586.img
589 | ren a646.img q587.img
590 | ren a647.img q588.img
591 | ren a648.img q589.img
592 | ren a649.img q590.img
593 | ren a650.img q591.img
594 | ren a651.img q592.img
595 | ren a652.img q593.img
596 | ren a653.img q594.img
597 | ren a654.img q595.img
598 | ren a655.img q596.img
599 | ren a656.img q597.img
600 | ren a657.img q598.img
601 | ren a658.img q599.img
602 | ren a659.img q600.img
603 | ren a660.img q601.img
604 | ren a661.img q602.img
605 | ren a662.img q603.img
606 | ren a663.img q604.img
607 | ren a664.img q605.img
608 | ren a665.img q606.img
609 | ren a666.img q607.img
610 | ren a667.img q608.img
611 | ren a668.img q609.img
612 | ren a669.img q610.img
613 | ren a670.img q611.img
614 | ren a671.img q612.img
615 | ren a672.img q613.img
616 | ren a673.img q614.img
617 | ren a674.img q615.img
618 | ren a675.img q616.img
619 | ren a676.img q617.img
620 | ren a677.img q618.img
621 | ren a678.img q619.img
622 | ren a679.img q620.img
623 | ren a680.img q621.img
624 | ren a681.img q622.img
625 | ren a682.img q623.img
626 | ren a683.img q624.img
627 | ren a684.img q625.img
628 | ren a685.img q626.img
629 | ren a686.img q627.img
630 | ren a687.img q628.img
631 | ren a688.img q629.img
632 | ren a689.img q630.img
633 | ren a690.img q631.img
634 | ren a691.img q632.img
635 | ren a692.img q633.img
636 | ren a693.img q634.img
637 | ren a694.img q635.img
638 | ren a695.img q636.img
639 | ren a696.img q637.img
640 | ren a697.img q638.img
641 | ren a698.img q639.img
642 | ren a699.img q640.img
643 | ren a700.img q641.img
644 | ren a701.img q642.img
645 | ren a702.img q643.img
646 | ren a703.img q644.img
647 | ren a704.img q645.img
648 | ren a705.img q646.img
649 | ren a706.img q647.img
650 | ren a707.img q648.img
651 | ren a708.img q649.img
652 | ren a709.img q650.img
653 | ren a710.img q651.img
654 | ren a711.img q652.img
655 | ren a712.img q653.img
656 | ren a713.img q654.img
657 | ren a714.img q655.img
658 | ren a715.img q656.img
659 | ren a716.img q657.img
660 | ren a717.img q658.img
661 | ren a718.img q659.img
662 | ren a719.img q660.img
663 | ren a720.img q661.img
664 | ren a721.img q662.img
665 | ren a722.img q663.img
666 | ren a723.img q664.img
667 | ren a724.img q665.img
668 | ren a725.img q666.img
669 | ren a726.img q667.img
670 | ren a727.img q668.img
671 | ren a728.img q669.img
672 | ren a729.img q670.img
673 | ren a730.img q671.img
674 | ren a731.img q672.img
675 | ren a732.img q673.img
676 | ren a733.img q674.img
677 | ren a734.img q675.img
678 | ren a735.img q676.img
679 | ren a736.img q677.img
680 | ren a737.img q678.img
681 | ren a738.img q679.img
682 | ren a739.img q680.img
683 | ren a740.img q681.img
684 | ren a741.img q682.img
685 | ren a742.img q683.img
686 | ren a743.img q684.img
687 | ren a744.img q685.img
688 | ren a745.img q686.img
689 | ren a746.img q687.img
690 | ren a747.img q688.img
691 | ren a748.img q689.img
692 | ren a749.img q690.img
693 | ren a750.img q691.img
694 | ren a751.img q692.img
695 | ren a752.img q693.img
696 | ren a753.img q694.img
697 | ren a754.img q695.img
698 | ren a755.img q696.img
699 | ren a756.img q697.img
700 | ren a757.img q698.img
701 | ren a758.img q699.img
702 | ren a759.img q700.img
703 | ren a760.img q701.img
704 | ren a761.img q702.img
705 | ren a762.img q703.img
706 | ren a763.img q704.img
707 | ren a764.img q705.img
708 | ren a765.img q706.img
709 | ren a766.img q707.img
710 | ren a767.img q708.img
711 | ren a768.img q709.img
712 | ren a769.img q710.img
713 | ren a770.img q711.img
714 | ren a771.img q712.img
715 | ren a772.img q713.img
716 | ren a773.img q714.img
717 | ren a774.img q715.img
718 | ren a775.img q716.img
719 | ren a776.img q717.img
720 | ren a777.img q718.img
721 | ren a778.img q719.img
722 | ren a779.img q720.img
723 | ren a780.img q721.img
724 | ren a781.img q722.img
725 | ren a782.img q723.img
726 | ren a783.img q724.img
727 | ren a784.img q725.img
728 | ren a785.img q726.img
729 | ren a786.img q727.img
730 | ren a787.img q728.img
731 | ren a788.img q729.img
732 | ren a789.img q730.img
733 | ren a790.img q731.img
734 | ren a791.img q732.img
735 | ren a792.img q733.img
736 | ren a793.img q734.img
737 | ren a794.img q735.img
738 | ren a795.img q736.img
739 | ren a796.img q737.img
740 | ren a797.img q738.img
741 | ren a798.img q739.img
742 | ren a799.img q740.img
743 | ren a800.img q741.img
744 | ren a801.img q742.img
745 | ren a802.img q743.img
746 | ren a803.img q744.img
747 | ren a804.img q745.img
748 | ren a805.img q746.img
749 | ren a806.img q747.img
750 | ren a807.img q748.img
751 | ren a808.img q749.img
752 | ren a809.img q750.img
753 | ren a810.img q751.img
754 | ren a811.img q752.img
755 | ren a812.img q753.img
756 | ren a813.img q754.img
757 | ren a814.img q755.img
758 | ren a815.img q756.img
759 | ren a816.img q757.img
760 | ren a817.img q758.img
761 | ren a818.img q759.img
762 | ren a819.img q760.img
763 | ren a820.img q761.img
764 | ren a821.img q762.img
765 | ren a822.img q763.img
766 | ren a823.img q764.img
767 | ren a824.img q765.img
768 | ren a825.img q766.img
769 | ren a826.img q767.img
770 | ren a827.img q768.img
771 | ren a828.img q769.img
772 | ren a829.img q770.img
773 | ren a830.img q771.img
774 | ren a831.img q772.img
775 | ren a832.img q773.img
776 | ren a833.img q774.img
777 | ren a834.img q775.img
778 | ren a835.img q776.img
779 | ren a836.img q777.img
780 | ren a837.img q778.img
781 | ren a838.img q779.img
782 | ren a839.img q780.img
783 | ren a840.img q781.img
784 | ren a841.img q782.img
785 | ren a842.img q783.img
786 | ren a843.img q784.img
787 | ren a844.img q785.img
788 | ren a845.img q786.img
789 | ren a846.img q787.img
790 | ren a847.img q788.img
791 | ren a848.img q789.img
792 | ren a849.img q790.img
793 | ren a850.img q791.img
794 | ren a851.img q792.img
795 | ren a852.img q793.img
796 | ren a853.img q794.img
797 | ren a854.img q795.img
798 | ren a855.img q796.img
799 | ren a856.img q797.img
800 | ren a857.img q798.img
801 | ren a858.img q799.img
802 | ren a859.img q800.img
803 | ren a860.img q801.img
804 | ren a861.img q802.img
805 | ren a862.img q803.img
806 | ren a863.img q804.img
807 | ren a864.img q805.img
808 | ren a865.img q806.img
809 | ren a866.img q807.img
810 | ren a867.img q808.img
811 | ren a868.img q809.img
812 | ren a869.img q810.img
813 | ren a870.img q811.img
814 | ren a871.img q812.img
815 | ren a872.img q813.img
816 | ren a873.img q814.img
817 | ren a874.img q815.img
818 | ren a875.img q816.img
819 | ren a876.img q817.img
820 | ren a877.img q818.img
821 | ren a878.img q819.img
822 | ren a879.img q820.img
823 | ren a880.img q821.img
824 | ren a881.img q822.img
825 | ren a882.img q823.img
826 | ren a883.img q824.img
827 | ren a884.img q825.img
828 | ren a885.img q826.img
829 | ren a886.img q827.img
830 | ren a887.img q828.img
831 | ren a888.img q829.img
832 | ren a889.img q830.img
833 | ren a890.img q831.img
834 | ren a891.img q832.img
835 | ren a892.img q833.img
836 | ren a893.img q834.img
837 | ren a894.img q835.img
838 | ren a895.img q836.img
839 | ren a896.img q837.img
840 | ren a897.img q838.img
841 | ren a898.img q839.img
842 | ren a899.img q840.img
843 | ren a900.img q841.img
844 | ren a901.img q842.img
845 | ren a902.img q843.img
846 | ren a903.img q844.img
847 | ren a904.img q845.img
848 | ren a905.img q846.img
849 | ren a906.img q847.img
850 | ren a907.img q848.img
851 | ren a908.img q849.img
852 | ren a909.img q850.img
853 | ren a910.img q851.img
854 | ren a911.img q852.img
855 | ren a912.img q853.img
856 | ren a913.img q854.img
857 | ren a914.img q855.img
858 | ren a915.img q856.img
859 | ren a916.img q857.img
860 | ren a917.img q858.img
861 | ren a918.img q859.img
862 | ren a919.img q860.img
863 | ren a920.img q861.img
864 | ren a921.img q862.img
865 | ren a922.img q863.img
866 | ren a923.img q864.img
867 | ren a924.img q865.img
868 | ren a925.img q866.img
869 | ren a926.img q867.img
870 | ren a927.img q868.img
871 | ren a928.img q869.img
872 | ren a929.img q870.img
873 | ren a930.img q871.img
874 | ren a931.img q872.img
875 | ren a932.img q873.img
876 | ren a933.img q874.img
877 | ren a934.img q875.img
878 | ren a935.img q876.img
879 | ren a936.img q877.img
880 | ren a937.img q878.img
881 | ren a938.img q879.img
882 | ren a939.img q880.img
883 | ren a940.img q881.img
884 | ren a941.img q882.img
885 | ren a942.img q883.img
886 | ren a943.img q884.img
887 | ren a944.img q885.img
888 | ren a945.img q886.img
889 | ren a946.img q887.img
890 | ren a947.img q888.img
891 | ren a948.img q889.img
892 | ren a949.img q890.img
893 | ren a950.img q891.img
894 | ren a951.img q892.img
895 | ren a952.img q893.img
896 | ren a953.img q894.img
897 | ren a954.img q895.img
898 | ren a955.img q896.img
899 | ren a956.img q897.img
900 | ren a957.img q898.img
901 | ren a958.img q899.img
902 | ren a959.img q900.img
903 | ren a960.img q901.img
904 | img_ave a991.img a990.img a989.img a988.img a987.img a986.img a985.img a984.img a983.img a982.img a981.img a980.img a979.img a978.img a977.img a976.img a975.img a974.img a973.img a972.img a971.img a970.img a969.img a968.img a967.img a966.img a965.img a964.img a963.img a962.img q902.img
905 | copy q902.img q903.img
906 | copy a961.img q904.img
907 | hp2do dark.img q001.img q002.img dark.img q903.img q904.img > offset.dat
908 |
--------------------------------------------------------------------------------
/docs/output450.log:
--------------------------------------------------------------------------------
1 | 00001 00000.10000 000.0000 0
2 | 00002 00000.20000 000.4000 1
3 | 00003 00000.30000 000.8000 1
4 | 00004 00000.40000 001.2000 1
5 | 00005 00000.50000 001.6000 1
6 | 00006 00000.60000 002.0000 1
7 | 00007 00000.70000 002.4000 1
8 | 00008 00000.80000 002.8000 1
9 | 00009 00000.90000 003.2000 1
10 | 00010 00001.00000 003.6000 1
11 | 00011 00001.10000 004.0000 1
12 | 00012 00001.20000 004.4000 1
13 | 00013 00001.30000 004.8000 1
14 | 00014 00001.40000 005.2000 1
15 | 00015 00001.50000 005.6000 1
16 | 00016 00001.60000 006.0000 1
17 | 00017 00001.70000 006.4000 1
18 | 00018 00001.80000 006.8000 1
19 | 00019 00001.90000 007.2000 1
20 | 00020 00002.00000 007.6000 1
21 | 00021 00002.10000 008.0000 1
22 | 00022 00002.20000 008.4000 1
23 | 00023 00002.30000 008.8000 1
24 | 00024 00002.40000 009.2000 1
25 | 00025 00002.50000 009.6000 1
26 | 00026 00002.60000 010.0000 1
27 | 00027 00002.70000 010.4000 1
28 | 00028 00002.80000 010.8000 1
29 | 00029 00002.90000 011.2000 1
30 | 00030 00003.00000 011.6000 1
31 | 00031 00003.10000 012.0000 1
32 | 00032 00003.20000 012.4000 1
33 | 00033 00003.30000 012.8000 1
34 | 00034 00003.40000 013.2000 1
35 | 00035 00003.50000 013.6000 1
36 | 00036 00003.60000 014.0000 1
37 | 00037 00003.70000 014.4000 1
38 | 00038 00003.80000 014.8000 1
39 | 00039 00003.90000 015.2000 1
40 | 00040 00004.00000 015.6000 1
41 | 00041 00004.10000 016.0000 1
42 | 00042 00004.20000 016.4000 1
43 | 00043 00004.30000 016.8000 1
44 | 00044 00004.40000 017.2000 1
45 | 00045 00004.50000 017.6000 1
46 | 00046 00004.60000 018.0000 1
47 | 00047 00004.70000 018.4000 1
48 | 00048 00004.80000 018.8000 1
49 | 00049 00004.90000 019.2000 1
50 | 00050 00005.00000 019.6000 1
51 | 00051 00005.10000 020.0000 1
52 | 00052 00005.20000 020.4000 1
53 | 00053 00005.30000 020.8000 1
54 | 00054 00005.40000 021.2000 1
55 | 00055 00005.50000 021.6000 1
56 | 00056 00005.60000 022.0000 1
57 | 00057 00005.70000 022.4000 1
58 | 00058 00005.80000 022.8000 1
59 | 00059 00005.90000 023.2000 1
60 | 00060 00006.00000 023.6000 1
61 | 00061 00006.10000 024.0000 1
62 | 00062 00006.20000 024.4000 1
63 | 00063 00006.30000 024.8000 1
64 | 00064 00006.40000 025.2000 1
65 | 00065 00006.50000 025.6000 1
66 | 00066 00006.60000 026.0000 1
67 | 00067 00006.70000 026.4000 1
68 | 00068 00006.80000 026.8000 1
69 | 00069 00006.90000 027.2000 1
70 | 00070 00007.00000 027.6000 1
71 | 00071 00007.10000 028.0000 1
72 | 00072 00007.20000 028.4000 1
73 | 00073 00007.30000 028.8000 1
74 | 00074 00007.40000 029.2000 1
75 | 00075 00007.50000 029.6000 1
76 | 00076 00007.60000 030.0000 1
77 | 00077 00007.70000 030.4000 1
78 | 00078 00007.80000 030.8000 1
79 | 00079 00007.90000 031.2000 1
80 | 00080 00008.00000 031.6000 1
81 | 00081 00008.10000 032.0000 1
82 | 00082 00008.20000 032.4000 1
83 | 00083 00008.30000 032.8000 1
84 | 00084 00008.40000 033.2000 1
85 | 00085 00008.50000 033.6000 1
86 | 00086 00008.60000 034.0000 1
87 | 00087 00008.70000 034.4000 1
88 | 00088 00008.80000 034.8000 1
89 | 00089 00008.90000 035.2000 1
90 | 00090 00009.00000 035.6000 1
91 | 00091 00009.10000 036.0000 1
92 | 00092 00009.20000 036.4000 1
93 | 00093 00009.30000 036.8000 1
94 | 00094 00009.40000 037.2000 1
95 | 00095 00009.50000 037.6000 1
96 | 00096 00009.60000 038.0000 1
97 | 00097 00009.70000 038.4000 1
98 | 00098 00009.80000 038.8000 1
99 | 00099 00009.90000 039.2000 1
100 | 00100 00010.00000 039.6000 1
101 | 00101 00010.10000 040.0000 1
102 | 00102 00010.20000 040.4000 1
103 | 00103 00010.30000 040.8000 1
104 | 00104 00010.40000 041.2000 1
105 | 00105 00010.50000 041.6000 1
106 | 00106 00010.60000 042.0000 1
107 | 00107 00010.70000 042.4000 1
108 | 00108 00010.80000 042.8000 1
109 | 00109 00010.90000 043.2000 1
110 | 00110 00011.00000 043.6000 1
111 | 00111 00011.10000 044.0000 1
112 | 00112 00011.20000 044.4000 1
113 | 00113 00011.30000 044.8000 1
114 | 00114 00011.40000 045.2000 1
115 | 00115 00011.50000 045.6000 1
116 | 00116 00011.60000 046.0000 1
117 | 00117 00011.70000 046.4000 1
118 | 00118 00011.80000 046.8000 1
119 | 00119 00011.90000 047.2000 1
120 | 00120 00012.00000 047.6000 1
121 | 00121 00012.10000 048.0000 1
122 | 00122 00012.20000 048.4000 1
123 | 00123 00012.30000 048.8000 1
124 | 00124 00012.40000 049.2000 1
125 | 00125 00012.50000 049.6000 1
126 | 00126 00012.60000 050.0000 1
127 | 00127 00012.70000 050.4000 1
128 | 00128 00012.80000 050.8000 1
129 | 00129 00012.90000 051.2000 1
130 | 00130 00013.00000 051.6000 1
131 | 00131 00013.10000 052.0000 1
132 | 00132 00013.20000 052.4000 1
133 | 00133 00013.30000 052.8000 1
134 | 00134 00013.40000 053.2000 1
135 | 00135 00013.50000 053.6000 1
136 | 00136 00013.60000 054.0000 1
137 | 00137 00013.70000 054.4000 1
138 | 00138 00013.80000 054.8000 1
139 | 00139 00013.90000 055.2000 1
140 | 00140 00014.00000 055.6000 1
141 | 00141 00014.10000 056.0000 1
142 | 00142 00014.20000 056.4000 1
143 | 00143 00014.30000 056.8000 1
144 | 00144 00014.40000 057.2000 1
145 | 00145 00014.50000 057.6000 1
146 | 00146 00014.60000 058.0000 1
147 | 00147 00014.70000 058.4000 1
148 | 00148 00014.80000 058.8000 1
149 | 00149 00014.90000 059.2000 1
150 | 00150 00015.00000 059.6000 1
151 | 00151 00015.10000 060.0000 1
152 | 00152 00015.20000 060.4000 1
153 | 00153 00015.30000 060.8000 1
154 | 00154 00015.40000 061.2000 1
155 | 00155 00015.50000 061.6000 1
156 | 00156 00015.60000 062.0000 1
157 | 00157 00015.70000 062.4000 1
158 | 00158 00015.80000 062.8000 1
159 | 00159 00015.90000 063.2000 1
160 | 00160 00016.00000 063.6000 1
161 | 00161 00016.10000 064.0000 1
162 | 00162 00016.20000 064.4000 1
163 | 00163 00016.30000 064.8000 1
164 | 00164 00016.40000 065.2000 1
165 | 00165 00016.50000 065.6000 1
166 | 00166 00016.60000 066.0000 1
167 | 00167 00016.70000 066.4000 1
168 | 00168 00016.80000 066.8000 1
169 | 00169 00016.90000 067.2000 1
170 | 00170 00017.00000 067.6000 1
171 | 00171 00017.10000 068.0000 1
172 | 00172 00017.20000 068.4000 1
173 | 00173 00017.30000 068.8000 1
174 | 00174 00017.40000 069.2000 1
175 | 00175 00017.50000 069.6000 1
176 | 00176 00017.60000 070.0000 1
177 | 00177 00017.70000 070.4000 1
178 | 00178 00017.80000 070.8000 1
179 | 00179 00017.90000 071.2000 1
180 | 00180 00018.00000 071.6000 1
181 | 00181 00018.10000 072.0000 1
182 | 00182 00018.20000 072.4000 1
183 | 00183 00018.30000 072.8000 1
184 | 00184 00018.40000 073.2000 1
185 | 00185 00018.50000 073.6000 1
186 | 00186 00018.60000 074.0000 1
187 | 00187 00018.70000 074.4000 1
188 | 00188 00018.80000 074.8000 1
189 | 00189 00018.90000 075.2000 1
190 | 00190 00019.00000 075.6000 1
191 | 00191 00019.10000 076.0000 1
192 | 00192 00019.20000 076.4000 1
193 | 00193 00019.30000 076.8000 1
194 | 00194 00019.40000 077.2000 1
195 | 00195 00019.50000 077.6000 1
196 | 00196 00019.60000 078.0000 1
197 | 00197 00019.70000 078.4000 1
198 | 00198 00019.80000 078.8000 1
199 | 00199 00019.90000 079.2000 1
200 | 00200 00020.00000 079.6000 1
201 | 00201 00020.10000 080.0000 1
202 | 00202 00020.20000 080.4000 1
203 | 00203 00020.30000 080.8000 1
204 | 00204 00020.40000 081.2000 1
205 | 00205 00020.50000 081.6000 1
206 | 00206 00020.60000 082.0000 1
207 | 00207 00020.70000 082.4000 1
208 | 00208 00020.80000 082.8000 1
209 | 00209 00020.90000 083.2000 1
210 | 00210 00021.00000 083.6000 1
211 | 00211 00021.10000 084.0000 1
212 | 00212 00021.20000 084.4000 1
213 | 00213 00021.30000 084.8000 1
214 | 00214 00021.40000 085.2000 1
215 | 00215 00021.50000 085.6000 1
216 | 00216 00021.60000 086.0000 1
217 | 00217 00021.70000 086.4000 1
218 | 00218 00021.80000 086.8000 1
219 | 00219 00021.90000 087.2000 1
220 | 00220 00022.00000 087.6000 1
221 | 00221 00022.10000 088.0000 1
222 | 00222 00022.20000 088.4000 1
223 | 00223 00022.30000 088.8000 1
224 | 00224 00022.40000 089.2000 1
225 | 00225 00022.50000 089.6000 1
226 | 00226 00022.60000 090.0000 1
227 | 00227 00022.70000 090.4000 1
228 | 00228 00022.80000 090.8000 1
229 | 00229 00022.90000 091.2000 1
230 | 00230 00023.00000 091.6000 1
231 | 00231 00023.10000 092.0000 1
232 | 00232 00023.20000 092.4000 1
233 | 00233 00023.30000 092.8000 1
234 | 00234 00023.40000 093.2000 1
235 | 00235 00023.50000 093.6000 1
236 | 00236 00023.60000 094.0000 1
237 | 00237 00023.70000 094.4000 1
238 | 00238 00023.80000 094.8000 1
239 | 00239 00023.90000 095.2000 1
240 | 00240 00024.00000 095.6000 1
241 | 00241 00024.10000 096.0000 1
242 | 00242 00024.20000 096.4000 1
243 | 00243 00024.30000 096.8000 1
244 | 00244 00024.40000 097.2000 1
245 | 00245 00024.50000 097.6000 1
246 | 00246 00024.60000 098.0000 1
247 | 00247 00024.70000 098.4000 1
248 | 00248 00024.80000 098.8000 1
249 | 00249 00024.90000 099.2000 1
250 | 00250 00025.00000 099.6000 1
251 | 00251 00025.10000 100.0000 1
252 | 00252 00025.20000 100.4000 1
253 | 00253 00025.30000 100.8000 1
254 | 00254 00025.40000 101.2000 1
255 | 00255 00025.50000 101.6000 1
256 | 00256 00025.60000 102.0000 1
257 | 00257 00025.70000 102.4000 1
258 | 00258 00025.80000 102.8000 1
259 | 00259 00025.90000 103.2000 1
260 | 00260 00026.00000 103.6000 1
261 | 00261 00026.10000 104.0000 1
262 | 00262 00026.20000 104.4000 1
263 | 00263 00026.30000 104.8000 1
264 | 00264 00026.40000 105.2000 1
265 | 00265 00026.50000 105.6000 1
266 | 00266 00026.60000 106.0000 1
267 | 00267 00026.70000 106.4000 1
268 | 00268 00026.80000 106.8000 1
269 | 00269 00026.90000 107.2000 1
270 | 00270 00027.00000 107.6000 1
271 | 00271 00027.10000 108.0000 1
272 | 00272 00027.20000 108.4000 1
273 | 00273 00027.30000 108.8000 1
274 | 00274 00027.40000 109.2000 1
275 | 00275 00027.50000 109.6000 1
276 | 00276 00027.60000 110.0000 1
277 | 00277 00027.70000 110.4000 1
278 | 00278 00027.80000 110.8000 1
279 | 00279 00027.90000 111.2000 1
280 | 00280 00028.00000 111.6000 1
281 | 00281 00028.10000 112.0000 1
282 | 00282 00028.20000 112.4000 1
283 | 00283 00028.30000 112.8000 1
284 | 00284 00028.40000 113.2000 1
285 | 00285 00028.50000 113.6000 1
286 | 00286 00028.60000 114.0000 1
287 | 00287 00028.70000 114.4000 1
288 | 00288 00028.80000 114.8000 1
289 | 00289 00028.90000 115.2000 1
290 | 00290 00029.00000 115.6000 1
291 | 00291 00029.10000 116.0000 1
292 | 00292 00029.20000 116.4000 1
293 | 00293 00029.30000 116.8000 1
294 | 00294 00029.40000 117.2000 1
295 | 00295 00029.50000 117.6000 1
296 | 00296 00029.60000 118.0000 1
297 | 00297 00029.70000 118.4000 1
298 | 00298 00029.80000 118.8000 1
299 | 00299 00029.90000 119.2000 1
300 | 00300 00030.00000 119.6000 1
301 | 00301 00030.10000 120.0000 1
302 | 00302 00030.20000 120.4000 1
303 | 00303 00030.30000 120.8000 1
304 | 00304 00030.40000 121.2000 1
305 | 00305 00030.50000 121.6000 1
306 | 00306 00030.60000 122.0000 1
307 | 00307 00030.70000 122.4000 1
308 | 00308 00030.80000 122.8000 1
309 | 00309 00030.90000 123.2000 1
310 | 00310 00031.00000 123.6000 1
311 | 00311 00031.10000 124.0000 1
312 | 00312 00031.20000 124.4000 1
313 | 00313 00031.30000 124.8000 1
314 | 00314 00031.40000 125.2000 1
315 | 00315 00031.50000 125.6000 1
316 | 00316 00031.60000 126.0000 1
317 | 00317 00031.70000 126.4000 1
318 | 00318 00031.80000 126.8000 1
319 | 00319 00031.90000 127.2000 1
320 | 00320 00032.00000 127.6000 1
321 | 00321 00032.10000 128.0000 1
322 | 00322 00032.20000 128.4000 1
323 | 00323 00032.30000 128.8000 1
324 | 00324 00032.40000 129.2000 1
325 | 00325 00032.50000 129.6000 1
326 | 00326 00032.60000 130.0000 1
327 | 00327 00032.70000 130.4000 1
328 | 00328 00032.80000 130.8000 1
329 | 00329 00032.90000 131.2000 1
330 | 00330 00033.00000 131.6000 1
331 | 00331 00033.10000 132.0000 1
332 | 00332 00033.20000 132.4000 1
333 | 00333 00033.30000 132.8000 1
334 | 00334 00033.40000 133.2000 1
335 | 00335 00033.50000 133.6000 1
336 | 00336 00033.60000 134.0000 1
337 | 00337 00033.70000 134.4000 1
338 | 00338 00033.80000 134.8000 1
339 | 00339 00033.90000 135.2000 1
340 | 00340 00034.00000 135.6000 1
341 | 00341 00034.10000 136.0000 1
342 | 00342 00034.20000 136.4000 1
343 | 00343 00034.30000 136.8000 1
344 | 00344 00034.40000 137.2000 1
345 | 00345 00034.50000 137.6000 1
346 | 00346 00034.60000 138.0000 1
347 | 00347 00034.70000 138.4000 1
348 | 00348 00034.80000 138.8000 1
349 | 00349 00034.90000 139.2000 1
350 | 00350 00035.00000 139.6000 1
351 | 00351 00035.10000 140.0000 1
352 | 00352 00035.20000 140.4000 1
353 | 00353 00035.30000 140.8000 1
354 | 00354 00035.40000 141.2000 1
355 | 00355 00035.50000 141.6000 1
356 | 00356 00035.60000 142.0000 1
357 | 00357 00035.70000 142.4000 1
358 | 00358 00035.80000 142.8000 1
359 | 00359 00035.90000 143.2000 1
360 | 00360 00036.00000 143.6000 1
361 | 00361 00036.10000 144.0000 1
362 | 00362 00036.20000 144.4000 1
363 | 00363 00036.30000 144.8000 1
364 | 00364 00036.40000 145.2000 1
365 | 00365 00036.50000 145.6000 1
366 | 00366 00036.60000 146.0000 1
367 | 00367 00036.70000 146.4000 1
368 | 00368 00036.80000 146.8000 1
369 | 00369 00036.90000 147.2000 1
370 | 00370 00037.00000 147.6000 1
371 | 00371 00037.10000 148.0000 1
372 | 00372 00037.20000 148.4000 1
373 | 00373 00037.30000 148.8000 1
374 | 00374 00037.40000 149.2000 1
375 | 00375 00037.50000 149.6000 1
376 | 00376 00037.60000 150.0000 1
377 | 00377 00037.70000 150.4000 1
378 | 00378 00037.80000 150.8000 1
379 | 00379 00037.90000 151.2000 1
380 | 00380 00038.00000 151.6000 1
381 | 00381 00038.10000 152.0000 1
382 | 00382 00038.20000 152.4000 1
383 | 00383 00038.30000 152.8000 1
384 | 00384 00038.40000 153.2000 1
385 | 00385 00038.50000 153.6000 1
386 | 00386 00038.60000 154.0000 1
387 | 00387 00038.70000 154.4000 1
388 | 00388 00038.80000 154.8000 1
389 | 00389 00038.90000 155.2000 1
390 | 00390 00039.00000 155.6000 1
391 | 00391 00039.10000 156.0000 1
392 | 00392 00039.20000 156.4000 1
393 | 00393 00039.30000 156.8000 1
394 | 00394 00039.40000 157.2000 1
395 | 00395 00039.50000 157.6000 1
396 | 00396 00039.60000 158.0000 1
397 | 00397 00039.70000 158.4000 1
398 | 00398 00039.80000 158.8000 1
399 | 00399 00039.90000 159.2000 1
400 | 00400 00040.00000 159.6000 1
401 | 00401 00040.10000 160.0000 1
402 | 00402 00040.20000 160.4000 1
403 | 00403 00040.30000 160.8000 1
404 | 00404 00040.40000 161.2000 1
405 | 00405 00040.50000 161.6000 1
406 | 00406 00040.60000 162.0000 1
407 | 00407 00040.70000 162.4000 1
408 | 00408 00040.80000 162.8000 1
409 | 00409 00040.90000 163.2000 1
410 | 00410 00041.00000 163.6000 1
411 | 00411 00041.10000 164.0000 1
412 | 00412 00041.20000 164.4000 1
413 | 00413 00041.30000 164.8000 1
414 | 00414 00041.40000 165.2000 1
415 | 00415 00041.50000 165.6000 1
416 | 00416 00041.60000 166.0000 1
417 | 00417 00041.70000 166.4000 1
418 | 00418 00041.80000 166.8000 1
419 | 00419 00041.90000 167.2000 1
420 | 00420 00042.00000 167.6000 1
421 | 00421 00042.10000 168.0000 1
422 | 00422 00042.20000 168.4000 1
423 | 00423 00042.30000 168.8000 1
424 | 00424 00042.40000 169.2000 1
425 | 00425 00042.50000 169.6000 1
426 | 00426 00042.60000 170.0000 1
427 | 00427 00042.70000 170.4000 1
428 | 00428 00042.80000 170.8000 1
429 | 00429 00042.90000 171.2000 1
430 | 00430 00043.00000 171.6000 1
431 | 00431 00043.10000 172.0000 1
432 | 00432 00043.20000 172.4000 1
433 | 00433 00043.30000 172.8000 1
434 | 00434 00043.40000 173.2000 1
435 | 00435 00043.50000 173.6000 1
436 | 00436 00043.60000 174.0000 1
437 | 00437 00043.70000 174.4000 1
438 | 00438 00043.80000 174.8000 1
439 | 00439 00043.90000 175.2000 1
440 | 00440 00044.00000 175.6000 1
441 | 00441 00044.10000 176.0000 1
442 | 00442 00044.20000 176.4000 1
443 | 00443 00044.30000 176.8000 1
444 | 00444 00044.40000 177.2000 1
445 | 00445 00044.50000 177.6000 1
446 | 00446 00044.60000 178.0000 1
447 | 00447 00044.70000 178.4000 1
448 | 00448 00044.80000 178.8000 1
449 | 00449 00044.90000 179.2000 1
450 | 00450 00045.00000 179.6000 1
451 | 00451 00045.10000 180.0000 1
452 | 00452 00045.20000 180.0000 0
453 |
454 |
455 |
456 | 00453 00045.30000 180.4000 0
457 | 00454 00045.40000 180.4000 1
458 |
--------------------------------------------------------------------------------
/source/CFileDlgFolderSelect.cpp:
--------------------------------------------------------------------------------
1 | /* CFileDlgFolderSelect.h v1 8/6/2009
2 | * ALL RIGHTS RESERVED. RYUTA MIZUTANI.
3 | */
4 | #include "stdafx.h"
5 | #include "gazo.h"
6 | #include "CFileDlgFolderSelect.h"
7 |
8 | #if !defined( _CFILEDLGFOLDERSELECT_CPP_ )
9 | #define _CFILEDLGFOLDERSELECT_CPP_
10 |
11 | CFileDlgFolderSelect::CFileDlgFolderSelect(BOOL bOpenFileDialog, LPCTSTR lpszDefExt,
12 | LPCTSTR lpszFileName, DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) :
13 | CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd) {
14 | m_prevFolder = _T("");
15 | }
16 |
17 | void CFileDlgFolderSelect::OnFolderChange() {
18 | CString strFolderPath = GetFolderPath();
19 | if (m_prevFolder != strFolderPath) m_prevFolder = strFolderPath;
20 | else {
21 | CPoint point;
22 | GetCursorPos(&point);
23 | CRect rect;
24 | GetParent()->GetDlgItem(IDOK)->GetWindowRect(&rect);
25 | //if cursor is on the "Open" button
26 | if (point.x >= rect.left && point.x <= rect.right &&
27 | point.y >= rect.top && point.y <= rect.bottom) {
28 | //set folder name
29 | strncpy(m_ofn.lpstrFile, (LPCTSTR)strFolderPath, m_ofn.nMaxFile);
30 | if (OnFileNameOK() == FALSE) {
31 | //close dialog
32 | CDialog *pParent = (CDialog *)GetParent();
33 | if (pParent != NULL) pParent->EndDialog(IDOK);
34 | }
35 | }
36 | }
37 | CFileDialog::OnFolderChange();
38 | }
39 |
40 |
41 |
42 | #endif // _CFILEDLGFOLDERSELECT_CPP_
43 |
--------------------------------------------------------------------------------
/source/CFileDlgFolderSelect.h:
--------------------------------------------------------------------------------
1 | /* CFileDlgFolderSelect.h v1 8/6/2009
2 | * ALL RIGHTS RESERVED. RYUTA MIZUTANI.
3 | */
4 | #if !defined( _CFILEDLGFOLDERSELECT_H_ )
5 | #define _CFILEDLGFOLDERSELECT_H_
6 |
7 | class CFileDlgFolderSelect : public CFileDialog
8 | {
9 | public:
10 | CFileDlgFolderSelect(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL,
11 | LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
12 | LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL);
13 | virtual void OnFolderChange();
14 | private:
15 | CString m_prevFolder;
16 | };
17 |
18 | #endif // _CFILEDLGFOLDERSELECT_H_
19 |
--------------------------------------------------------------------------------
/source/ChildFrm.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/ChildFrm.cpp
--------------------------------------------------------------------------------
/source/ChildFrm.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/ChildFrm.h
--------------------------------------------------------------------------------
/source/ClassDiagram1.cd:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/source/ClassDiagram3.cd:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/source/DlgDialbox.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgDialbox.cpp
--------------------------------------------------------------------------------
/source/DlgDialbox.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgDialbox.h
--------------------------------------------------------------------------------
/source/DlgFrameList.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgFrameList.cpp
--------------------------------------------------------------------------------
/source/DlgFrameList.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgFrameList.h
--------------------------------------------------------------------------------
/source/DlgGeneral.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgGeneral.cpp
--------------------------------------------------------------------------------
/source/DlgGeneral.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgGeneral.h
--------------------------------------------------------------------------------
/source/DlgHistoOpt.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgHistoOpt.cpp
--------------------------------------------------------------------------------
/source/DlgHistoOpt.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgHistoOpt.h
--------------------------------------------------------------------------------
/source/DlgHistogram.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgHistogram.cpp
--------------------------------------------------------------------------------
/source/DlgHistogram.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgHistogram.h
--------------------------------------------------------------------------------
/source/DlgHorizcenter.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgHorizcenter.cpp
--------------------------------------------------------------------------------
/source/DlgHorizcenter.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgHorizcenter.h
--------------------------------------------------------------------------------
/source/DlgLsqfit.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgLsqfit.cpp
--------------------------------------------------------------------------------
/source/DlgLsqfit.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgLsqfit.h
--------------------------------------------------------------------------------
/source/DlgMessage.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgMessage.cpp
--------------------------------------------------------------------------------
/source/DlgMessage.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgMessage.h
--------------------------------------------------------------------------------
/source/DlgOverlay.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgOverlay.cpp
--------------------------------------------------------------------------------
/source/DlgOverlay.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgOverlay.h
--------------------------------------------------------------------------------
/source/DlgPolygon.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgPolygon.cpp
--------------------------------------------------------------------------------
/source/DlgPolygon.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgPolygon.h
--------------------------------------------------------------------------------
/source/DlgProperty.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgProperty.cpp
--------------------------------------------------------------------------------
/source/DlgProperty.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgProperty.h
--------------------------------------------------------------------------------
/source/DlgQueue.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgQueue.cpp
--------------------------------------------------------------------------------
/source/DlgQueue.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgQueue.h
--------------------------------------------------------------------------------
/source/DlgReconOpt.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgReconOpt.cpp
--------------------------------------------------------------------------------
/source/DlgReconOpt.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgReconOpt.h
--------------------------------------------------------------------------------
/source/DlgReconst.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgReconst.cpp
--------------------------------------------------------------------------------
/source/DlgReconst.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgReconst.h
--------------------------------------------------------------------------------
/source/DlgRefraction.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgRefraction.cpp
--------------------------------------------------------------------------------
/source/DlgRefraction.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgRefraction.h
--------------------------------------------------------------------------------
/source/DlgRenumFiles.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgRenumFiles.cpp
--------------------------------------------------------------------------------
/source/DlgRenumFiles.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgRenumFiles.h
--------------------------------------------------------------------------------
/source/DlgResolnPlot.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgResolnPlot.cpp
--------------------------------------------------------------------------------
/source/DlgResolnPlot.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/DlgResolnPlot.h
--------------------------------------------------------------------------------
/source/MainFrm.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/MainFrm.cpp
--------------------------------------------------------------------------------
/source/MainFrm.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/MainFrm.h
--------------------------------------------------------------------------------
/source/StdAfx.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/StdAfx.cpp
--------------------------------------------------------------------------------
/source/StdAfx.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/StdAfx.h
--------------------------------------------------------------------------------
/source/ccmplx.cpp:
--------------------------------------------------------------------------------
1 | /* ccmplx.cpp v0.01 5/10/2000
2 | ALL RIGHTS RESERVED. RYUTA MIZUTANI.
3 | */
4 | #include "stdafx.h"
5 | /// added for precompiled header definition
6 |
7 | #if !defined( _CCMPLX_CPP_ )
8 | #define _CCMPLX_CPP_
9 | #include
10 | #include "ccmplx.h"
11 | //#include "structure.h"
12 |
13 | CCmplx::CCmplx() {re = 0.0; im = 0.0;}
14 | CCmplx::CCmplx(TReal arg1, TReal arg2) {re = (TCmpElmnt)arg1; im = (TCmpElmnt)arg2;}
15 | CCmplx::~CCmplx() {/*place holder*/}
16 | CCmplx CCmplx::operator +(CCmplx a) {
17 | return CCmplx(re + a.re, im + a.im);
18 | }
19 | CCmplx CCmplx::operator -(CCmplx a) {
20 | return CCmplx(re - a.re, im - a.im);
21 | }
22 | CCmplx CCmplx::operator *(CCmplx a) {
23 | return CCmplx(re * a.re - im * a.im, re * a.im + im * a.re);
24 | }
25 | CCmplx CCmplx::operator *(TReal a) {
26 | return CCmplx(re * a, im * a);
27 | }
28 | CCmplx CCmplx::operator /(TReal a) {
29 | return CCmplx(re / a, im / a);
30 | }
31 | CCmplx CCmplx::operator =(CCmplx a) {
32 | re = a.re; im = a.im; return CCmplx(re, im);
33 | }
34 | CCmplx CCmplx::operator +=(CCmplx a) {
35 | re += a.re; im += a.im; return CCmplx(re, im);
36 | }
37 | CCmplx CCmplx::operator -=(CCmplx a) {
38 | re -= a.re; im -= a.im; return CCmplx(re, im);
39 | }
40 | CCmplx CCmplx::operator *=(CCmplx a) {
41 | TCmpElmnt r = re * a.re - im * a.im;
42 | im = re * a.im + im * a.re;
43 | re = r; return CCmplx(re, im);
44 | }
45 | CCmplx CCmplx::operator *=(TReal a) {
46 | re *= (TCmpElmnt)a; im *= (TCmpElmnt)a; return *this;
47 | }
48 | CCmplx CCmplx::operator *=(float a) {
49 | re *= (TCmpElmnt)a; im *= (TCmpElmnt)a; return *this;
50 | }
51 | CCmplx CCmplx::Exp(TReal a) {re = (TCmpElmnt)cos(a); im = (TCmpElmnt)sin(a); return CCmplx(re, im);}
52 | CCmplx CCmplx::Rev() {return CCmplx(-im, re);}
53 | CCmplx CCmplx::Conj() {return CCmplx(re, -im);}
54 | TCmpElmnt CCmplx::Real() {return re;}
55 | TCmpElmnt CCmplx::Imag() {return im;}
56 | TCmpElmnt CCmplx::Modulus() {return (TCmpElmnt)sqrt(re * re + im * im);}
57 | TCmpElmnt CCmplx::Modulus2() {return (re * re + im * im);}
58 | void CCmplx::AddToReal(TCmpElmnt a) {re += a;}
59 | void CCmplx::Reset() {re = 0.0; im = 0.0;}
60 |
61 | #endif // _CCMPLX_CPP_
62 |
--------------------------------------------------------------------------------
/source/ccmplx.h:
--------------------------------------------------------------------------------
1 | /* cerror.h v1.10 2/23/2008
2 | * ALL RIGHTS RESERVED. RYUTA MIZUTANI.
3 | */
4 | #include "general.h"
5 |
6 | #if !defined( _CCMPLX_H_ )
7 | #define _CCMPLX_H_
8 |
9 | class CCmplx {
10 | public:
11 | CCmplx();
12 | ~CCmplx();
13 | CCmplx(TReal arg1, TReal arg2);
14 | CCmplx operator +(CCmplx a);
15 | CCmplx operator -(CCmplx a);
16 | CCmplx operator *(TReal a);
17 | CCmplx operator /(TReal a);
18 | CCmplx operator *(CCmplx a);
19 | CCmplx operator =(CCmplx a);
20 | CCmplx operator +=(CCmplx a);
21 | CCmplx operator -=(CCmplx a);
22 | CCmplx operator *=(CCmplx a);
23 | CCmplx operator *=(TReal a);
24 | CCmplx operator *=(float a);
25 | CCmplx Exp(TReal a);
26 | CCmplx Rev();
27 | CCmplx Conj();
28 | TCmpElmnt Real();
29 | TCmpElmnt Imag();
30 | TCmpElmnt Modulus();
31 | TCmpElmnt Modulus2();
32 | void Reset();
33 | void AddToReal(TCmpElmnt a);
34 | TCmpElmnt re, im;
35 | };
36 |
37 | #endif // _CCMPLX_H_
38 |
--------------------------------------------------------------------------------
/source/cerror.cpp:
--------------------------------------------------------------------------------
1 | /* cerror.cpp v0.01 1/30/2000
2 | * ALL RIGHTS RESERVED. RYUTA MIZUTANI.
3 | */
4 | #include "stdafx.h"
5 | /// added for precompiled header definition
6 |
7 | #if !defined( _CERROR_CPP_ )
8 | #define _CERROR_CPP_
9 | #include
10 | #include "cerror.h"
11 |
12 | CError::CError() {
13 | logLevel = 0;
14 | Clear();
15 | }
16 | CError::~CError() {}
17 | void CError::Clear() {
18 | numOfErr = 0;
19 | fatal = false;
20 | ClearFlag();
21 | getpoint = 0;
22 | for (int i=0; i 0) asserted = true;
38 | if (err >= FATAL_ERROR_LEVEL) fatal = true;
39 | if (numOfErr >= MAX_ERROR) {numOfErr = 0; rotation = true;}
40 | errCode[numOfErr] = err;
41 | message[numOfErr++] = msg;
42 | return;
43 | }
44 | void CError::Log(CString msg) {this->Log(0, msg);}
45 | /*080217
46 | void CError::Log(TErr err, const CStdioFileRead& errfile, CString msg) {
47 | if (err <= logLevel) return;
48 | if (err > 0) asserted = true;
49 | if (err >= FATAL_ERROR_LEVEL) fatal = true;
50 | if (numOfErr >= MAX_ERROR) {numOfErr = 0; rotation = true;}
51 | errCode[numOfErr] = err;
52 | char s[50];
53 | sprintf(s, "%d", errfile.Lines());
54 | message[numOfErr++] = msg +
55 | " at line " + s +
56 | " of file " + errfile.GetFileName();
57 | return;
58 | }*/
59 |
60 | void CError::ResetPointer() {getpoint = 0;}
61 | bool CError::GetMessage(int* code, CString* log) {
62 | if (getpoint >= MAX_ERROR) {*code = -1; return false;}
63 | int ip;
64 | if (rotation) {
65 | ip = (getpoint + numOfErr) % MAX_ERROR;
66 | *code = errCode[ip];
67 | *log = message[ip];
68 | getpoint++;
69 | return true;
70 | } else {
71 | ip = getpoint;
72 | *code = errCode[ip];
73 | *log = message[ip];
74 | getpoint++;
75 | if (*code < 0) return false; else return true;
76 | }
77 | }
78 |
79 | CString CError::Report() {
80 | CString rtn; CString line;
81 | if (fatal) rtn = "!!FATAL ERROR!!\r\n"; else rtn = "";
82 | if (rotation) {
83 | for (int i=numOfErr; i= FATAL_ERROR_LEVEL) rtn += "Error ";
85 | else if (errCode[i] >= WARNING_LEVEL) rtn += "Warning ";
86 | if (errCode[i] >= WARNING_LEVEL) {
87 | line.Format("%d\r\n", errCode[i]); rtn += line;
88 | }
89 | if (!message[i].IsEmpty()) rtn += message[i] + "\r\n";
90 | }
91 | }
92 | for (int i=0; i= FATAL_ERROR_LEVEL) rtn += "Error ";
94 | else if (errCode[i] >= WARNING_LEVEL) rtn += "Warning ";
95 | if (errCode[i] >= WARNING_LEVEL) {
96 | line.Format("%d\r\n", errCode[i]); rtn += line;
97 | }
98 | if (!message[i].IsEmpty()) rtn += message[i] + "\r\n";
99 | }
100 | return rtn;
101 | }
102 |
103 | #endif // _CERROR_CPP_
104 |
--------------------------------------------------------------------------------
/source/cerror.h:
--------------------------------------------------------------------------------
1 | /* cerror.h v0.01 1/30/2000
2 | * ALL RIGHTS RESERVED. RYUTA MIZUTANI.
3 | */
4 | #if !defined( _CERROR_H_ )
5 | #define _CERROR_H_
6 | #include // CString
7 | //080217 #include "cstdiofileread.h"
8 | #include "general.h"
9 |
10 | #define FATAL_ERROR_LEVEL 10000
11 | #define WARNING_LEVEL 100
12 | #define TOO_MUCH_ERROR 19999
13 | #define MAX_ERROR 1000
14 | #define WARN_NOT_CONNECTED 9001
15 | //160803
16 | #define WARN_READIMAGE_SIZECHANGE 9002
17 |
18 | class CError {
19 | public:
20 | CError();
21 | ~CError();
22 | void Log(TErr err, CString msg = "");
23 | void LogNoDup(TErr err, CString msg = "");
24 | //080217 void Log(TErr err, const CStdioFileRead& errfile, CString msg = "");
25 | void Log(CString msg);
26 | bool IsFatal();
27 | bool IsAsserted();
28 | //int IsFatal(int err, CString msg);
29 | //int IsFatal(int err, int line);
30 | //int IsFatal(int err);
31 | void ResetPointer();
32 | bool GetMessage(int* code, CString* log);
33 | CString Report();
34 | void Clear();
35 | void ClearFlag();
36 | void SetLogLevel(int arg);
37 | private:
38 | bool asserted;
39 | bool fatal;
40 | bool rotation;
41 | int numOfErr, getpoint;
42 | int errCode[MAX_ERROR];
43 | CString message[MAX_ERROR];
44 | int logLevel;
45 | };
46 |
47 |
48 | #endif // _CERROR_H_
49 |
50 |
--------------------------------------------------------------------------------
/source/cfft.cpp:
--------------------------------------------------------------------------------
1 | /* cfft.cpp v0.01 6/20/2000
2 | ALL RIGHTS RESERVED. RYUTA MIZUTANI.
3 | */
4 | #include "stdafx.h"
5 | /// added for precompiled header definition
6 |
7 | #if !defined( _CFFT_CPP_ )
8 | #define _CFFT_CPP_
9 | #include
10 | #include "cfft.h"
11 | #include "ccmplx.h"
12 | //#include "resource.h"
13 | //#include "DlgRefine.h"
14 | //#include "DlgMap.h"
15 | //#include "DlgAnalysis.h"
16 |
17 | CFft::CFft() {
18 | w0r = NULL; w0i = NULL; w1r = NULL; w1i = NULL; w2r = NULL; w2i = NULL;
19 | x0r = NULL; x0i = NULL; x1r = NULL; x1i = NULL;
20 | n0 = 0; n1 = 0; n2 = 0; np0 = 0; np1 = 0; np2 = 0;
21 | nmin0 = 0; nmin1 = 0; nmin2 = 0;
22 | nmax = 0;
23 | init = false;
24 | //dialog = NULL; mapdialog = NULL; analdialog = NULL;
25 | }
26 | CFft::~CFft() {
27 | if (w0r) delete [] w0r; if (w0i) delete [] w0i;
28 | if (w1r) delete [] w1r; if (w1i) delete [] w1i;
29 | if (w2r) delete [] w2r; if (w2i) delete [] w2i;
30 | if (x0r) delete [] x0r; if (x0i) delete [] x0i;
31 | if (x1r) delete [] x1r; if (x1i) delete [] x1i;
32 | }
33 | //void CFft::SetDialogCtrl(CDlgRefine* dlg) {dialog = dlg;}
34 | //void CFft::SetMapDialogCtrl(CDlgMap* dlg) {mapdialog = dlg;}
35 | //void CFft::SetAnalDialogCtrl(CDlgAnalysis* dlg) {analdialog = dlg;}
36 |
37 | TErr CFft::InitParam(int narg0, int narg1, int narg2,
38 | int min0, int min1, int min2) {
39 | if ((narg0 < 3)||(narg1 < 3)||(narg2 < 3)) return 15003;
40 | nmin0 = min0;
41 | nmin1 = min1;
42 | nmin2 = min2;
43 | if (init) {
44 | if ((np0 == narg0)&&(np1 == narg1)&&(np2 == narg2)) return 0;//return 100;//050224
45 | }
46 | np0 = narg0;
47 | np1 = narg1;
48 | np2 = narg2;
49 | n0 = (int) pow((double)2, narg0);
50 | n1 = (int) pow((double)2, narg1);
51 | n2 = (int) pow((double)2, narg2);
52 | nmax = n0;
53 | nmax = nmax > n1 ? nmax : n1;
54 | nmax = nmax > n2 ? nmax : n2;
55 | if ( w0r ) {
56 | delete [] w0r; delete [] w0i; delete [] w1r; delete [] w1i; delete [] w2r; delete [] w2i;
57 | delete [] x0r; delete [] x0i; delete [] x1r; delete [] x1i;
58 | }
59 | if ((w0r = new float[n0 / 2]) == NULL) return 15002;
60 | if ((w1r = new float[n1 / 2]) == NULL) return 15002;
61 | if ((w2r = new float[n2 / 2]) == NULL) return 15002;
62 | if ((x0r = new float[nmax]) == NULL) return 15002;
63 | if ((x1r = new float[nmax]) == NULL) return 15002;
64 | if ((w0i = new float[n0 / 2]) == NULL) return 15002;
65 | if ((w1i = new float[n1 / 2]) == NULL) return 15002;
66 | if ((w2i = new float[n2 / 2]) == NULL) return 15002;
67 | if ((x0i = new float[nmax]) == NULL) return 15002;
68 | if ((x1i = new float[nmax]) == NULL) return 15002;
69 | return 0;
70 | }
71 | TErr CFft::Init(int narg0, int narg1, int narg2,
72 | int min0, int min1, int min2) {
73 | int err = this->InitParam(narg0, narg1, narg2, min0, min1, min2);
74 | if (err == 100) return 0;
75 | if (err != 0) return err;
76 | float a;
77 | for (int i=0; i<(n0 / 2); i++) {
78 | a = (float)__PI2 * ((float)i / (float)n0);
79 | w0r[i] = (float)cos(a); w0i[i] = (float)sin(a);
80 | }
81 | for (int i=0; i<(n1 / 2); i++) {
82 | a = (float)__PI2 * ((float)i / (float)n1);
83 | w1r[i] = (float)cos(a); w1i[i] = (float)sin(a);
84 | }
85 | for (int i=0; i<(n2 / 2); i++) {
86 | a = (float)__PI2 * ((float)i / (float)n2);
87 | w2r[i] = (float)cos(a); w2i[i] = (float)sin(a);
88 | }
89 | init = true; return 0;
90 | }
91 |
92 | TErr CFft::InitRev(int narg0, int narg1, int narg2,
93 | int min0, int min1, int min2, int sgnrot) {
94 | int err = this->InitParam(narg0, narg1, narg2, min0, min1, min2);
95 | float p0 = (float)__PI2 * sgnrot; float p1 = p0; float p2 = p0;
96 | if (nmin0 < 0) {nmin0 = - (n0 / 2) + 1; p0 *= -1;}
97 | if (nmin1 < 0) {nmin1 = - (n1 / 2) + 1; p1 *= -1;}
98 | if (nmin2 < 0) {nmin2 = - (n2 / 2) + 1; p2 *= -1;}
99 | if (err == 100) return 0;
100 | if (err != 0) return err;
101 | float a;
102 | for (int i=0; i<(n0 / 2); i++) {
103 | a = p0 * ((float)i / (float)n0);
104 | w0r[i] = (float)cos(a); w0i[i] = (float)sin(a);
105 | // w0[i].Exp(p0 * ((double)i / (double)n0));
106 | }
107 | for (int i=0; i<(n1 / 2); i++) {
108 | a = p1 * ((float)i / (float)n1);
109 | w1r[i] = (float)cos(a); w1i[i] = (float)sin(a);
110 | // w1[i].Exp(p1 * ((double)i / (double)n1));
111 | }
112 | for (int i=0; i<(n2 / 2); i++) {
113 | a = p2 * ((float)i / (float)n2);
114 | w2r[i] = (float)cos(a); w2i[i] = (float)sin(a);
115 | // w2[i].Exp(p2 * ((double)i / (double)n2));
116 | }
117 | init = true; return 0;
118 | }
119 |
120 | void CFft::FFT3(CCmplx* f) {//f(hkl) = f[l*kmax*hmax+k*hmax+h]???
121 | if (!(init)) return;
122 | int idx0;
123 | const int n1n0 = n1 * n0;
124 | for (int i=0; irefnStatus == STATUS_STOP) break;}
127 | //if (analdialog) {if (analdialog->analStatus == STATUS_STOP) break;}
128 | idx0 = i * n0;
129 | for (int j=0; jFFT(w0r, w0i, n0, np0, nmin0, f, idx0, 1);
131 | idx0 += n1n0;
132 | }
133 | }
134 | for (int i=0; irefnStatus == STATUS_STOP) break;}
137 | //if (analdialog) {if (analdialog->analStatus == STATUS_STOP) break;}
138 | idx0 = i;
139 | for (int j=0; jFFT(w1r, w1i, n1, np1, nmin1, f, idx0, n0);
141 | idx0 += n1n0;
142 | }
143 | }
144 | for (int i=0; irefnStatus == STATUS_STOP) break;}
147 | //if (analdialog) {if (analdialog->analStatus == STATUS_STOP) break;}
148 | idx0 = i;
149 | for (int j=0; jFFT(w2r, w2i, n2, np2, nmin2, f, idx0, n1n0);
151 | idx0 += n0;
152 | }
153 | }
154 | }
155 |
156 | void CFft::FFT3Rev(CCmplx* f) {
157 | //f(hkl) = f[(l-nmin2)*kmax*hmax+(k-nmin1)*hmax+(h-nmin0)]???
158 | if (!(init)) return;
159 | int idx0;
160 | const int n1n0 = n1 * n0;
161 | for (int i=0; irefnStatus == STATUS_STOP) break;}
164 | //if (mapdialog) {if (mapdialog->mapStatus == STATUS_STOP) break;}
165 | idx0 = i * n0;
166 | for (int j=0; jFFTrev(w0r, w0i, n0, np0, nmin0, f, idx0, 1);
168 | idx0 += n1n0;
169 | }
170 | }
171 | for (int i=0; irefnStatus == STATUS_STOP) break;}
174 | //if (mapdialog) {if (mapdialog->mapStatus == STATUS_STOP) break;}
175 | idx0 = i;
176 | for (int j=0; jFFTrev(w1r, w1i, n1, np1, nmin1, f, idx0, n0);
178 | idx0 += n1n0;
179 | }
180 | }
181 | for (int i=0; irefnStatus == STATUS_STOP) break;}
184 | //if (mapdialog) {if (mapdialog->mapStatus == STATUS_STOP) break;}
185 | idx0 = i;
186 | for (int j=0; jFFTrev(w2r, w2i, n2, np2, nmin2, f, idx0, n1n0);
188 | idx0 += n0;
189 | }
190 | }//cout <<"fft"<= 0) {
345 | for (int k=0; k= 0)&&(nmin0 >= 0)) return 0;
380 | }
381 | }
382 | nmin0 = min0;
383 | np0 = narg0;
384 | n0 = (int) pow((double)2, narg0);
385 | nmax = n0;
386 | if ( w0r ) {
387 | delete [] w0r; delete [] w0i;
388 | delete [] x0r; delete [] x0i; delete [] x1r; delete [] x1i;
389 | }
390 | //120720
391 | try {
392 | w0r = new float[n0 / 2];
393 | w0i = new float[n0 / 2];
394 | x0r = new float[nmax];
395 | x0i = new float[nmax];
396 | x1r = new float[nmax];
397 | x1i = new float[nmax];
398 | }
399 | catch(CException* e) {
400 | e->Delete();
401 | return 15002;
402 | }
403 | float p0 = (float)__PI2;
404 | if (nmin0 < 0) {nmin0 = - (n0 / 2) + 1; p0 *= -1;}
405 | float a;
406 | for (int i=0; i<(n0 / 2); i++) {
407 | a = p0 * ((float)i / (float)n0);
408 | w0r[i] = (float)cos(a); w0i[i] = (float)sin(a);
409 | }
410 | init = true; return 0;
411 | }
412 | void CFft::FFT1(CCmplx* f) {//f(h) = f[h]???
413 | if (!(init)) return;
414 | //int idx0;
415 | //int i=0;
416 | // idx0 = i * n0;
417 | // this->FFTrev(w0r, w0i, n0, np0, nmin0, f, idx0, 1);
418 | this->FFT(w0r, w0i, n0, np0, nmin0, f, 0, 1);
419 | const float a = 1.f / n0;
420 | if (nmin0 < 0) {
421 | CCmplx sw;
422 | for (int i=0; iFFTrev(w0r, w0i, n0, np0, nmin0, f, 0, 1);
434 | }
435 |
436 | TErr CFft::Init2(int narg0, int min0, int narg1, int min1) {
437 | if ((narg0 < 3)||(narg1 < 3)) return 15003;
438 | if (init) {
439 | if ((np0 == narg0)&&(np1 == narg1)) {
440 | int nskip = 0;
441 | if ((min0 < 0)&&(nmin0 < 0)) nskip++;
442 | else if ((min0 >= 0)&&(nmin0 >= 0)) nskip++;
443 | if ((min1 < 0)&&(nmin1 < 0)) nskip++;
444 | else if ((min1 >= 0)&&(nmin1 >= 0)) nskip++;
445 | if (nskip == 2) return 0;
446 | }
447 | }
448 | nmin0 = min0;
449 | nmin1 = min1;
450 | np0 = narg0;
451 | np1 = narg1;
452 | n0 = (int) pow((double)2, narg0);
453 | n1 = (int) pow((double)2, narg1);
454 | nmax = n0;
455 | nmax = nmax > n1 ? nmax : n1;
456 | if ( w0r ) {
457 | delete [] w0r; delete [] w0i; delete [] w1r; delete [] w1i;
458 | delete [] x0r; delete [] x0i; delete [] x1r; delete [] x1i;
459 | }
460 | if ((w0r = new float[n0 / 2]) == NULL) return 15002;
461 | if ((w1r = new float[n1 / 2]) == NULL) return 15002;
462 | if ((w0i = new float[n0 / 2]) == NULL) return 15002;
463 | if ((w1i = new float[n1 / 2]) == NULL) return 15002;
464 | if ((x0r = new float[nmax]) == NULL) return 15002;
465 | if ((x0i = new float[nmax]) == NULL) return 15002;
466 | if ((x1r = new float[nmax]) == NULL) return 15002;
467 | if ((x1i = new float[nmax]) == NULL) return 15002;
468 | float a, p0;
469 | if (nmin0 < 0) {nmin0 = - (n0 / 2) + 1; p0 = -(float)__PI2;} else p0 = (float)__PI2;
470 | for (int i=0; i<(n0 / 2); i++) {
471 | a = p0 * ((float)i / (float)n0);
472 | w0r[i] = (float)cos(a); w0i[i] = (float)sin(a);
473 | }
474 | if (nmin1 < 0) {nmin1 = - (n1 / 2) + 1; p0 = -(float)__PI2;} else p0 = (float)__PI2;
475 | for (int i=0; i<(n1 / 2); i++) {
476 | a = p0 * ((float)i / (float)n1);
477 | w1r[i] = (float)cos(a); w1i[i] = (float)sin(a);
478 | }
479 | init = true; return 0;
480 | }
481 |
482 | void CFft::FFT2(CCmplx* f) {//f(hk0) = f[k*hmax+h]???
483 | if (!(init)) return;
484 | const int n1n0 = n1 * n0;
485 | for (int i=0; iFFT(w0r, w0i, n0, np0, nmin0, f, idx0, 1);
488 | const float a = 1.f / n0;
489 | if (nmin0 < 0) {
490 | CCmplx sw;
491 | for (int j=0; jFFT(w1r, w1i, n1, np1, nmin1, f, idx0, n0);
502 | const float a = 1.f / n1;
503 | if (nmin1 < 0) {
504 | CCmplx sw;
505 | for (int j=0; jFFTrev(w0r, w0i, n0, np0, nmin0, f, idx0, 1);
522 | }
523 | for (int i=0; iFFTrev(w1r, w1i, n1, np1, nmin1, f, idx0, n0);
526 | }
527 | }
528 |
529 |
530 | #include
531 |
532 | void CFft::Debug() {
533 | const int ndimp = 7;
534 | const int ndim = (int) pow((double)2, ndimp);
535 | CCmplx* F; CCmplx* G; CCmplx* H;
536 | F = new CCmplx[ndim]; G = new CCmplx[ndim]; H = new CCmplx[ndim];
537 | int i;
538 | for (i=0; iInit1(ndimp, -1);
548 | //this->Init1(ndimp, 0);
549 | struct _timeb tstruct;
550 | _ftime_s( &tstruct );
551 | TReal tm0 = tstruct.time + tstruct.millitm * 0.001;
552 | //
553 | this->FFT1Rev(F);
554 | ///
555 | for (i=0; iInit1(ndimp, 0);
559 | this->FFT1(H);
560 | _ftime_s( &tstruct );
561 | ///
562 | CString line = "G => F => H\r\n", scr;
563 | for (i=0; iInit2(ndimp, -1, ndimp2, -1);
601 | //this->Init1(ndimp, -1);
602 | struct _timeb tstruct;
603 | _ftime_s( &tstruct );
604 | TReal tm0 = tstruct.time + tstruct.millitm * 0.001;
605 | //
606 | this->FFT2Rev(F);
607 | ///
608 | for (int j=0; jInit1(ndimp, 0);
614 | this->FFT2(H);
615 | _ftime_s( &tstruct );
616 | ///
617 | CString line = "G => F => H\r\n", scr;
618 | for (i=0; i
5 | //#include "cutil_inline.h"
6 | #include "reconstinfo.h"
7 |
8 | //OpenCL template
9 | //#ifndef TEMPLATE_H_
10 | //#define TEMPLATE_H_
11 |
12 | #include
13 | #include
14 | #include
15 | #include
16 | #include
17 | #include
18 |
19 | void CLCleanup(void);// Releases OpenCL resources (Context, Memory etc.)
20 |
21 | void CLReconstHost(RECONST_INFO* ri, int idev, bool bReport);
22 | void CLInitATIstreamDeviceInfo(int* iATIcount, int* iATImaxwork, int* iATIunitwork);
23 | //TErr CLReconstMemAlloc(RECONST_INFO* ri, int idev);
24 | void CLReconstMemFree(RECONST_INFO* ri);
25 |
26 | extern "C" bool DBProjDlgCtrl(RECONST_INFO* ri, int iProgStep, int iSino, int* pCurrStep);
27 |
28 | #endif //_CLRECONST_H_
29 |
--------------------------------------------------------------------------------
/source/clReconstDummy.cpp:
--------------------------------------------------------------------------------
1 | #include "stdafx.h"
2 | #include "general.h"
3 |
4 | void CLInitATIstreamDeviceInfo(int* iATIcount, int* iATImaxwork, int* iATIunitwork) {
5 | *iATIcount = 0; *iATImaxwork = ATISTREAM_MAXWORK; *iATIunitwork = ATISTREAM_UNITWORK;
6 | return;
7 | }
8 |
9 | void CLCleanup(void) {}
10 |
11 | void CLReconstMemFree(RECONST_INFO* ri) {}
12 |
13 | void CLReconstHost(RECONST_INFO* ri, int idev, bool bReport) {}
14 |
15 |
--------------------------------------------------------------------------------
/source/constants.h:
--------------------------------------------------------------------------------
1 | //standard parameter constants
2 |
3 | #define DEG_TO_RAD 0.0174532925199
4 | // = (1.0/RAD_TO_DEG)
5 | //#define RAD_TO_DEG 57.2957795131
6 | #define __PI 3.1415926535897
7 | #define __PI2 6.283185307178
8 | #define LOG2 0.69314718055994530941723212145818
9 | #define BITMAP_NCOLORS 256
10 | #define MAX_FILE_DIALOG_LIST 65535
11 | #define MAX_CPU 256
12 |
13 | #define TIF_BYTE 1
14 | #define TIF_ASCII 2
15 | #define TIF_SHORT 3
16 | #define TIF_LONG 4
17 | #define TIF_RATIONAL 5
18 | //#define TIF_MAXIFD 20
19 | #define TIF_IMAGEWIDTH 0x0100
20 | #define TIF_IMAGELENGTH 0x0101
21 | #define TIF_BITSPERSAMPLE 0x0102
22 | #define TIF_COMPRESSION 0x0103
23 | #define TIF_PHOTOMETRIC 0x0106
24 | #define TIF_IMAGEDESCRIPTION 0x010e
25 | #define TIF_STRIPOFFSETS 0x0111
26 | #define TIF_SAMPLESPERPIXEL 0x0115
27 | #define TIF_ROWSPERSTRIP 0x0116
28 | #define TIF_STRIPBYTECOUNTS 0x0117
29 | #define TIF_XRESOLUTION 0x011a
30 | #define TIF_YRESOLUTION 0x011b
31 | #define TIF_PLANARCONFIGURATION 0x011c
32 | #define TIF_RESOLUTIONUNIT 0x0128
33 | #define TIF_SOFTWARE 0x0131
34 | #define TIF_DATETIME 0x0132
35 | #define TIF_ARTIST 0x013b
36 |
37 | #define READTIF_CARG_SIZE 200
38 |
39 | #define LOG_SCALE 3000
40 | #define ZERNIKE_SCALE 1000
41 | #define BACKPROJ_SCALE 100
42 |
43 | #define RECONST_INFO_IDLE 0
44 | #define RECONST_INFO_BUSY 1
45 | #define RECONST_INFO_ERROR 2
46 |
47 | #define SINOGRAM_PIXEL_MIN8bit 3
48 | #define SINOGRAM_PIXEL_MIN16bit 20
49 | #define SINOGRAM_PIXEL_MIN SINOGRAM_PIXEL_MIN16bit
50 |
51 | #define PROGRESS_BAR_UNIT 20
52 |
53 | #define DBPT_GINTP 16
54 |
55 | #define HALFPIXEL_OFFSET 0.5
56 |
57 | #define CUDA_BLOCKSIZE 256
58 | #define CUDA_WARPSIZE 32
59 |
60 | #define ATISTREAM_MAXWORK 256
61 | #define ATISTREAM_UNITWORK 64
62 | #define ATISTREAM_MAXDEVICES 16
63 |
64 | #define CDLGRECONST_OPT_ZOOMING_NONE 2
65 |
--------------------------------------------------------------------------------
/source/cudaReconst.h:
--------------------------------------------------------------------------------
1 | #if !defined(_CUDARECONST_H_)
2 | #define _CUDARECONST_H_
3 |
4 |
5 | //#include "cutil_inline.h"
6 | #include "reconstinfo.h"
7 |
8 | #define CUDA_ERROR_DEVICEINFO_MASK 0x0000ffff
9 | #define CUDA_ERROR_INSUFFICIENT_DRIVER 0x00010000
10 | #define CUDA_ERROR_INSUFFICIENT_COMPUTE_CAPABILITY 0x00020000
11 | #define CUDA_ERROR_VIRTUAL_DEVICE_DETECTED 0x00040000
12 | #define CUDA_ERROR_DEVICE_GETPROPERTY 0x00080000
13 | #define CUDA_ERROR_DEVICE_GETCOUNT 0x00100000
14 |
15 | //Host routine
16 | extern "C" void CudaReconstHost(RECONST_INFO* ri, int idev, bool bReport, bool bEnStream);
17 | extern "C" void CudaReconstMemFree(RECONST_INFO* ri);
18 | extern "C" void CudaReconstResourceFree(RECONST_INFO* ri, bool bCudaDeviceReset);//190710
19 | extern "C" void CudaReconstHostFFT(RECONST_INFO* ri, int idev, bool bReport);
20 | extern "C" int GetCudaDeviceCount(int iMinComputeCapability);
21 | extern "C" int GetCudaMaxThreadsPerBlock(int iDevice);
22 | extern "C" int GetCudaWarpSize(int iDevice);
23 | extern "C" int GetCudaDeviceName(int iDevice, char* pcName, int iszcName);
24 | extern "C" int GetCudaDeviceComputingCapability(int iDevice, int* piMajor, int* piMinor);
25 | extern "C" int GetCudaNumberOfCores(int iDevice, int* piCores, int* piProcessors);
26 | extern "C" int GetCudaClockRate(int iDevice, int* piClockRate, int* piMemRate);
27 |
28 | extern "C" void CudaSinogramHost(RECONST_INFO* ri, int idev, bool bReport);
29 |
30 | //CUDA
31 | extern "C" void CudaDeconv(int ixdim, int iIntpDim, int ndim, float center,
32 | float* d_filt, short* d_strip, int* d_igp, float2* d_p, cufftHandle* fftplan);
33 | extern "C" void CudaBackProjStream(int ixdimp, float center, int iCenterOffset, int iIntpDim, double theta,
34 | int* d_ifp, int* d_igp, cudaStream_t stream);
35 | extern "C" void CudaSinoPx2igpStream(int ixdimp, int* d_igp, float* d_px, cudaStream_t stream);
36 | //extern "C" void CudaBackProj(int ixdim, int iIntpDim, float center, int iCenterOffset, double theta, int* d_ifp, int* d_igp);
37 | //extern "C" void CudaBackProj2(int ixdim, int iIntpDim, float center, int iSinoDimX, int iSinoDimY, int* d_ifp, int* d_igp, float* d_fcos, float* d_fsin);
38 | //extern "C" void CudaBackProj3(int ixdim, int iIntpDim, float center, int iStartSino, int iLenSinogr, int iStepSino, float* pfdeg, float ftilt, int* d_ifp, int* d_igp);
39 | //extern "C" void CudaSinoPx2igp(int ndim, int ixdimp, int igpdimx, int igpdimy, int* d_igp, float* d_px);
40 | extern "C" bool DBProjDlgCtrl(RECONST_INFO* ri, int iProgStep, int iSino, int* pCurrStep);
41 |
42 | extern "C" void CudaSinogram(short* d_Strip, int ixmul, float t0);
43 |
44 | extern "C" void CudaLsqfitMemAlloc(short** d_ppRefPixel, short** d_ppQryPixel,
45 | int* pMaxRefPixel, int* pMaxQryPixel,
46 | short** ppRefPixel, short** ppQryPixel, int nRefFiles, int nQryFiles, int ixref,
47 | unsigned __int64** d_result);
48 | extern "C" void CudaLsqfitMemFree(short** d_ppRefPixel, short** d_ppQryPixel, int nRefFiles, int nQryFiles,
49 | unsigned __int64* d_result);
50 | extern "C" void CudaLsqfitHost(short* d_ref, short* d_qry, int ixref, int iyref, int ixqry, int iyqry,
51 | int ix, int iy, unsigned __int64* ilsq, unsigned __int64* nlsq,
52 | unsigned __int64* d_result, unsigned __int64* h_result);
53 | extern "C"
54 | void CudaLsqfit(short* d_ref, short* d_qry, int ixref, int iyref, int ixqry, int iyqry,
55 | int ix, int iy, unsigned __int64* d_result);
56 |
57 |
58 | extern "C" cudaError_t CUDA_MALLOC_HOST_INT(int** ptr, size_t size);//190710
59 | extern "C" cudaError_t CUDA_FREE_HOST(void* ptr);
60 |
61 | //struct SCmplx {
62 | // float re;
63 | // float im;
64 | //};
65 | #endif //_CUDARECONST_H_
66 |
--------------------------------------------------------------------------------
/source/cudaReconstDummy.cpp:
--------------------------------------------------------------------------------
1 | #include "stdafx.h"
2 | #include "general.h"
3 |
4 | extern "C" int GetCudaDeviceCount() {
5 | return 0;
6 | }
7 |
8 | extern "C" TErr CudaReconstMemAlloc(RECONST_INFO* ri, int idev) {
9 | return 0;
10 | }
11 |
12 | extern "C" void CudaReconstMemFree(RECONST_INFO* ri) {
13 | }
14 | extern "C" void CudaReconstResourceFree(RECONST_INFO* ri, bool bCudaDeviceReset) {}//190710
15 |
16 | extern "C" void CudaReconstHostFFT(RECONST_INFO* ri, int idev, bool bReport) {
17 | }
18 |
19 | extern "C" void CudaSinogramHost(RECONST_INFO* ri, int idev, bool bReport) {
20 | }
21 |
22 | extern "C" void CudaReconstHost(RECONST_INFO* ri, int idev, bool bReport, bool bEnStream) {
23 | }
24 |
25 | extern "C" void CudaLsqfitMemAlloc(short** d_ppRefPixel, short** d_ppQryPixel,
26 | int* pMaxRefPixel, int* pMaxQryPixel,
27 | short** ppRefPixel, short** ppQryPixel, int nRefFiles, int nQryFiles, int ixref,
28 | unsigned __int64** d_result) {
29 | }
30 | extern "C" void CudaLsqfitMemFree(short** d_ppRefPixel, short** d_ppQryPixel, int nRefFiles, int nQryFiles,
31 | unsigned __int64* d_result) {
32 | }
33 | extern "C" void CudaLsqfitHost(short* d_ref, short* d_qry, int ixref, int iyref, int ixqry, int iyqry,
34 | int ix, int iy, unsigned __int64* ilsq, unsigned __int64* nlsq,
35 | unsigned __int64* d_result, unsigned __int64* h_result) {
36 | }
37 |
38 | int blocksize = CUDA_BLOCKSIZE;
39 |
40 | extern "C" int GetCudaMaxThreadsPerBlock() {
41 | return CUDA_BLOCKSIZE;
42 | }
43 |
44 | extern "C" int GetCudaWarpSize() {
45 | return CUDA_WARPSIZE;
46 | }
47 |
48 | #define CUDA_ERROR_DEVICE_GETPROPERTY 0x00080000
49 |
50 | extern "C" int GetCudaDeviceName(int iDevice, char* pcName, int iszcName) {//181226
51 | return CUDA_ERROR_DEVICE_GETPROPERTY;
52 | }
53 |
54 | extern "C" int GetCudaDeviceComputingCapability(int iDevice, int* piMajor, int* piMinor) {//181226
55 | return CUDA_ERROR_DEVICE_GETPROPERTY;
56 | }
57 | extern "C" int GetCudaNumberOfCores(int iDevice, int* piCores, int* piProcessors) {
58 | return CUDA_ERROR_DEVICE_GETPROPERTY;
59 | }
60 |
61 | extern "C" int GetCudaClockRate(int iDevice, int* piClockRate) {
62 | return CUDA_ERROR_DEVICE_GETPROPERTY;
63 | }
64 |
65 | //extern "C" cudaError_t cudaFreeHost(void* ptr) { return cudaSuccess; }//190108
66 |
67 | //extern "C" cudaError_t cudaHostAlloc(void** ptr, size_t size, unsigned int flags) { return cudaSuccess; }//190108
68 |
69 | //extern "C" cudaError_t cudaMallocHost(int** ptr, size_t size) { return cudaSuccess; }//190110
70 |
71 | //extern "C" cudaError_t cudaStreamDestroy(cudaStream_t stream) { return cudaSuccess; }//190707
72 |
73 | //extern "C" cudaError_t cudaSetDevice(int device) { return cudaSuccess; };//190710
74 | //extern "C" cudaError_t cudaDeviceSynchronize(void) { return cudaSuccess; };
75 | //extern "C" cudaError_t cudaDeviceReset(void) { return cudaSuccess; };
76 |
77 | extern "C" cudaError_t CUDA_MALLOC_HOST_INT(int** ptr, size_t size) { return cudaSuccess; }//190710
78 | extern "C" cudaError_t CUDA_FREE_HOST(void* ptr) { return cudaSuccess; }//190710
79 |
--------------------------------------------------------------------------------
/source/cxyz.cpp:
--------------------------------------------------------------------------------
1 | /* cxyz.cpp v0.01 9/20/1998
2 | ALL RIGHTS RESERVED. RYUTA MIZUTANI.
3 | Goal: CXyz class body.
4 | */
5 |
6 | #include "stdafx.h"
7 | /// added for precompiled header definition
8 |
9 | #if !defined( _CXYZ_CPP_ )
10 | #define _CXYZ_CPP_
11 | #include
12 | //#include "stdtypdf.h"
13 | #include "cxyz.h"
14 |
15 | CXyz::CXyz(float coor[]) {
16 | x = coor[0];
17 | y = coor[1];
18 | z = coor[2];
19 | }
20 | CXyz::CXyz(TReal argx, TReal argy, TReal argz) {
21 | x = argx; y = argy; z = argz;
22 | }
23 | CXyz::CXyz() {
24 | x = COORD_DISABLED;
25 | y = COORD_DISABLED;
26 | z = COORD_DISABLED;
27 | }
28 | CXyz::~CXyz() {
29 | // no operation.
30 | }
31 | void CXyz::Set(TReal arg[]) {
32 | x = arg[0]; y = arg[1]; z = arg[2]; return; }
33 | void CXyz::Reset() {
34 | x = 0.0;
35 | y = 0.0;
36 | z = 0.0;
37 | }
38 | TReal CXyz::Length() { // nagasa
39 | return sqrt( x * x + y * y + z * z );
40 | }
41 | TReal CXyz::Length2() { // nagasa
42 | return ( x * x + y * y + z * z );
43 | }
44 | void CXyz::UnitLength() {
45 | TReal len;
46 | if ((len = sqrt( x * x + y * y + z * z )) == 0.) return;
47 | x /= len; y /= len; z /= len; return;
48 | }
49 |
50 | //150222
51 | TReal CXyz::Curvature(int nCrd) {
52 | double dCurv = 0.; int nCurv = 0;
53 | for (int j=0; j 2) return nCurv/dCurv;
63 | return -1;
64 | }
65 |
66 | CXyz CXyz::operator +(CXyz a) {
67 | return CXyz(x+a.x, y+a.y, z+a.z);
68 | }
69 | CXyz CXyz::operator +=(CXyz a) {
70 | x += a.x; y += a.y; z += a.z;
71 | return CXyz(x, y, z);
72 | }
73 | CXyz CXyz::operator -(CXyz a) {
74 | return CXyz(x-a.x, y-a.y, z-a.z);
75 | }
76 | CXyz CXyz::X(TReal t) const{
77 | return CXyz(t * x, t * y, t * z);
78 | }
79 | TReal CXyz::X(CXyz t) {
80 | return (t.x * x + t.y * y + t.z * z);
81 | }
82 | CXyz CXyz::operator *(CXyz a) { // gai-seki
83 | return CXyz( y * a.z - z * a.y,
84 | z * a.x - x * a.z,
85 | x * a.y - y * a.x );
86 | }
87 | bool CXyz::operator ==(CXyz a) {
88 | return ((x == a.x)&&(y == a.y)&&(z == a.z));
89 | }
90 | bool CXyz::operator !=(CXyz a) {
91 | return ((x != a.x)||(y != a.y)||(z != a.z));
92 | }
93 | /*inline TReal CXyz::operator *(CXyz a) { // nai-seki
94 | return x * a.x + y * a.y + z * a.z;
95 | }
96 | inline TReal CXyz::operator |(CXyz a) { // distance
97 | TReal dx = x - a.x;
98 | TReal dy = y - a.y;
99 | TReal dz = z - a.z;
100 | return sqrt( dx * dx + dy * dy + dz * dz );
101 | }
102 | inline TReal CXyz::operator ^(CXyz a) { // angle
103 | return acos( (x * a.x + y * a.y + z * a.z) /
104 | sqrt( x * x + y * y + z * z ) /
105 | sqrt( a.x * a.x + a.y * a.y + a.z * a.z )
106 | );
107 | }*/
108 |
109 | #endif // _CXYZ_CPP_
110 |
--------------------------------------------------------------------------------
/source/cxyz.h:
--------------------------------------------------------------------------------
1 | /* cxyz.h v0.01 10/18/2015
2 | ALL RIGHTS RESERVED. RYUTA MIZUTANI.
3 | Subdevided from structure.h (v0.01 since 9/5/1998)
4 | */
5 |
6 | #if !defined( _CXYZ_H_ )
7 | #define _CXYZ_H_
8 |
9 | #define COORD_DISABLED 9999.999
10 | #include "general.h"
11 |
12 | class CXyz {
13 | public:
14 | CXyz( float coor[] ); // coor[3] --> x,y,z
15 | CXyz(TReal argx, TReal argy, TReal argz);
16 | CXyz();
17 | ~CXyz();
18 | void Set(TReal arg[]); // arg[3] --> x,y,z
19 | void Reset();
20 | TReal Length(); // nagasa
21 | TReal Length2(); // nagasa^2
22 | void UnitLength();
23 | TReal Curvature(int nCrd);
24 | CXyz operator +(CXyz a);
25 | CXyz operator -(CXyz a);
26 | CXyz operator +=(CXyz a);
27 | CXyz X(TReal t) const;
28 | TReal X(CXyz t); // nai-seki
29 | CXyz operator *(CXyz a); // gai-seki
30 | bool operator ==(CXyz a);
31 | bool operator !=(CXyz a);
32 | //private:
33 | TReal x, y, z;
34 | };
35 |
36 | #endif // _CXYZ_H_
37 |
--------------------------------------------------------------------------------
/source/gazo.aps:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/gazo.aps
--------------------------------------------------------------------------------
/source/gazo.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/gazo.cpp
--------------------------------------------------------------------------------
/source/gazo.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/gazo.h
--------------------------------------------------------------------------------
/source/gazo.rc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/gazo.rc
--------------------------------------------------------------------------------
/source/gazo.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | VisualStudioVersion = 15.0.28307.168
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gazo", "gazo.vcxproj", "{69E97353-E324-499E-9DDC-AB252A7BB6A5}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | CUDA_Release|Win32 = CUDA_Release|Win32
11 | CUDA_Release|x64 = CUDA_Release|x64
12 | CUDAFFT_Release|Win32 = CUDAFFT_Release|Win32
13 | CUDAFFT_Release|x64 = CUDAFFT_Release|x64
14 | Debug|Win32 = Debug|Win32
15 | Debug|x64 = Debug|x64
16 | OpenCL_Release|Win32 = OpenCL_Release|Win32
17 | OpenCL_Release|x64 = OpenCL_Release|x64
18 | Release|Win32 = Release|Win32
19 | Release|x64 = Release|x64
20 | EndGlobalSection
21 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
22 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.CUDA_Release|Win32.ActiveCfg = CUDA_Release|x64
23 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.CUDA_Release|x64.ActiveCfg = CUDA_Release|x64
24 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.CUDA_Release|x64.Build.0 = CUDA_Release|x64
25 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.CUDAFFT_Release|Win32.ActiveCfg = CUDAFFT_Release|x64
26 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.CUDAFFT_Release|x64.ActiveCfg = CUDAFFT_Release|x64
27 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.CUDAFFT_Release|x64.Build.0 = CUDAFFT_Release|x64
28 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.Debug|Win32.ActiveCfg = Debug|Win32
29 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.Debug|Win32.Build.0 = Debug|Win32
30 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.Debug|x64.ActiveCfg = Debug|x64
31 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.Debug|x64.Build.0 = Debug|x64
32 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.OpenCL_Release|Win32.ActiveCfg = OpenCL_Release|Win32
33 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.OpenCL_Release|Win32.Build.0 = OpenCL_Release|Win32
34 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.OpenCL_Release|x64.ActiveCfg = OpenCL_Release|x64
35 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.OpenCL_Release|x64.Build.0 = OpenCL_Release|x64
36 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.Release|Win32.ActiveCfg = Release|Win32
37 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.Release|Win32.Build.0 = Release|Win32
38 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.Release|x64.ActiveCfg = Release|x64
39 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.Release|x64.Build.0 = Release|x64
40 | EndGlobalSection
41 | GlobalSection(SolutionProperties) = preSolution
42 | HideSolutionNode = FALSE
43 | EndGlobalSection
44 | GlobalSection(ExtensibilityGlobals) = postSolution
45 | SolutionGuid = {F7969A68-B366-42A4-8EBD-3A85DF3623DE}
46 | EndGlobalSection
47 | EndGlobal
48 |
--------------------------------------------------------------------------------
/source/gazo.suo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/gazo.suo
--------------------------------------------------------------------------------
/source/gazo.vcxproj.filters:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {91ed83c2-fdcb-413e-af15-a4194c1c2da1}
6 | cpp;c;cxx;rc;def;r;odl;idl;hpj;bat
7 |
8 |
9 | {c380a3d8-6739-4092-aadd-2b113bb02388}
10 | h;hpp;hxx;hm;inl
11 |
12 |
13 | {79b08065-8cda-4470-bdfc-06b9cdf306a4}
14 | ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe
15 |
16 |
17 |
18 |
19 | Source Files
20 |
21 |
22 | Source Files
23 |
24 |
25 | Source Files
26 |
27 |
28 | Source Files
29 |
30 |
31 | Source Files
32 |
33 |
34 | Source Files
35 |
36 |
37 | Source Files
38 |
39 |
40 | Source Files
41 |
42 |
43 | Source Files
44 |
45 |
46 | Source Files
47 |
48 |
49 | Source Files
50 |
51 |
52 | Source Files
53 |
54 |
55 | Source Files
56 |
57 |
58 | Source Files
59 |
60 |
61 | Source Files
62 |
63 |
64 | Source Files
65 |
66 |
67 | Source Files
68 |
69 |
70 | Source Files
71 |
72 |
73 | Source Files
74 |
75 |
76 | Source Files
77 |
78 |
79 | Source Files
80 |
81 |
82 | Source Files
83 |
84 |
85 | Source Files
86 |
87 |
88 | Source Files
89 |
90 |
91 | Source Files
92 |
93 |
94 | Source Files
95 |
96 |
97 | Source Files
98 |
99 |
100 | Source Files
101 |
102 |
103 | Source Files
104 |
105 |
106 | Source Files
107 |
108 |
109 | Source Files
110 |
111 |
112 | Source Files
113 |
114 |
115 | Source Files
116 |
117 |
118 |
119 |
120 | Resource Files
121 |
122 |
123 | Resource Files
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 | Source Files
132 |
133 |
134 |
135 |
136 | Source Files
137 |
138 |
139 |
140 |
141 | Header Files
142 |
143 |
144 | Header Files
145 |
146 |
147 | Header Files
148 |
149 |
150 | Header Files
151 |
152 |
153 | Header Files
154 |
155 |
156 | Header Files
157 |
158 |
159 | Header Files
160 |
161 |
162 | Header Files
163 |
164 |
165 | Header Files
166 |
167 |
168 | Header Files
169 |
170 |
171 | Header Files
172 |
173 |
174 | Header Files
175 |
176 |
177 | Header Files
178 |
179 |
180 | Header Files
181 |
182 |
183 | Header Files
184 |
185 |
186 | Header Files
187 |
188 |
189 | Header Files
190 |
191 |
192 | Header Files
193 |
194 |
195 | Header Files
196 |
197 |
198 | Header Files
199 |
200 |
201 | Header Files
202 |
203 |
204 | Header Files
205 |
206 |
207 | Header Files
208 |
209 |
210 | Header Files
211 |
212 |
213 | Header Files
214 |
215 |
216 | Header Files
217 |
218 |
219 | Header Files
220 |
221 |
222 | Header Files
223 |
224 |
225 | Header Files
226 |
227 |
228 | Header Files
229 |
230 |
231 | Header Files
232 |
233 |
234 | Header Files
235 |
236 |
237 | Header Files
238 |
239 |
240 | Header Files
241 |
242 |
243 |
244 |
245 | Resource Files
246 |
247 |
248 | Resource Files
249 |
250 |
251 | Resource Files
252 |
253 |
254 |
255 |
256 | Source Files
257 |
258 |
259 |
260 |
261 |
262 |
--------------------------------------------------------------------------------
/source/gazo.vcxproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | gazo.rc
5 |
6 |
--------------------------------------------------------------------------------
/source/gazoDoc.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/gazoDoc.cpp
--------------------------------------------------------------------------------
/source/gazoDoc.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/gazoDoc.h
--------------------------------------------------------------------------------
/source/gazoVS2008.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 10.00
3 | # Visual Studio 2008
4 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gazo", "gazo.vcproj", "{69E97353-E324-499E-9DDC-AB252A7BB6A5}"
5 | EndProject
6 | Global
7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
8 | CUDA_Release|Win32 = CUDA_Release|Win32
9 | CUDA_Release|x64 = CUDA_Release|x64
10 | CUDAemu_Release|Win32 = CUDAemu_Release|Win32
11 | CUDAemu_Release|x64 = CUDAemu_Release|x64
12 | Debug|Win32 = Debug|Win32
13 | Debug|x64 = Debug|x64
14 | OpenCL_Release|Win32 = OpenCL_Release|Win32
15 | OpenCL_Release|x64 = OpenCL_Release|x64
16 | Release|Win32 = Release|Win32
17 | Release|x64 = Release|x64
18 | EndGlobalSection
19 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
20 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.CUDA_Release|Win32.ActiveCfg = CUDA_Release|Win32
21 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.CUDA_Release|Win32.Build.0 = CUDA_Release|Win32
22 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.CUDA_Release|x64.ActiveCfg = CUDA_Release|x64
23 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.CUDA_Release|x64.Build.0 = CUDA_Release|x64
24 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.CUDAemu_Release|Win32.ActiveCfg = CUDAemu_Release|Win32
25 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.CUDAemu_Release|Win32.Build.0 = CUDAemu_Release|Win32
26 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.CUDAemu_Release|x64.ActiveCfg = CUDAemu_Release|x64
27 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.CUDAemu_Release|x64.Build.0 = CUDAemu_Release|x64
28 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.Debug|Win32.ActiveCfg = Debug|Win32
29 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.Debug|Win32.Build.0 = Debug|Win32
30 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.Debug|x64.ActiveCfg = Debug|x64
31 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.Debug|x64.Build.0 = Debug|x64
32 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.OpenCL_Release|Win32.ActiveCfg = OpenCL_Release|Win32
33 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.OpenCL_Release|Win32.Build.0 = OpenCL_Release|Win32
34 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.OpenCL_Release|x64.ActiveCfg = OpenCL_Release|x64
35 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.OpenCL_Release|x64.Build.0 = OpenCL_Release|x64
36 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.Release|Win32.ActiveCfg = Release|Win32
37 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.Release|Win32.Build.0 = Release|Win32
38 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.Release|x64.ActiveCfg = Release|x64
39 | {69E97353-E324-499E-9DDC-AB252A7BB6A5}.Release|x64.Build.0 = Release|x64
40 | EndGlobalSection
41 | GlobalSection(SolutionProperties) = preSolution
42 | HideSolutionNode = FALSE
43 | EndGlobalSection
44 | EndGlobal
45 |
--------------------------------------------------------------------------------
/source/gazoView.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/gazoView.cpp
--------------------------------------------------------------------------------
/source/gazoView.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/gazoView.h
--------------------------------------------------------------------------------
/source/general.h:
--------------------------------------------------------------------------------
1 | /* general.h v1.00 7/26/2016
2 | * ALL RIGHTS RESERVED. RYUTA MIZUTANI.
3 | * Moved from Stdafx.h
4 | */
5 |
6 | #if !defined( _GENERAL_H_ )
7 | #define _GENERAL_H_
8 |
9 |
10 | //manually
11 | #include // CString, LPCTSTR
12 | #include "reconstinfo.h"
13 | #include "constants.h"
14 |
15 | typedef int TErr;// not 0 on error.
16 | typedef double TReal;
17 | typedef float TCmpElmnt;
18 |
19 | class CGazoDoc;
20 | class CHDF5;//160521
21 |
22 | //HIS format
23 | #define HIS_Header_Size 64
24 | struct HIS_Header
25 | {
26 | char head[2]; /*0-1*/
27 | short comment_length; /*2-3*/
28 | short width; /*4-5*/
29 | short height; /*6-7*/
30 | short x_offset; /*8-9*/
31 | short y_offset; /*10-11*/
32 | short type; /*12-13*/
33 | unsigned short n_image1; /*14-17*/
34 | unsigned short n_image2; /*14-17*/
35 | short reserve1; /*18-19*/
36 | short reserve2; /*20-21*/
37 | double time_stamp; /*22-29*/
38 | long maker; /*30-33*/
39 | char reserved[30]; /*34-63*/
40 | char *comment;
41 | };
42 | typedef struct HIS_Header HISHeader;
43 |
44 | #define READTIF16bit 1
45 | #define READTIF8bit 2
46 |
47 | //general functions
48 | void ProcessMessage();
49 | void SleepSecond(TReal sec = 1.0);
50 | DWORD GetProcessorCoreCount();
51 | void ConvertToLittleEndian(void* param, rsize_t bytes, char* carg);
52 | COLORREF HSBtoRGB(double H, double S, double B);
53 | TErr ReadBmp(CString filePath, int** buffer, int* pMaxBuffer, int* prevH, int* prevW,
54 | char* paletteBlue = NULL, char* paletteGreen = NULL, char* paletteRed = NULL, int maxPalette = 0);
55 | TErr WriteBmpTrueColor(CString filePath, COLORREF* buffer, int height, int width);
56 | TErr ReadTif(CFile* fp, int** buffer, int* pMaxBuffer, int* prevH, int* prevW,
57 | float* pixDiv = NULL, float* pixBase = NULL, float* fCenter = NULL, int* iFilter = NULL, float* fPixelWidth = NULL,
58 | int* nSino = NULL);
59 | TErr ReadTifStrip(CFile* fp, short* sbuffer, int iLine, int iWidth, int iMultiplex, int* piFlag);
60 | TErr WriteTifMonochrome(CFile* fp, unsigned char* buffer, int height, int width,
61 | CString sImageDesc = "tif image", CString sArtist = "SP-uCT, gazoView");
62 | TErr WriteTifMonochrome16(CFile* fp, int* buffer, int height, int width,
63 | CString sImageDesc = "tif image", CString sArtist = "SP-uCT, gazoView");
64 | TErr ReadITEX(CFile* fp, int** buffer, int* pMaxBuffer, int* iHeight, int* iWidth, CString* pComment = NULL);
65 | TErr ReadITEXstrip(FILE* fp, short* buffer, int iLine, int iWidth, int iMultiplex = 1);
66 | TErr WriteITEX(CFile* fp, int* buffer, int iHeight, int iWidth, CString comment, int iXoffset = 0, int iYoffset = 0, int iFileType = 2);
67 | TErr Read_hishead(CFile* fimg, HISHeader* his, CString* pComment = NULL);
68 | TErr ReadHIS(CFile* fp, int** buffer, int* pMaxBuffer, int* iHeight, int* iWidth, HISHeader* his, CString* pComment = NULL);
69 | TErr SkipHISframe(CFile* fp, int nframe);
70 | TErr SkipHISframeFast(CFile* fp, int nframe);
71 | TErr ReadHISstrip(CFile* fp, unsigned char** uctmp, int* pMaxTmp, short* sbuffer,
72 | int iLine, int iWidth, int iMultiplex, HISHeader* his);
73 | TErr ReadHDF5Frame(CFile* fp, int** buffer, int* pMaxBuffer, int* iHeight, int* iWidth, CHDF5* pHDF5,
74 | unsigned int uiFrame = 0, int iDataEntry = -1, CString* pComment = NULL);
75 | TErr ReadHDF5Theta(CFile* fp, CHDF5* pHDF5, float* pfDeg, DWORD* pdwFrame, CString* pComment = NULL);
76 | TErr GetFileList(CString sFilter, CString* psFileList);
77 |
78 | //math
79 | TErr InvMatrix(TReal* a, int n, TReal eps);
80 | TErr ProjTransformGetCoeff(TReal* prPoint, TReal* prCoeff);
81 |
82 | //thread functions
83 | unsigned __stdcall DeconvBackProjThread(void* pArg);
84 |
85 | unsigned __stdcall GenerateSinogramThread(void* pArg);
86 |
87 | unsigned __stdcall RefracCorrThread(void* pArg);
88 |
89 | unsigned __stdcall LsqfitThread(void* pArg);
90 |
91 | #ifdef _WIN64
92 | //void Projection(unsigned _int64 pParam);
93 | //unsigned _int64 ProjectionAsm(unsigned _int64);
94 | #endif //_WIN64
95 |
96 | //misc functions
97 | int StringCompare( const void *arg1, const void *arg2 );
98 |
99 |
100 |
101 | #endif // _GENERAL_H_
102 |
--------------------------------------------------------------------------------
/source/projx32.asm:
--------------------------------------------------------------------------------
1 | .686
2 | .xmm
3 | .model flat, c
4 |
5 | DATA segment align(32)
6 | F76543210 real4 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0
7 | F88888888 real4 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0
8 | F00000000 real4 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
9 | F3210 real4 0.0, 1.0, 2.0, 3.0
10 | DATA ends
11 |
12 | .code
13 |
14 | projx32 PROC param:dword
15 | ; for (int iy=iy0; iy= ixdimpg) continue;
22 | ; ifp[ifpidx + ix] += ipgp[ix0];
23 | ; }
24 | ; }
25 |
26 | ;local valiables
27 | local ixdimp :dword
28 | local ixdimp4 :dword
29 | local iy0 :dword
30 | local iy1 :dword
31 | ; local pmxcsr :dword
32 | ; local smxcsr :dword
33 |
34 | ;store registers
35 | push esi
36 | push edi
37 | push ebx
38 | push ebp
39 | ; stmxcsr smxcsr
40 |
41 | ;get pointer to args
42 | mov esi, param ;arg #1
43 |
44 | ;load valiables and constants
45 | ; mov ixdimpg, [esi + 12]
46 | mov eax, [esi + 16]
47 | mov ixdimp, eax
48 | ; mov eax, ixdimp
49 | shl eax, 2
50 | mov ixdimp4, eax
51 | ; mov ifp, [esi + 20]
52 | ; mov igp, [esi + 24]
53 | mov eax, [esi + 32] ;iy0
54 | mov iy0, eax
55 | mov eax, [esi + 36] ;iy1
56 | mov iy1, eax
57 |
58 | ;sse rounding mode RC=00B (MXCSR[14:13])
59 | ; stmxcsr pmxcsr
60 | ; and pmxcsr, 0FFFF9FFFh
61 | ; or pmxcsr, 000000000h
62 | ; ldmxcsr pmxcsr
63 |
64 | ;jump to AVX routine
65 | mov eax, [esi + 28] ; AVX flag
66 | and eax, 000000001h
67 | jnz USEAVX
68 |
69 | ;SSE
70 | mov eax, [esi] ; &fcos
71 | movss xmm0, real4 ptr [eax]
72 | shufps xmm0, xmm0, 0
73 |
74 | mov eax, [esi + 4]; &fsin
75 | movss xmm1, real4 ptr [eax]
76 | shufps xmm1, xmm1, 0
77 |
78 | mov eax, [esi + 8]; &foffset
79 | movss xmm7, real4 ptr [eax]
80 | shufps xmm7, xmm7, 0
81 |
82 | movaps xmm6, F3210
83 |
84 | mov eax, iy1 ; iy1
85 | dec eax
86 | mov ecx, ixdimp
87 | imul ecx
88 | shl eax, 2 ; ixy = ixdimp * (iy1 - 1) * 4
89 | add eax, [esi + 20]; ixy += ifp
90 | mov edi, eax
91 |
92 | mov ecx, [esi + 12]; ixdimpg
93 | mov esi, [esi + 24]; igp
94 |
95 | mov edx, iy1; iy<==iy1
96 | dec edx
97 | mov eax, 0
98 | LOOPY:
99 | mov ebx, ixdimp ; ix<==ixdimp
100 | dec ebx
101 | cvtsi2ss xmm3, edx ; xmm3<==iy
102 | shufps xmm3, xmm3, 0 ; xmm3<==iy, iy, iy, iy
103 | movaps xmm5, xmm1 ; xmm5<==fsin, fsin, fsin, fsin
104 | mulps xmm5, xmm3 ; iy * fsin for each float
105 | addps xmm5, xmm7 ; + foffset for each float
106 | LOOPX:
107 | cvtsi2ss xmm2, ebx ; xmm2<==ix
108 | shufps xmm2, xmm2, 0 ; xmm2<==ix, ix, ix, ix
109 | subps xmm2, xmm6 ; xmm2<==ix-3, ix-2, ix-2, ix
110 | movaps xmm4, xmm0 ; xmm4<==fcos, fcos, fcos, fcos
111 | mulps xmm4, xmm2 ; (ix-n) * fcos
112 | addps xmm4, xmm5 ; (ix-n) * fcos + foffset
113 | cvttps2dq xmm4, xmm4 ; xmm4 float*4 to integer32*4
114 | movd eax, xmm4 ; lower 4 bytes to eax
115 | ; pextrd eax, xmm4, 0 ; SSE4.1
116 | cmp eax, ecx ; ix<=>ixdimpg
117 | jae LOOPXSKIP1 ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
118 | mov eax, [esi + eax * 4] ; eax<==igp[ix * DBPT_GINTP]
119 | add [edi + ebx * 4], eax ; ifp[ix] += eax
120 | LOOPXSKIP1:
121 | dec ebx ; ix--
122 | jl LOOPYEND ; ix < 0
123 | psrldq xmm4, 4 ; shift right by 4 bytes (integer32)
124 | movd eax, xmm4
125 | ; pextrd eax, xmm4, 1 ; SSE4.1
126 | cmp eax, ecx; ixdimpg
127 | jae LOOPXSKIP2 ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
128 | mov eax, [esi + eax * 4]
129 | add [edi + ebx * 4], eax
130 | LOOPXSKIP2:
131 | dec ebx ; ix--
132 | jl LOOPYEND ; ix < 0
133 | psrldq xmm4, 4
134 | movd eax, xmm4
135 | ; pextrd eax, xmm4, 2 ; SSE4.1
136 | cmp eax, ecx; ixdimpg
137 | jae LOOPXSKIP3 ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
138 | mov eax, [esi + eax * 4]
139 | add [edi + ebx * 4], eax
140 | LOOPXSKIP3:
141 | dec ebx ; ix--
142 | jl LOOPYEND ; ix < 0
143 | psrldq xmm4, 4
144 | movd eax, xmm4
145 | ; pextrd eax, xmm4, 3 ; SSE4.1
146 | cmp eax, ecx; ixdimpg
147 | jae LOOPXEND ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
148 | mov eax, [esi + eax * 4]
149 | add [edi + ebx * 4], eax
150 | LOOPXEND:
151 | dec ebx
152 | jge LOOPX ; ix >= 0
153 | LOOPYEND:
154 | sub edi, ixdimp4
155 | dec edx
156 | cmp edx, iy0
157 | jge LOOPY ; iy >= iy0
158 |
159 | ; ldmxcsr smxcsr
160 | pop ebp
161 | pop ebx
162 | pop edi
163 | pop esi
164 | ret
165 |
166 | USEAVX:
167 | ;load valiables
168 | mov eax, iy0; iy = iy0
169 | mov ecx, ixdimp; ix = ixdimp
170 | imul ecx
171 | shl eax, 2 ; ixy = ixdimp * iy0 * 4
172 | add eax, [esi + 20] ; ixy += ifp
173 | mov edi, eax
174 |
175 | mov eax, [esi + 12] ; ixdimpg
176 | vcvtsi2ss xmm6, xmm6, eax ; xmm6<==ixdimpg
177 | vbroadcastss ymm6, xmm6 ; ymm6<==ixdimpg, ixdimpg, ixdimpg, ixdimpg
178 | vcvtsi2ss xmm1, xmm1, ixdimp ; xmm1<==ixdimp
179 | vbroadcastss ymm1, xmm1 ; ymm1<==ixdimp, ixdimp, ixdimp, ixdimp
180 | mov eax, [esi] ; &fcos
181 | vbroadcastss ymm0, real4 ptr [eax]
182 | mov eax, [esi + 4] ; &fsin
183 | mov ecx, [esi + 8] ; &foffset
184 | ; mov edi, [esi + 20] ; ifp
185 | mov esi, [esi + 24] ; igp
186 |
187 | mov edx, iy0 ; iy<==iy0
188 | ALOOPY:
189 | mov ebx, 0 ; ix<==0
190 | vmovaps ymm2, F76543210 ; reset ix
191 | vcvtsi2ss xmm3, xmm3, edx ; xmm3<==iy
192 | vbroadcastss ymm3, xmm3 ; xmm3<==iy, iy, iy, iy
193 | vbroadcastss ymm5, real4 ptr [eax]
194 | vmulps ymm5, ymm5, ymm3 ; iy * fsin for each float
195 | vbroadcastss ymm7, real4 ptr [ecx] ; ymm7<==foffset
196 | vaddps ymm5, ymm5, ymm7 ; ymm5<==iy * fsin + foffset
197 | ALOOPX:
198 | vmulps ymm4, ymm0, ymm2 ; (ix+n) * fcos
199 | vaddps ymm4, ymm4, ymm5 ; (ix+n) * fcos + foffset
200 | vcmpltps ymm7, ymm4, ymm6 ; ymm7[i:i]=1 if (ymm4 < ixdimpg)
201 | vcmpgeps ymm3, ymm4, F00000000 ; ymm3[i:i]=1 if (ymm4 >= 0)
202 | vpand ymm7, ymm7, ymm3
203 | vpxor ymm3, ymm3, ymm3 ; clear ymm3
204 | vcvttps2dq ymm4, ymm4 ; ymm4 float*8 to integer32*8
205 | vpgatherdd ymm3, [esi + ymm4 * 4], ymm7 ; load [esi+ymm4*4] if ymm7=1
206 | vcmpltps ymm7, ymm2, ymm1 ; ymm7[i:i]=1 if (ymm2 < ixdimp)
207 | vpmaskmovd ymm4, ymm7, [edi + ebx * 4]
208 | vpaddd ymm4, ymm3, ymm4
209 | vpmaskmovd [edi + ebx * 4], ymm7, ymm4
210 |
211 | vaddps ymm2, ymm2, F88888888 ; ymm2 + 8.0
212 | add ebx, 8
213 | cmp ebx, ixdimp
214 | jnae ALOOPX ; ix < ixdimp
215 | ALOOPYEND2:
216 | add edi, ixdimp4 ; +ixdimp*4
217 | inc edx ; iy++
218 | cmp edx, iy1
219 | jnae ALOOPY ; iy < iy1
220 |
221 | ; ldmxcsr smxcsr
222 | pop ebp
223 | pop ebx
224 | pop edi
225 | pop esi
226 | ret
227 |
228 | projx32 ENDP
229 |
230 | end
231 |
--------------------------------------------------------------------------------
/source/projx32VS2008.asm:
--------------------------------------------------------------------------------
1 | .686
2 | .xmm
3 | .model flat, c
4 |
5 | DATA segment align(32)
6 | F76543210 real4 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0
7 | F88888888 real4 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0
8 | F00000000 real4 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
9 | F3210 real4 0.0, 1.0, 2.0, 3.0
10 | DATA ends
11 |
12 | .code
13 |
14 | projx32 PROC param:dword
15 | ; for (int iy=iy0; iy= ixdimpg) continue;
22 | ; ifp[ifpidx + ix] += ipgp[ix0];
23 | ; }
24 | ; }
25 |
26 | ;local valiables
27 | local ixdimp :dword
28 | local ixdimp4 :dword
29 | local iy0 :dword
30 | local iy1 :dword
31 | ; local pmxcsr :dword
32 | ; local smxcsr :dword
33 |
34 | ;store registers
35 | push esi
36 | push edi
37 | push ebx
38 | push ebp
39 | ; stmxcsr smxcsr
40 |
41 | ;get pointer to args
42 | mov esi, param ;arg #1
43 |
44 | ;load valiables and constants
45 | ; mov ixdimpg, [esi + 12]
46 | mov eax, [esi + 16]
47 | mov ixdimp, eax
48 | ; mov eax, ixdimp
49 | shl eax, 2
50 | mov ixdimp4, eax
51 | ; mov ifp, [esi + 20]
52 | ; mov igp, [esi + 24]
53 | mov eax, [esi + 32] ;iy0
54 | mov iy0, eax
55 | mov eax, [esi + 36] ;iy1
56 | mov iy1, eax
57 |
58 | ;sse rounding mode RC=00B (MXCSR[14:13])
59 | ; stmxcsr pmxcsr
60 | ; and pmxcsr, 0FFFF9FFFh
61 | ; or pmxcsr, 000000000h
62 | ; ldmxcsr pmxcsr
63 |
64 | ;jump to AVX routine
65 | ; mov eax, [esi + 28] ; AVX flag
66 | ; and eax, 000000001h
67 | ; jnz USEAVX
68 |
69 | ;SSE
70 | mov eax, [esi] ; &fcos
71 | movss xmm0, real4 ptr [eax]
72 | shufps xmm0, xmm0, 0
73 |
74 | mov eax, [esi + 4]; &fsin
75 | movss xmm1, real4 ptr [eax]
76 | shufps xmm1, xmm1, 0
77 |
78 | mov eax, [esi + 8]; &foffset
79 | movss xmm7, real4 ptr [eax]
80 | shufps xmm7, xmm7, 0
81 |
82 | movaps xmm6, F3210
83 |
84 | mov eax, iy1 ; iy1
85 | dec eax
86 | mov ecx, ixdimp
87 | imul ecx
88 | shl eax, 2 ; ixy = ixdimp * (iy1 - 1) * 4
89 | add eax, [esi + 20]; ixy += ifp
90 | mov edi, eax
91 |
92 | mov ecx, [esi + 12]; ixdimpg
93 | mov esi, [esi + 24]; igp
94 |
95 | mov edx, iy1; iy<==iy1
96 | dec edx
97 | mov eax, 0
98 | LOOPY:
99 | mov ebx, ixdimp ; ix<==ixdimp
100 | dec ebx
101 | cvtsi2ss xmm3, edx ; xmm3<==iy
102 | shufps xmm3, xmm3, 0 ; xmm3<==iy, iy, iy, iy
103 | movaps xmm5, xmm1 ; xmm5<==fsin, fsin, fsin, fsin
104 | mulps xmm5, xmm3 ; iy * fsin for each float
105 | addps xmm5, xmm7 ; + foffset for each float
106 | LOOPX:
107 | cvtsi2ss xmm2, ebx ; xmm2<==ix
108 | shufps xmm2, xmm2, 0 ; xmm2<==ix, ix, ix, ix
109 | subps xmm2, xmm6 ; xmm2<==ix-3, ix-2, ix-2, ix
110 | movaps xmm4, xmm0 ; xmm4<==fcos, fcos, fcos, fcos
111 | mulps xmm4, xmm2 ; (ix-n) * fcos
112 | addps xmm4, xmm5 ; (ix-n) * fcos + foffset
113 | cvttps2dq xmm4, xmm4 ; xmm4 float*4 to integer32*4
114 | movd eax, xmm4 ; lower 4 bytes to eax
115 | ; pextrd eax, xmm4, 0 ; SSE4.1
116 | cmp eax, ecx ; ix<=>ixdimpg
117 | jae LOOPXSKIP1 ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
118 | mov eax, [esi + eax * 4] ; eax<==igp[ix * DBPT_GINTP]
119 | add [edi + ebx * 4], eax ; ifp[ix] += eax
120 | LOOPXSKIP1:
121 | dec ebx ; ix--
122 | jl LOOPYEND ; ix < 0
123 | psrldq xmm4, 4 ; shift right by 4 bytes (integer32)
124 | movd eax, xmm4
125 | ; pextrd eax, xmm4, 1 ; SSE4.1
126 | cmp eax, ecx; ixdimpg
127 | jae LOOPXSKIP2 ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
128 | mov eax, [esi + eax * 4]
129 | add [edi + ebx * 4], eax
130 | LOOPXSKIP2:
131 | dec ebx ; ix--
132 | jl LOOPYEND ; ix < 0
133 | psrldq xmm4, 4
134 | movd eax, xmm4
135 | ; pextrd eax, xmm4, 2 ; SSE4.1
136 | cmp eax, ecx; ixdimpg
137 | jae LOOPXSKIP3 ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
138 | mov eax, [esi + eax * 4]
139 | add [edi + ebx * 4], eax
140 | LOOPXSKIP3:
141 | dec ebx ; ix--
142 | jl LOOPYEND ; ix < 0
143 | psrldq xmm4, 4
144 | movd eax, xmm4
145 | ; pextrd eax, xmm4, 3 ; SSE4.1
146 | cmp eax, ecx; ixdimpg
147 | jae LOOPXEND ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
148 | mov eax, [esi + eax * 4]
149 | add [edi + ebx * 4], eax
150 | LOOPXEND:
151 | dec ebx
152 | jge LOOPX ; ix >= 0
153 | LOOPYEND:
154 | sub edi, ixdimp4
155 | dec edx
156 | cmp edx, iy0
157 | jge LOOPY ; iy >= iy0
158 |
159 | ; ldmxcsr smxcsr
160 | pop ebp
161 | pop ebx
162 | pop edi
163 | pop esi
164 | ret
165 |
166 | projx32 ENDP
167 |
168 | end
169 |
--------------------------------------------------------------------------------
/source/projx64.asm:
--------------------------------------------------------------------------------
1 | ;ml64.exe
2 |
3 | DATA segment align(64)
4 | FZMM0_15 real4 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0
5 | FZMM16_16 real4 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0
6 | FZMM0_0 real4 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
7 | F76543210 real4 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0
8 | F88888888 real4 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0
9 | F00000000 real4 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
10 | F3210 real4 0.0, 1.0, 2.0, 3.0
11 | DATA ends
12 |
13 | .code
14 |
15 | projx64 PROC
16 | ; mov r10, rcx ; the first arg = rcx
17 | ; mov r10, rdx ; the 2nd arg = rdx
18 | ; mov rax, r10 ; rax to return result
19 |
20 | ; for (int iy=iy0; iy= ixdimpg) continue;
27 | ; ifp[ifpidx + ix] += ipgp[ix0];
28 | ; }
29 | ; }
30 |
31 | ;local valiables
32 | ; local pmxcsr :dword
33 | ; local smxcsr :dword
34 | local regXMM6 :oword
35 | local regXMM7 :oword
36 |
37 | ;store registers
38 | push rbx
39 | push rbp
40 | push rsi
41 | push rdi
42 | push r12
43 | push r13
44 | movdqu regXMM6, xmm6
45 | movdqu regXMM7, xmm7
46 |
47 | ;get pointer to args
48 | mov rsi, rcx ; arg #1
49 |
50 | ;init params
51 | ; mov ixdimpg, [rsi + 24]
52 | mov r10, [rsi + 32] ; ixdimp
53 | mov r9, r10
54 | shl r9, 2 ; r9<==ixdimp * 4
55 | ; mov ifp, [rsi + 40]
56 | ; mov igp, [rsi + 48]
57 | mov r12, [rsi + 64] ;iy0
58 | mov r13, [rsi + 72] ;iy1
59 |
60 | ;sse rounding mode RC=00B (MXCSR[14:13])
61 | ; stmxcsr smxcsr
62 | ; stmxcsr pmxcsr
63 | ; and pmxcsr, 0FFFF9FFFh
64 | ; ldmxcsr pmxcsr
65 |
66 | ;jump to AVX routine
67 | mov rax, [rsi + 56] ; AVX flag
68 | and rax, 000000002h
69 | jnz USEAVX512
70 | mov rax, [rsi + 56] ; AVX flag
71 | and rax, 000000001h
72 | jnz USEAVX
73 |
74 | ;load valiables
75 | mov rax, r13; iy = iy1
76 | dec rax
77 | mov rcx, r10; ix = ixdimp
78 | imul rcx
79 | shl rax, 2 ; ixy = ixdimp * (iy1 - 1) * 4
80 | add rax, [rsi + 40] ; ixy += ifp
81 | mov rdi, rax
82 |
83 | mov rax, [rsi] ; &fcos
84 | movss xmm0, real4 ptr [rax]
85 | shufps xmm0, xmm0, 0
86 |
87 | mov rax, [rsi + 8] ; &fsin
88 | movss xmm1, real4 ptr [rax]
89 | shufps xmm1, xmm1, 0
90 |
91 | mov rax, [rsi + 16] ; &foffset
92 | movss xmm7, real4 ptr [rax]
93 | shufps xmm7, xmm7, 0
94 |
95 | movaps xmm6, F3210
96 |
97 | ;start process
98 | mov rcx, [rsi + 24] ; ixdimpg
99 | mov rsi, [rsi + 48] ; igp
100 |
101 | mov rdx, r13 ; iy<==iy1
102 | dec rdx
103 | mov rax, 0
104 | LOOPY:
105 | mov rbx, r10 ; ix<==ixdimp
106 | dec rbx
107 | cvtsi2ss xmm3, rdx ; xmm3<==iy
108 | shufps xmm3, xmm3, 0 ; xmm3<==iy, iy, iy, iy
109 | movaps xmm5, xmm1 ; xmm5<==fsin, fsin, fsin, fsin
110 | mulps xmm5, xmm3 ; iy * fsin for each float
111 | addps xmm5, xmm7 ; + foffset for each float
112 | LOOPX:
113 | cvtsi2ss xmm2, rbx ; xmm2<==ix
114 | shufps xmm2, xmm2, 0 ; xmm2<==ix, ix, ix, ix
115 | subps xmm2, xmm6 ; xmm2<==ix-3, ix-2, ix-2, ix
116 | movaps xmm4, xmm0 ; xmm4<==fcos, fcos, fcos, fcos
117 | mulps xmm4, xmm2 ; (ix-n) * fcos
118 | addps xmm4, xmm5 ; (ix-n) * fcos + foffset
119 | cvttps2dq xmm4, xmm4 ; xmm4 float*4 to integer32*4
120 | movd eax, xmm4 ; lower 4 bytes to eax
121 | ; pextrd eax, xmm4, 0 ; SSE4.1
122 | cmp eax, ecx ; ix<=>ixdimpg
123 | jae LOOPXSKIP1 ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
124 | mov eax, [rsi + rax * 4] ; eax<==igp[ix * DBPT_GINTP]
125 | add [rdi + rbx * 4], eax ; ifp[ix] += eax
126 | LOOPXSKIP1:
127 | dec rbx ; ix--
128 | jl LOOPYEND ; ix < 0
129 | psrldq xmm4, 4 ; shift right by 4 bytes (integer32)
130 | movd eax, xmm4
131 | ; pextrd eax, xmm4, 1 ; SSE4.1
132 | cmp eax, ecx; ixdimpg
133 | jae LOOPXSKIP2 ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
134 | mov eax, [rsi + rax * 4]
135 | add [rdi + rbx * 4], eax
136 | LOOPXSKIP2:
137 | dec rbx ; ix--
138 | jl LOOPYEND ; ix < 0
139 | psrldq xmm4, 4
140 | movd eax, xmm4
141 | ; pextrd eax, xmm4, 2 ; SSE4.1
142 | cmp eax, ecx; ixdimpg
143 | jae LOOPXSKIP3 ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
144 | mov eax, [rsi + rax * 4]
145 | add [rdi + rbx * 4], eax
146 | LOOPXSKIP3:
147 | dec rbx ; ix--
148 | jl LOOPYEND ; ix < 0
149 | psrldq xmm4, 4
150 | movd eax, xmm4
151 | ; pextrd eax, xmm4, 3 ; SSE4.1
152 | cmp eax, ecx; ixdimpg
153 | jae LOOPXEND ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
154 | mov eax, [rsi + rax * 4]
155 | add [rdi + rbx * 4], eax
156 | LOOPXEND:
157 | dec rbx ; ix--
158 | jge LOOPX ; ix >= 0
159 | LOOPYEND:
160 | sub rdi, r9 ; ixdimp*4
161 | dec rdx ; iy--
162 | cmp rdx, r12
163 | jge LOOPY ; iy >= iy0
164 |
165 | jmp RTN
166 |
167 | USEAVX:
168 | ;load valiables
169 | mov rax, [rsi] ; &fcos
170 | vbroadcastss ymm0, real4 ptr [rax]
171 | mov r8, [rsi + 8] ; &fsin
172 | mov r11, [rsi + 16] ; &foffset
173 |
174 | mov rcx, [rsi + 24] ; ixdimpg
175 | vcvtsi2ss xmm6, xmm6, rcx ; xmm6<==ixdimpg
176 | vbroadcastss ymm6, xmm6 ; ymm6<==ixdimpg, ixdimpg, ixdimpg, ixdimpg
177 | vcvtsi2ss xmm1, xmm1, r10 ; xmm1<==ixdimp
178 | vbroadcastss ymm1, xmm1 ; ymm1<==ixdimp, ixdimp, ixdimp, ixdimp
179 |
180 | mov rax, r12; iy = iy0
181 | mov rcx, r10; ix = ixdimp
182 | imul rcx
183 | shl rax, 2 ; ixy = ixdimp * iy0 * 4
184 | add rax, [rsi + 40] ; ixy += ifp
185 | mov rdi, rax
186 | ; mov rdi, [rsi + 40] ; ifp
187 | mov rsi, [rsi + 48] ; igp
188 |
189 | mov rdx, r12 ; iy<==iy0
190 | ALOOPY:
191 | mov rbx, 0 ; ix<==0
192 | vmovaps ymm2, F76543210 ; reset ix
193 | vcvtsi2ss xmm3, xmm3, rdx ; xmm3<==iy
194 | vbroadcastss ymm3, xmm3 ; xmm3<==iy, iy, iy, iy
195 | vbroadcastss ymm5, real4 ptr [r8]
196 | vmulps ymm5, ymm5, ymm3 ; iy * fsin for each float
197 | vbroadcastss ymm7, real4 ptr [r11] ; ymm7<==foffset
198 | vaddps ymm5, ymm5, ymm7 ; ymm5<==iy * fsin + foffset
199 | ALOOPX:
200 | vmulps ymm4, ymm0, ymm2 ; (ix+n) * fcos
201 | vaddps ymm4, ymm4, ymm5 ; (ix+n) * fcos + foffset
202 | vcmpltps ymm7, ymm4, ymm6 ; ymm7[i:i]=1 if (ymm4 < ixdimpg)
203 | vcmpgeps ymm3, ymm4, F00000000 ; ymm3[i:i]=1 if (ymm4 >= 0)
204 | vpand ymm7, ymm7, ymm3
205 | vpxor ymm3, ymm3, ymm3 ; clear ymm3
206 | vcvttps2dq ymm4, ymm4 ; ymm4 float*8 to integer32*8
207 | vpgatherdd ymm3, [rsi + ymm4 * 4], ymm7 ; load [rsi+ymm4*4] if ymm7=1
208 | vcmpltps ymm7, ymm2, ymm1 ; ymm7[i:i]=1 if (ymm2 < ixdimp)
209 | vpmaskmovd ymm4, ymm7, [rdi + rbx * 4]
210 | vpaddd ymm4, ymm3, ymm4
211 | vpmaskmovd [rdi + rbx * 4], ymm7, ymm4
212 |
213 | vaddps ymm2, ymm2, F88888888 ; ymm2 + 8.0
214 | add rbx, 8
215 | cmp rbx, r10
216 | jnae ALOOPX ; ix < ixdimp
217 | ALOOPYEND2:
218 | add rdi, r9 ; +ixdimp*4
219 | inc rdx ; iy++
220 | cmp rdx, r13
221 | jnae ALOOPY ; iy < iy1
222 |
223 | jmp RTN
224 |
225 | USEAVX512:
226 | ;220417
227 | ;load valiables
228 | mov rax, [rsi] ; &fcos
229 | vbroadcastss zmm0, real4 ptr [rax]
230 | mov r8, [rsi + 8] ; &fsin
231 | mov r11, [rsi + 16] ; &foffset
232 |
233 | mov rcx, [rsi + 24] ; ixdimpg
234 | vcvtsi2ss xmm6, xmm6, rcx ; xmm6<==ixdimpg
235 | vbroadcastss zmm6, xmm6 ; zmm6<==ixdimpg, ixdimpg, ixdimpg, ixdimpg
236 | vcvtsi2ss xmm1, xmm1, r10 ; xmm1<==ixdimp
237 | vbroadcastss zmm1, xmm1 ; zmm1<==ixdimp, ixdimp, ixdimp, ixdimp
238 |
239 | mov rax, r12; iy = iy0
240 | mov rcx, r10; ix = ixdimp
241 | imul rcx
242 | shl rax, 2 ; ixy = ixdimp * iy0 * 4
243 | add rax, [rsi + 40] ; ixy += ifp
244 | mov rdi, rax
245 | ; mov rdi, [rsi + 40] ; ifp
246 | mov rsi, [rsi + 48] ; igp
247 |
248 | mov rdx, r12 ; iy<==iy0
249 | A5LOOPY:
250 | mov rbx, 0 ; ix<==0
251 | vmovaps zmm2, FZMM0_15 ; reset ix
252 | vcvtsi2ss xmm3, xmm3, rdx ; xmm3<==iy
253 | vbroadcastss zmm3, xmm3 ; xmm3<==iy, iy, iy, iy
254 | vbroadcastss zmm5, real4 ptr [r8]
255 | vmulps zmm5, zmm5, zmm3 ; iy * fsin for each float
256 | vbroadcastss zmm7, real4 ptr [r11] ; zmm7<==foffset
257 | vaddps zmm5, zmm5, zmm7 ; zmm5<==iy * fsin + foffset
258 | A5LOOPX:
259 | vmulps zmm4, zmm0, zmm2 ; (ix+n) * fcos
260 | vaddps zmm4, zmm4, zmm5 ; (ix+n) * fcos + foffset
261 | vcmpltps k1, zmm4, zmm6 ; k1[i:i]=1 if (zmm4 < ixdimpg)
262 | vcmpgeps k2, zmm4, FZMM0_0 ; k2[i:i]=1 if (zmm4 >= 0)
263 | kandw k1, k1, k2
264 | vpxord zmm3, zmm3, zmm3 ; clear zmm3
265 | vcvttps2dq zmm4, zmm4 ; zmm4 float*8 to integer32*8
266 | vpgatherdd zmm3{k1}, [rsi + zmm4 * 4] ; load [rsi+zmm4*4] if k1[i:i]=1
267 | vcmpltps k1, zmm2, zmm1 ; k1[i:i]=1 if (zmm2 < ixdimp)
268 | vmovdqa32 zmm4{k1}, [rdi + rbx * 4]
269 | vpaddd zmm4, zmm3, zmm4
270 | vmovdqa32 [rdi + rbx * 4]{k1}, zmm4
271 |
272 | vaddps zmm2, zmm2, FZMM16_16 ; zmm2 + 16.0
273 | add rbx, 16
274 | cmp rbx, r10
275 | jnae A5LOOPX ; ix < ixdimp
276 | A5LOOPYEND2:
277 | add rdi, r9 ; +ixdimp*4
278 | inc rdx ; iy++
279 | cmp rdx, r13
280 | jnae A5LOOPY ; iy < iy1
281 |
282 | RTN:
283 | ; ldmxcsr smxcsr
284 | movdqu xmm7, regXMM7
285 | movdqu xmm6, regXMM6
286 | pop r13
287 | pop r12
288 | pop rdi
289 | pop rsi
290 | pop rbp
291 | pop rbx
292 | ret
293 |
294 | projx64 ENDP
295 |
296 | end
297 |
--------------------------------------------------------------------------------
/source/projx64.lst:
--------------------------------------------------------------------------------
1 | Microsoft (R) Macro Assembler (x64) Version 14.16.27025.1 06/04/24 13:09:45
2 | projx64.asm Page 1 - 1
3 |
4 |
5 | ;ml64.exe
6 |
7 | 00000000 DATA segment align(64)
8 | 00000000 00000000 FZMM0_15 real4 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0
9 | 3F800000
10 | 40000000
11 | 40400000
12 | 40800000
13 | 40A00000
14 | 40C00000
15 | 40E00000
16 | 41000000
17 | 41100000
18 | 41200000
19 | 41300000
20 | 41400000
21 | 41500000
22 | 41600000
23 | 41700000
24 | 00000040 41800000 FZMM16_16 real4 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0
25 | 41800000
26 | 41800000
27 | 41800000
28 | 41800000
29 | 41800000
30 | 41800000
31 | 41800000
32 | 41800000
33 | 41800000
34 | 41800000
35 | 41800000
36 | 41800000
37 | 41800000
38 | 41800000
39 | 41800000
40 | 00000080 00000000 FZMM0_0 real4 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
41 | 00000000
42 | 00000000
43 | 00000000
44 | 00000000
45 | 00000000
46 | 00000000
47 | 00000000
48 | 00000000
49 | 00000000
50 | 00000000
51 | 00000000
52 | 00000000
53 | 00000000
54 | 00000000
55 | 00000000
56 | 000000C0 00000000 F76543210 real4 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0
57 | 3F800000
58 | 40000000
59 | 40400000
60 | 40800000
61 | 40A00000
62 | 40C00000
63 | 40E00000
64 | 000000E0 41000000 F88888888 real4 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0
65 | 41000000
66 | 41000000
67 | 41000000
68 | 41000000
69 | 41000000
70 | 41000000
71 | 41000000
72 | 00000100 00000000 F00000000 real4 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
73 | 00000000
74 | 00000000
75 | 00000000
76 | 00000000
77 | 00000000
78 | 00000000
79 | 00000000
80 | 00000120 00000000 F3210 real4 0.0, 1.0, 2.0, 3.0
81 | 3F800000
82 | 40000000
83 | 40400000
84 | 00000130 DATA ends
85 |
86 | 00000000 .code
87 |
88 | 00000000 projx64 PROC
89 | ; mov r10, rcx ; the first arg = rcx
90 | ; mov r10, rdx ; the 2nd arg = rdx
91 | ; mov rax, r10 ; rax to return result
92 |
93 | ; for (int iy=iy0; iy= ixdimpg) continue;
100 | ; ifp[ifpidx + ix] += ipgp[ix0];
101 | ; }
102 | ; }
103 |
104 | ;local valiables
105 | ; local pmxcsr :dword
106 | ; local smxcsr :dword
107 | local regXMM6 :oword
108 | local regXMM7 :oword
109 |
110 | ;store registers
111 | 00000008 53 push rbx
112 | 00000009 55 push rbp
113 | 0000000A 56 push rsi
114 | 0000000B 57 push rdi
115 | 0000000C 41/ 54 push r12
116 | 0000000E 41/ 55 push r13
117 | 00000010 F3/ 0F 7F 75 movdqu regXMM6, xmm6
118 | F0
119 | 00000015 F3/ 0F 7F 7D movdqu regXMM7, xmm7
120 | E0
121 |
122 | ;get pointer to args
123 | 0000001A 48/ 8B F1 mov rsi, rcx ; arg #1
124 |
125 | ;init params
126 | ; mov ixdimpg, [rsi + 24]
127 | 0000001D 4C/ 8B 56 20 mov r10, [rsi + 32] ; ixdimp
128 | 00000021 4D/ 8B CA mov r9, r10
129 | 00000024 49/ C1 E1 02 shl r9, 2 ; r9<==ixdimp * 4
130 | ; mov ifp, [rsi + 40]
131 | ; mov igp, [rsi + 48]
132 | 00000028 4C/ 8B 66 40 mov r12, [rsi + 64] ;iy0
133 | 0000002C 4C/ 8B 6E 48 mov r13, [rsi + 72] ;iy1
134 |
135 | ;sse rounding mode RC=00B (MXCSR[14:13])
136 | ; stmxcsr smxcsr
137 | ; stmxcsr pmxcsr
138 | ; and pmxcsr, 0FFFF9FFFh
139 | ; ldmxcsr pmxcsr
140 |
141 | ;jump to AVX routine
142 | 00000030 48/ 8B 46 38 mov rax, [rsi + 56] ; AVX flag
143 | 00000034 48/ 83 E0 02 and rax, 000000002h
144 | 00000038 0F 85 000001D4 jnz USEAVX512
145 | 0000003E 48/ 8B 46 38 mov rax, [rsi + 56] ; AVX flag
146 | 00000042 48/ 83 E0 01 and rax, 000000001h
147 | 00000046 0F 85 000000F6 jnz USEAVX
148 |
149 | ;load valiables
150 | 0000004C 49/ 8B C5 mov rax, r13; iy = iy1
151 | 0000004F 48/ FF C8 dec rax
152 | 00000052 49/ 8B CA mov rcx, r10; ix = ixdimp
153 | 00000055 48/ F7 E9 imul rcx
154 | 00000058 48/ C1 E0 02 shl rax, 2 ; ixy = ixdimp * (iy1 - 1) * 4
155 | 0000005C 48/ 03 46 28 add rax, [rsi + 40] ; ixy += ifp
156 | 00000060 48/ 8B F8 mov rdi, rax
157 |
158 | 00000063 48/ 8B 06 mov rax, [rsi] ; &fcos
159 | 00000066 F3/ 0F 10 00 movss xmm0, real4 ptr [rax]
160 | 0000006A 0F C6 C0 00 shufps xmm0, xmm0, 0
161 |
162 | 0000006E 48/ 8B 46 08 mov rax, [rsi + 8] ; &fsin
163 | 00000072 F3/ 0F 10 08 movss xmm1, real4 ptr [rax]
164 | 00000076 0F C6 C9 00 shufps xmm1, xmm1, 0
165 |
166 | 0000007A 48/ 8B 46 10 mov rax, [rsi + 16] ; &foffset
167 | 0000007E F3/ 0F 10 38 movss xmm7, real4 ptr [rax]
168 | 00000082 0F C6 FF 00 shufps xmm7, xmm7, 0
169 |
170 | 00000086 0F 28 35 movaps xmm6, F3210
171 | 00000120 R
172 |
173 | ;start process
174 | 0000008D 48/ 8B 4E 18 mov rcx, [rsi + 24] ; ixdimpg
175 | 00000091 48/ 8B 76 30 mov rsi, [rsi + 48] ; igp
176 |
177 | 00000095 49/ 8B D5 mov rdx, r13 ; iy<==iy1
178 | 00000098 48/ FF CA dec rdx
179 | 0000009B 48/ C7 C0 mov rax, 0
180 | 00000000
181 | 000000A2 LOOPY:
182 | 000000A2 49/ 8B DA mov rbx, r10 ; ix<==ixdimp
183 | 000000A5 48/ FF CB dec rbx
184 | 000000A8 F3/ 48/ 0F 2A DA cvtsi2ss xmm3, rdx ; xmm3<==iy
185 | 000000AD 0F C6 DB 00 shufps xmm3, xmm3, 0 ; xmm3<==iy, iy, iy, iy
186 | 000000B1 0F 28 E9 movaps xmm5, xmm1 ; xmm5<==fsin, fsin, fsin, fsin
187 | 000000B4 0F 59 EB mulps xmm5, xmm3 ; iy * fsin for each float
188 | 000000B7 0F 58 EF addps xmm5, xmm7 ; + foffset for each float
189 | 000000BA LOOPX:
190 | 000000BA F3/ 48/ 0F 2A D3 cvtsi2ss xmm2, rbx ; xmm2<==ix
191 | 000000BF 0F C6 D2 00 shufps xmm2, xmm2, 0 ; xmm2<==ix, ix, ix, ix
192 | 000000C3 0F 5C D6 subps xmm2, xmm6 ; xmm2<==ix-3, ix-2, ix-2, ix
193 | 000000C6 0F 28 E0 movaps xmm4, xmm0 ; xmm4<==fcos, fcos, fcos, fcos
194 | 000000C9 0F 59 E2 mulps xmm4, xmm2 ; (ix-n) * fcos
195 | 000000CC 0F 58 E5 addps xmm4, xmm5 ; (ix-n) * fcos + foffset
196 | 000000CF F3/ 0F 5B E4 cvttps2dq xmm4, xmm4 ; xmm4 float*4 to integer32*4
197 | 000000D3 66| 0F 7E E0 movd eax, xmm4 ; lower 4 bytes to eax
198 | ; pextrd eax, xmm4, 0 ; SSE4.1
199 | 000000D7 3B C1 cmp eax, ecx ; ix<=>ixdimpg
200 | 000000D9 73 06 jae LOOPXSKIP1 ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
201 | 000000DB 8B 04 86 mov eax, [rsi + rax * 4] ; eax<==igp[ix * DBPT_GINTP]
202 | 000000DE 01 04 9F add [rdi + rbx * 4], eax ; ifp[ix] += eax
203 | 000000E1 LOOPXSKIP1:
204 | 000000E1 48/ FF CB dec rbx ; ix--
205 | 000000E4 7C 48 jl LOOPYEND ; ix < 0
206 | 000000E6 66| 0F 73 DC psrldq xmm4, 4 ; shift right by 4 bytes (integer32)
207 | 04
208 | 000000EB 66| 0F 7E E0 movd eax, xmm4
209 | ; pextrd eax, xmm4, 1 ; SSE4.1
210 | 000000EF 3B C1 cmp eax, ecx; ixdimpg
211 | 000000F1 73 06 jae LOOPXSKIP2 ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
212 | 000000F3 8B 04 86 mov eax, [rsi + rax * 4]
213 | 000000F6 01 04 9F add [rdi + rbx * 4], eax
214 | 000000F9 LOOPXSKIP2:
215 | 000000F9 48/ FF CB dec rbx ; ix--
216 | 000000FC 7C 30 jl LOOPYEND ; ix < 0
217 | 000000FE 66| 0F 73 DC psrldq xmm4, 4
218 | 04
219 | 00000103 66| 0F 7E E0 movd eax, xmm4
220 | ; pextrd eax, xmm4, 2 ; SSE4.1
221 | 00000107 3B C1 cmp eax, ecx; ixdimpg
222 | 00000109 73 06 jae LOOPXSKIP3 ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
223 | 0000010B 8B 04 86 mov eax, [rsi + rax * 4]
224 | 0000010E 01 04 9F add [rdi + rbx * 4], eax
225 | 00000111 LOOPXSKIP3:
226 | 00000111 48/ FF CB dec rbx ; ix--
227 | 00000114 7C 18 jl LOOPYEND ; ix < 0
228 | 00000116 66| 0F 73 DC psrldq xmm4, 4
229 | 04
230 | 0000011B 66| 0F 7E E0 movd eax, xmm4
231 | ; pextrd eax, xmm4, 3 ; SSE4.1
232 | 0000011F 3B C1 cmp eax, ecx; ixdimpg
233 | 00000121 73 06 jae LOOPXEND ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
234 | 00000123 8B 04 86 mov eax, [rsi + rax * 4]
235 | 00000126 01 04 9F add [rdi + rbx * 4], eax
236 | 00000129 LOOPXEND:
237 | 00000129 48/ FF CB dec rbx ; ix--
238 | 0000012C 7D 8C jge LOOPX ; ix >= 0
239 | 0000012E LOOPYEND:
240 | 0000012E 49/ 2B F9 sub rdi, r9 ; ixdimp*4
241 | 00000131 48/ FF CA dec rdx ; iy--
242 | 00000134 49/ 3B D4 cmp rdx, r12
243 | 00000137 0F 8D FFFFFF65 jge LOOPY ; iy >= iy0
244 |
245 | 0000013D E9 000001BC jmp RTN
246 |
247 | 00000142 USEAVX:
248 | ;load valiables
249 | 00000142 48/ 8B 06 mov rax, [rsi] ; &fcos
250 | 00000145 C4 E2 7D/ 18 00 vbroadcastss ymm0, real4 ptr [rax]
251 | 0000014A 4C/ 8B 46 08 mov r8, [rsi + 8] ; &fsin
252 | 0000014E 4C/ 8B 5E 10 mov r11, [rsi + 16] ; &foffset
253 |
254 | 00000152 48/ 8B 4E 18 mov rcx, [rsi + 24] ; ixdimpg
255 | 00000156 C4 E1 CA/ 2A F1 vcvtsi2ss xmm6, xmm6, rcx ; xmm6<==ixdimpg
256 | 0000015B C4 E2 7D/ 18 F6 vbroadcastss ymm6, xmm6 ; ymm6<==ixdimpg, ixdimpg, ixdimpg, ixdimpg
257 | 00000160 C4 C1 F2/ 2A CA vcvtsi2ss xmm1, xmm1, r10 ; xmm1<==ixdimp
258 | 00000165 C4 E2 7D/ 18 C9 vbroadcastss ymm1, xmm1 ; ymm1<==ixdimp, ixdimp, ixdimp, ixdimp
259 |
260 | 0000016A 49/ 8B C4 mov rax, r12; iy = iy0
261 | 0000016D 49/ 8B CA mov rcx, r10; ix = ixdimp
262 | 00000170 48/ F7 E9 imul rcx
263 | 00000173 48/ C1 E0 02 shl rax, 2 ; ixy = ixdimp * iy0 * 4
264 | 00000177 48/ 03 46 28 add rax, [rsi + 40] ; ixy += ifp
265 | 0000017B 48/ 8B F8 mov rdi, rax
266 | ; mov rdi, [rsi + 40] ; ifp
267 | 0000017E 48/ 8B 76 30 mov rsi, [rsi + 48] ; igp
268 |
269 | 00000182 49/ 8B D4 mov rdx, r12 ; iy<==iy0
270 | 00000185 ALOOPY:
271 | 00000185 48/ C7 C3 mov rbx, 0 ; ix<==0
272 | 00000000
273 | 0000018C C5 FC/ 28 15 vmovaps ymm2, F76543210 ; reset ix
274 | 000000C0 R
275 | 00000194 C4 E1 E2/ 2A DA vcvtsi2ss xmm3, xmm3, rdx ; xmm3<==iy
276 | 00000199 C4 E2 7D/ 18 DB vbroadcastss ymm3, xmm3 ; xmm3<==iy, iy, iy, iy
277 | 0000019E C4 C2 7D/ 18 28 vbroadcastss ymm5, real4 ptr [r8]
278 | 000001A3 C5 D4/ 59 EB vmulps ymm5, ymm5, ymm3 ; iy * fsin for each float
279 | 000001A7 C4 C2 7D/ 18 3B vbroadcastss ymm7, real4 ptr [r11] ; ymm7<==foffset
280 | 000001AC C5 D4/ 58 EF vaddps ymm5, ymm5, ymm7 ; ymm5<==iy * fsin + foffset
281 | 000001B0 ALOOPX:
282 | 000001B0 C5 FC/ 59 E2 vmulps ymm4, ymm0, ymm2 ; (ix+n) * fcos
283 | 000001B4 C5 DC/ 58 E5 vaddps ymm4, ymm4, ymm5 ; (ix+n) * fcos + foffset
284 | 000001B8 C5 DC/ C2 FE 01 vcmpltps ymm7, ymm4, ymm6 ; ymm7[i:i]=1 if (ymm4 < ixdimpg)
285 | 000001BD C5 DC/ C2 1D vcmpgeps ymm3, ymm4, F00000000 ; ymm3[i:i]=1 if (ymm4 >= 0)
286 | 00000100 R 0D
287 | 000001C6 C5 C5/ DB FB vpand ymm7, ymm7, ymm3
288 | 000001CA C5 E5/ EF DB vpxor ymm3, ymm3, ymm3 ; clear ymm3
289 | 000001CE C5 FE/ 5B E4 vcvttps2dq ymm4, ymm4 ; ymm4 float*8 to integer32*8
290 | 000001D2 C4 E2 45/ 90 1C vpgatherdd ymm3, [rsi + ymm4 * 4], ymm7 ; load [rsi+ymm4*4] if ymm7=1
291 | A6
292 | 000001D8 C5 EC/ C2 F9 01 vcmpltps ymm7, ymm2, ymm1 ; ymm7[i:i]=1 if (ymm2 < ixdimp)
293 | 000001DD C4 E2 45/ 8C 24 vpmaskmovd ymm4, ymm7, [rdi + rbx * 4]
294 | 9F
295 | 000001E3 C5 E5/ FE E4 vpaddd ymm4, ymm3, ymm4
296 | 000001E7 C4 E2 45/ 8E 24 vpmaskmovd [rdi + rbx * 4], ymm7, ymm4
297 | 9F
298 |
299 | 000001ED C5 EC/ 58 15 vaddps ymm2, ymm2, F88888888 ; ymm2 + 8.0
300 | 000000E0 R
301 | 000001F5 48/ 83 C3 08 add rbx, 8
302 | 000001F9 49/ 3B DA cmp rbx, r10
303 | 000001FC 72 B2 jnae ALOOPX ; ix < ixdimp
304 | 000001FE ALOOPYEND2:
305 | 000001FE 49/ 03 F9 add rdi, r9 ; +ixdimp*4
306 | 00000201 48/ FF C2 inc rdx ; iy++
307 | 00000204 49/ 3B D5 cmp rdx, r13
308 | 00000207 0F 82 FFFFFF78 jnae ALOOPY ; iy < iy1
309 |
310 | 0000020D E9 000000EC jmp RTN
311 |
312 | 00000212 USEAVX512:
313 | ;220417
314 | ;load valiables
315 | 00000212 48/ 8B 06 mov rax, [rsi] ; &fcos
316 | 00000215 62 F2 7D 48/ 18 vbroadcastss zmm0, real4 ptr [rax]
317 | 00
318 | 0000021B 4C/ 8B 46 08 mov r8, [rsi + 8] ; &fsin
319 | 0000021F 4C/ 8B 5E 10 mov r11, [rsi + 16] ; &foffset
320 |
321 | 00000223 48/ 8B 4E 18 mov rcx, [rsi + 24] ; ixdimpg
322 | 00000227 C4 E1 CA/ 2A F1 vcvtsi2ss xmm6, xmm6, rcx ; xmm6<==ixdimpg
323 | 0000022C 62 F2 7D 48/ 18 vbroadcastss zmm6, xmm6 ; zmm6<==ixdimpg, ixdimpg, ixdimpg, ixdimpg
324 | F6
325 | 00000232 C4 C1 F2/ 2A CA vcvtsi2ss xmm1, xmm1, r10 ; xmm1<==ixdimp
326 | 00000237 62 F2 7D 48/ 18 vbroadcastss zmm1, xmm1 ; zmm1<==ixdimp, ixdimp, ixdimp, ixdimp
327 | C9
328 |
329 | 0000023D 49/ 8B C4 mov rax, r12; iy = iy0
330 | 00000240 49/ 8B CA mov rcx, r10; ix = ixdimp
331 | 00000243 48/ F7 E9 imul rcx
332 | 00000246 48/ C1 E0 02 shl rax, 2 ; ixy = ixdimp * iy0 * 4
333 | 0000024A 48/ 03 46 28 add rax, [rsi + 40] ; ixy += ifp
334 | 0000024E 48/ 8B F8 mov rdi, rax
335 | ; mov rdi, [rsi + 40] ; ifp
336 | 00000251 48/ 8B 76 30 mov rsi, [rsi + 48] ; igp
337 |
338 | 00000255 49/ 8B D4 mov rdx, r12 ; iy<==iy0
339 | 00000258 A5LOOPY:
340 | 00000258 48/ C7 C3 mov rbx, 0 ; ix<==0
341 | 00000000
342 | 0000025F 62 F1 7C 48/ 28 vmovaps zmm2, FZMM0_15 ; reset ix
343 | 15 00000000 R
344 | 00000269 C4 E1 E2/ 2A DA vcvtsi2ss xmm3, xmm3, rdx ; xmm3<==iy
345 | 0000026E 62 F2 7D 48/ 18 vbroadcastss zmm3, xmm3 ; xmm3<==iy, iy, iy, iy
346 | DB
347 | 00000274 62 D2 7D 48/ 18 vbroadcastss zmm5, real4 ptr [r8]
348 | 28
349 | 0000027A 62 F1 54 48/ 59 vmulps zmm5, zmm5, zmm3 ; iy * fsin for each float
350 | EB
351 | 00000280 62 D2 7D 48/ 18 vbroadcastss zmm7, real4 ptr [r11] ; zmm7<==foffset
352 | 3B
353 | 00000286 62 F1 54 48/ 58 vaddps zmm5, zmm5, zmm7 ; zmm5<==iy * fsin + foffset
354 | EF
355 | 0000028C A5LOOPX:
356 | 0000028C 62 F1 7C 48/ 59 vmulps zmm4, zmm0, zmm2 ; (ix+n) * fcos
357 | E2
358 | 00000292 62 F1 5C 48/ 58 vaddps zmm4, zmm4, zmm5 ; (ix+n) * fcos + foffset
359 | E5
360 | 00000298 62 F1 5C 48/ C2 vcmpltps k1, zmm4, zmm6 ; k1[i:i]=1 if (zmm4 < ixdimpg)
361 | CE 01
362 | 0000029F 62 F1 5C 48/ C2 vcmpgeps k2, zmm4, FZMM0_0 ; k2[i:i]=1 if (zmm4 >= 0)
363 | 15 00000080 R
364 | 0D
365 | 000002AA C5 F4/ 41 CA kandw k1, k1, k2
366 | 000002AE 62 F1 65 48/ EF vpxord zmm3, zmm3, zmm3 ; clear zmm3
367 | DB
368 | 000002B4 62 F1 7E 48/ 5B vcvttps2dq zmm4, zmm4 ; zmm4 float*8 to integer32*8
369 | E4
370 | 000002BA 62 F2 7D 49/ 90 vpgatherdd zmm3{k1}, [rsi + zmm4 * 4] ; load [rsi+zmm4*4] if k1[i:i]=1
371 | 1C A6
372 | 000002C1 62 F1 6C 48/ C2 vcmpltps k1, zmm2, zmm1 ; k1[i:i]=1 if (zmm2 < ixdimp)
373 | C9 01
374 | 000002C8 62 F1 7D 49/ 6F vmovdqa32 zmm4{k1}, [rdi + rbx * 4]
375 | 24 9F
376 | 000002CF 62 F1 65 48/ FE vpaddd zmm4, zmm3, zmm4
377 | E4
378 | 000002D5 62 F1 7D 49/ 7F vmovdqa32 [rdi + rbx * 4]{k1}, zmm4
379 | 24 9F
380 |
381 | 000002DC 62 F1 6C 48/ 58 vaddps zmm2, zmm2, FZMM16_16 ; zmm2 + 16.0
382 | 15 00000040 R
383 | 000002E6 48/ 83 C3 10 add rbx, 16
384 | 000002EA 49/ 3B DA cmp rbx, r10
385 | 000002ED 72 9D jnae A5LOOPX ; ix < ixdimp
386 | 000002EF A5LOOPYEND2:
387 | 000002EF 49/ 03 F9 add rdi, r9 ; +ixdimp*4
388 | 000002F2 48/ FF C2 inc rdx ; iy++
389 | 000002F5 49/ 3B D5 cmp rdx, r13
390 | 000002F8 0F 82 FFFFFF5A jnae A5LOOPY ; iy < iy1
391 |
392 | 000002FE RTN:
393 | ; ldmxcsr smxcsr
394 | 000002FE F3/ 0F 6F 7D movdqu xmm7, regXMM7
395 | E0
396 | 00000303 F3/ 0F 6F 75 movdqu xmm6, regXMM6
397 | F0
398 | 00000308 41/ 5D pop r13
399 | 0000030A 41/ 5C pop r12
400 | 0000030C 5F pop rdi
401 | 0000030D 5E pop rsi
402 | 0000030E 5D pop rbp
403 | 0000030F 5B pop rbx
404 | ret
405 |
406 | 00000312 projx64 ENDP
407 |
408 | end
409 | Microsoft (R) Macro Assembler (x64) Version 14.16.27025.1 06/04/24 13:09:45
410 | projx64.asm Symbols 2 - 1
411 |
412 |
413 |
414 |
415 | Segments:
416 |
417 | N a m e Length Align Class
418 |
419 | DATA . . . . . . . . . . . . . . 00000130 64
420 |
421 |
422 | Procedures, parameters, and locals:
423 |
424 | N a m e Type Value Attr
425 |
426 | projx64 . . . . . . . . . . . . P 00000000 _TEXT Length= 00000312 Public
427 | regXMM6 . . . . . . . . . . . XmmWord rbp - 00000010
428 | regXMM7 . . . . . . . . . . . XmmWord rbp - 00000020
429 | LOOPY . . . . . . . . . . . . L 000000A2 _TEXT
430 | LOOPX . . . . . . . . . . . . L 000000BA _TEXT
431 | LOOPXSKIP1 . . . . . . . . . . L 000000E1 _TEXT
432 | LOOPXSKIP2 . . . . . . . . . . L 000000F9 _TEXT
433 | LOOPXSKIP3 . . . . . . . . . . L 00000111 _TEXT
434 | LOOPXEND . . . . . . . . . . . L 00000129 _TEXT
435 | LOOPYEND . . . . . . . . . . . L 0000012E _TEXT
436 | USEAVX . . . . . . . . . . . . L 00000142 _TEXT
437 | ALOOPY . . . . . . . . . . . . L 00000185 _TEXT
438 | ALOOPX . . . . . . . . . . . . L 000001B0 _TEXT
439 | ALOOPYEND2 . . . . . . . . . . L 000001FE _TEXT
440 | USEAVX512 . . . . . . . . . . L 00000212 _TEXT
441 | A5LOOPY . . . . . . . . . . . L 00000258 _TEXT
442 | A5LOOPX . . . . . . . . . . . L 0000028C _TEXT
443 | A5LOOPYEND2 . . . . . . . . . L 000002EF _TEXT
444 | RTN . . . . . . . . . . . . . L 000002FE _TEXT
445 |
446 |
447 | Symbols:
448 |
449 | N a m e Type Value Attr
450 |
451 | F00000000 . . . . . . . . . . . DWord 00000100 DATA
452 | F3210 . . . . . . . . . . . . . DWord 00000120 DATA
453 | F76543210 . . . . . . . . . . . DWord 000000C0 DATA
454 | F88888888 . . . . . . . . . . . DWord 000000E0 DATA
455 | FZMM0_0 . . . . . . . . . . . . DWord 00000080 DATA
456 | FZMM0_15 . . . . . . . . . . . . DWord 00000000 DATA
457 | FZMM16_16 . . . . . . . . . . . DWord 00000040 DATA
458 | WIN_X64 . . . . . . . . . . . . Text
459 |
460 | 0 Warnings
461 | 0 Errors
462 |
--------------------------------------------------------------------------------
/source/projx64VS2008.asm:
--------------------------------------------------------------------------------
1 | ;ml64.exe
2 |
3 | DATA segment align(32)
4 | F76543210 real4 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0
5 | F88888888 real4 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0
6 | F00000000 real4 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
7 | F3210 real4 0.0, 1.0, 2.0, 3.0
8 | DATA ends
9 |
10 | .code
11 |
12 | projx64 PROC
13 | ; mov r10, rcx ; the first arg = rcx
14 | ; mov r10, rdx ; the 2nd arg = rdx
15 | ; mov rax, r10 ; rax to return result
16 |
17 | ; for (int iy=iy0; iy= ixdimpg) continue;
24 | ; ifp[ifpidx + ix] += ipgp[ix0];
25 | ; }
26 | ; }
27 |
28 | ;local valiables
29 | ; local pmxcsr :dword
30 | ; local smxcsr :dword
31 | local regXMM6 :oword
32 | local regXMM7 :oword
33 |
34 | ;store registers
35 | push rbx
36 | push rbp
37 | push rsi
38 | push rdi
39 | push r12
40 | push r13
41 | movdqu regXMM6, xmm6
42 | movdqu regXMM7, xmm7
43 |
44 | ;get pointer to args
45 | mov rsi, rcx ; arg #1
46 |
47 | ;init params
48 | ; mov ixdimpg, [rsi + 24]
49 | mov r10, [rsi + 32] ; ixdimp
50 | mov r9, r10
51 | shl r9, 2 ; r9<==ixdimp * 4
52 | ; mov ifp, [rsi + 40]
53 | ; mov igp, [rsi + 48]
54 | mov r12, [rsi + 64] ;iy0
55 | mov r13, [rsi + 72] ;iy1
56 |
57 | ;sse rounding mode RC=00B (MXCSR[14:13])
58 | ; stmxcsr smxcsr
59 | ; stmxcsr pmxcsr
60 | ; and pmxcsr, 0FFFF9FFFh
61 | ; ldmxcsr pmxcsr
62 |
63 | ;jump to AVX routine
64 | ; mov rax, [rsi + 56] ; AVX flag
65 | ; and rax, 000000001h
66 | ; jnz USEAVX
67 |
68 | ;load valiables
69 | mov rax, r13; iy = iy1
70 | dec rax
71 | mov rcx, r10; ix = ixdimp
72 | imul rcx
73 | shl rax, 2 ; ixy = ixdimp * (iy1 - 1) * 4
74 | add rax, [rsi + 40] ; ixy += ifp
75 | mov rdi, rax
76 |
77 | mov rax, [rsi] ; &fcos
78 | movss xmm0, real4 ptr [rax]
79 | shufps xmm0, xmm0, 0
80 |
81 | mov rax, [rsi + 8] ; &fsin
82 | movss xmm1, real4 ptr [rax]
83 | shufps xmm1, xmm1, 0
84 |
85 | mov rax, [rsi + 16] ; &foffset
86 | movss xmm7, real4 ptr [rax]
87 | shufps xmm7, xmm7, 0
88 |
89 | movaps xmm6, F3210
90 |
91 | ;start process
92 | mov rcx, [rsi + 24] ; ixdimpg
93 | mov rsi, [rsi + 48] ; igp
94 |
95 | mov rdx, r13 ; iy<==iy1
96 | dec rdx
97 | mov rax, 0
98 | LOOPY:
99 | mov rbx, r10 ; ix<==ixdimp
100 | dec rbx
101 | cvtsi2ss xmm3, rdx ; xmm3<==iy
102 | shufps xmm3, xmm3, 0 ; xmm3<==iy, iy, iy, iy
103 | movaps xmm5, xmm1 ; xmm5<==fsin, fsin, fsin, fsin
104 | mulps xmm5, xmm3 ; iy * fsin for each float
105 | addps xmm5, xmm7 ; + foffset for each float
106 | LOOPX:
107 | cvtsi2ss xmm2, rbx ; xmm2<==ix
108 | shufps xmm2, xmm2, 0 ; xmm2<==ix, ix, ix, ix
109 | subps xmm2, xmm6 ; xmm2<==ix-3, ix-2, ix-2, ix
110 | movaps xmm4, xmm0 ; xmm4<==fcos, fcos, fcos, fcos
111 | mulps xmm4, xmm2 ; (ix-n) * fcos
112 | addps xmm4, xmm5 ; (ix-n) * fcos + foffset
113 | cvttps2dq xmm4, xmm4 ; xmm4 float*4 to integer32*4
114 | movd eax, xmm4 ; lower 4 bytes to eax
115 | ; pextrd eax, xmm4, 0 ; SSE4.1
116 | cmp eax, ecx ; ix<=>ixdimpg
117 | jae LOOPXSKIP1 ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
118 | mov eax, [rsi + rax * 4] ; eax<==igp[ix * DBPT_GINTP]
119 | add [rdi + rbx * 4], eax ; ifp[ix] += eax
120 | LOOPXSKIP1:
121 | dec rbx ; ix--
122 | jl LOOPYEND ; ix < 0
123 | psrldq xmm4, 4 ; shift right by 4 bytes (integer32)
124 | movd eax, xmm4
125 | ; pextrd eax, xmm4, 1 ; SSE4.1
126 | cmp eax, ecx; ixdimpg
127 | jae LOOPXSKIP2 ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
128 | mov eax, [rsi + rax * 4]
129 | add [rdi + rbx * 4], eax
130 | LOOPXSKIP2:
131 | dec rbx ; ix--
132 | jl LOOPYEND ; ix < 0
133 | psrldq xmm4, 4
134 | movd eax, xmm4
135 | ; pextrd eax, xmm4, 2 ; SSE4.1
136 | cmp eax, ecx; ixdimpg
137 | jae LOOPXSKIP3 ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
138 | mov eax, [rsi + rax * 4]
139 | add [rdi + rbx * 4], eax
140 | LOOPXSKIP3:
141 | dec rbx ; ix--
142 | jl LOOPYEND ; ix < 0
143 | psrldq xmm4, 4
144 | movd eax, xmm4
145 | ; pextrd eax, xmm4, 3 ; SSE4.1
146 | cmp eax, ecx; ixdimpg
147 | jae LOOPXEND ; ix0 >= ixdimp * DBPT_GINTP or ix0 < 0
148 | mov eax, [rsi + rax * 4]
149 | add [rdi + rbx * 4], eax
150 | LOOPXEND:
151 | dec rbx ; ix--
152 | jge LOOPX ; ix >= 0
153 | LOOPYEND:
154 | sub rdi, r9 ; ixdimp*4
155 | dec rdx ; iy--
156 | cmp rdx, r12
157 | jge LOOPY ; iy >= iy0
158 |
159 | jmp RTN
160 |
161 |
162 |
163 | RTN:
164 | ; ldmxcsr smxcsr
165 | movdqu xmm7, regXMM7
166 | movdqu xmm6, regXMM6
167 | pop r13
168 | pop r12
169 | pop rdi
170 | pop rsi
171 | pop rbp
172 | pop rbx
173 | ret
174 |
175 | projx64 ENDP
176 |
177 | end
178 |
--------------------------------------------------------------------------------
/source/reconstinfo.h:
--------------------------------------------------------------------------------
1 | #if !defined(ATI_OS_WIN)
2 | //130920 #include
3 | #include
4 | #include
5 | #include
6 | #else
7 | #include
8 | typedef float float2;
9 | typedef void* cufftHandle;
10 | #endif
11 |
12 | class CXyz;
13 |
14 | //followings are defined in general.h
15 | //#define READTIF16bit 1
16 | //#define READTIF8bit 2
17 | #define RIFLAG_KEEPSINOGRAM 4
18 |
19 | #if !defined( _RECONSTINFO_H_ )
20 | #define _RECONSTINFO_H_
21 | struct RECONST_INFO {
22 | unsigned char iStatus;
23 | int ixdim;
24 | //int iRecDim;
25 | int iInterpolation;
26 | double center;
27 | int iSinoCenter;//190107
28 | int iLenSinogr;
29 | int* iReconst;
30 | int iStartSino;
31 | int iStepSino;
32 | //190122 bool bMaster;
33 | //CGazoDoc* pDoc;
34 | unsigned int* pDoc;
35 | int* nSinogr;
36 | //CString dataName;
37 | char dataName[61];
38 | char* bInc;
39 | float* fdeg;
40 | float* fexp;
41 | int iMultiplex;
42 | int iOffset;
43 | int maxSinogrLen;
44 | short** iSinogr;
45 | float* fFilter;
46 | //110920 bool bAngularIntp;
47 | unsigned int dReconFlags;
48 | float fTiltAngle;
49 | int drStart;
50 | int drEnd;
51 | double drX;
52 | double drY;
53 | BOOL drOmit;
54 | unsigned int threadID;
55 | //120828 HANDLE hThread;
56 | //190119 unsigned int hThread;
57 | uintptr_t hThread;
58 | //
59 | //CUDA memory allocation
60 | unsigned int max_d_ifp;
61 | unsigned int max_d_igp;
62 | #if !defined(ATI_OS_WIN)
63 | int* d_ifp;
64 | int* d_igp;
65 | #else
66 | cl_mem d_ifp;
67 | cl_mem d_igp;
68 | #endif
69 | float* d_filt;
70 | unsigned int max_d_filt;
71 | short* d_strip;
72 | unsigned int max_d_strip;
73 | float2* d_p;
74 | unsigned int max_d_p;
75 | float* d_px;
76 | unsigned int max_d_px;
77 | // int* h_igp;
78 | // unsigned int max_h_igp;
79 | // float* d_fcos;
80 | // float* d_fsin;
81 | // unsigned int max_d_fcos;
82 |
83 | cufftHandle fftplan;
84 | unsigned int ifftdim;
85 | cudaStream_t stream1, stream2;
86 |
87 | //lsqfit
88 | unsigned __int64 i64result;
89 | unsigned __int64 i64sum;
90 | short** ppRef;
91 | short** ppQry;
92 | unsigned int uiMaxRef;
93 | unsigned int uiMaxQry;
94 | CXyz* pcxyz1;
95 | CXyz* pcxyz2;
96 | int iLsqBin;
97 | int iLsqBxref;
98 | //drift list
99 | int* piDrift;
100 | int iFlag;
101 | };
102 | #endif
103 |
--------------------------------------------------------------------------------
/source/res/Toolbar.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/res/Toolbar.bmp
--------------------------------------------------------------------------------
/source/res/cursor1.cur:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/res/cursor1.cur
--------------------------------------------------------------------------------
/source/res/gazo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/res/gazo.ico
--------------------------------------------------------------------------------
/source/res/gazo.rc2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/res/gazo.rc2
--------------------------------------------------------------------------------
/source/res/gazoDoc.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/res/gazoDoc.ico
--------------------------------------------------------------------------------
/source/resource.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/source/resource.h
--------------------------------------------------------------------------------
/testPattern.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mizutanilab/RecView/3e4f4cb0fc0e8ce53898c99d0e58311b6e6be56d/testPattern.png
--------------------------------------------------------------------------------