├── 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 | testPattern 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 | 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 | 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 |
  1. System requirements
  2. 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 |
  3. Manuals
  4. 140 | Step-by-step manuals in English and Japanese are included in the Release. They are also separately provided in the docs folder.

    141 |
  5. What kind of data can be processed?
  6. 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 |
  7. RecView returns an error when processing offset-CT data taken at SPring-8.
  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 |
  9. How to try test dataset in the Release.
  10. 163 |
    171 |
  11. Does RecView make network connections?
  12. 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 |
  13. My samples showed drifts in reconsturcted images. How can I prepare biological samples best suited for the synchrotron radiation experiment?
  14. 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 |
  15. How to prepare a development environment for RecView.
  16. 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 |
    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 --------------------------------------------------------------------------------