diff --git a/src/CPU.c b/src/CPU.c index 762caeb..4ff411a 100644 --- a/src/CPU.c +++ b/src/CPU.c @@ -41,7 +41,7 @@ int CPUfillrandarr(size_t sz, float *arr, float Amp){ rand_initialized = 1; } size_t i; - OMP_FOR() + OMP_FOR(shared(arr)) for(i = 0; i < sz; i++) arr[i] = (float)drand48() * Amp; return 1; @@ -109,13 +109,132 @@ int CPUmkmirDeviat(float *map, size_t mapWH, float mirDia, FNAME(); size_t mirWH = mirDev->mirWH; if(!CPUbicubic_interp(mirDev->mirZ,map,mirWH,mirWH,mapWH,mapWH)) return 0; - ; - return 0; + float mirPixSZ = mirDia/((float)(mirWH-1)) * GRAD_WEIGHT; + float *dZdX = mirDev->mirDX, *dZdY = mirDev->mirDY, *Z = mirDev->mirZ; + int x, y, maxsz = mirWH - 1; + // simple mnemonics + size_t ul=-1-mirWH, ur=1-mirWH, dl=-1+mirWH, dr=1+mirWH, r=1, l=-1, u=-mirWH, d=mirWH; + OMP_FOR(shared(dZdX, dZdY, Z)) + for(y = 1; y < maxsz; ++y){ + size_t s = mirWH*y+1; + float *dzdx = &dZdX[s], *dzdy = &dZdY[s], *z = &Z[s]; + for(x = 1; x < maxsz; ++x, ++dzdx, ++dzdy, ++z){ + float dif1 = z[ur]-z[dl], dif2 = z[dr]-z[ul]; + *dzdx = (z[r]-z[l] + DIVSQ2*(dif1 + dif2))/mirPixSZ; + // REMEMBER!!! Axe Y looks up, so we must change the sign + *dzdy = -(z[u]-z[d] + DIVSQ2*(dif1 - dif2))/mirPixSZ; + } + } + float *dzdx = dZdX, *dzdy = dZdY; + // now simply copy neighbours to top row and left column + for(x = 0; x < mirWH; ++x, ++dzdx, ++dzdy){ + *dzdx = dzdx[mirWH]; *dzdy = dzdy[mirWH]; + } + dzdx = dZdX, dzdy = dZdY; + for(y = 0; y < mirWH; ++y, dzdx+=mirWH, dzdy+=mirWH){ + *dzdx = dzdx[1]; *dzdy = dzdy[1]; + } + *dZdX = (dZdX[1]+dZdX[mirWH])/2; + *dZdY = (dZdY[1]+dZdY[mirWH])/2; + return 1; } -int CPUgetPhotonXY(float *xout _U_, float *yout _U_, int R _U_ ,mirDeviations *D _U_, - mirPar *mirParms _U_, size_t N_photons _U_, BBox *box _U_){ +/** + * Don't use it: without linear interpolation the results are wrong! + */ +int CPUgetPhotonXY(float *xout, float *yout, int R, mirDeviations *D, + mirPar *mirParms, size_t N_photons, BBox *box){ FNAME(); return 0; + float z0 = mirParms->foc, SZ = sin(mirParms->objZ); + float F = mirParms->F, _2F = 2.f* F, Rmir = mirParms->D / 2.f, Rmir_2 = Rmir*Rmir; + float x0 = box->x0, y0 = box->y0, w = box->w, h = box->h; + int i; + if(R){ // create random arrays X & Y + CPUfillrandarr(N_photons, xout, 1.); + CPUfillrandarr(N_photons, yout, 1.); + } + float A = mirParms->Aincl, Z = mirParms->Zincl; + size_t mirWH = D->mirWH; + float cA, sA, cZ, sZ; // sin/cos A&Z + sincosf(A, &sA, &cA); + sincosf(Z, &sZ, &cZ); + // light direction vector + float f[3] = {-SZ*sinf(mirParms->objA), -SZ*cosf(mirParms->objA), -cosf(mirParms->objZ)}; + int rot = 0; + if((fabs(A) > FLT_EPSILON) || (fabs(Z) > FLT_EPSILON)) rot = 1; + float pixSZ = mirParms->D / ((float)(mirWH-1)); // "pixel" size on mirror's normales matrix + OMP_FOR(shared(xout, yout)) + for(i = 0; i < N_photons; ++i){ + float x = x0 + xout[i] * w, y = y0 + yout[i] * h, r2 = x*x + y*y; + if(r2 > Rmir_2){xout[i] = 1e10f; yout[i] = 1e10f; continue;} + float z = r2 / F; + // coordinates on deviation matrix, don't forget about y-mirroring! + int xOnMat = (x + Rmir) / pixSZ, yOnMat = (y + R) / pixSZ; //yOnMat = (R - y) / pixSZ; + size_t idx = xOnMat + yOnMat * mirWH; + // now add z-deviations, nearest interpolation of pre-computed matrix + z += D->mirZ[idx]; + float normal[3] = { D->mirDX[idx] - x/_2F, D->mirDY[idx] - y/_2F, 1.f}; + float point[3] = {x, y, z}; + void inline rotate(float Mat[3][3], float vec[3]){ + float tmp[3] = {Mat[0][0]*vec[0]+Mat[0][1]*vec[1]+Mat[0][2]*vec[2], + Mat[1][0]*vec[0]+Mat[1][1]*vec[1]+Mat[1][2]*vec[2], + Mat[2][0]*vec[0]+Mat[2][1]*vec[1]+Mat[2][2]*vec[2]}; + memmove(vec, tmp, 3*sizeof(float)); + } + if(rot){ // rotate mirror + float M[3][3] = {{cA, sA*cZ, sA*sZ}, // rotation matrix + {-sA, cA*cZ, cA*sZ}, + {0.f, -sZ, cZ}}; + rotate(M, point); + rotate(M, normal); + } + // normalize normal + {float L = sqrtf(normal[0]*normal[0]+normal[1]*normal[1]+normal[2]*normal[2]); + normal[0] /= L; normal[1] /= L; normal[2] /= L;} + // calculate reflection direction vector + float fn = 2.f*fabs(f[0]*normal[0]+f[1]*normal[1]+f[2]*normal[2]); + float refl[3] = {fn*normal[0]+f[0], fn*normal[1]+f[1], fn*normal[2]+f[2]}; + float K; + if(mirParms->dia && mirParms->dia->Nholes){ // there is a diaphragm - test it + Diaphragm *D = mirParms->dia; + int S = D->mask->WH; // size of matrix mask + pixSZ = mirParms->D / (float)S; + K = (D->Z - point[2]) / refl[2]; // scale to convert normal to vector + int curX = (int)((x + Rmir) / pixSZ + 0.5f); // coords on mirror mask + int curY = (int)((y + Rmir) / pixSZ + 0.5f); + if(curX < 0 || curX >= S || curY < 0 || curY >= S) + {xout[i] = 1e10f; yout[i] = 1e10f; continue;} + uint16_t mark = D->mask->data[curY*S + curX]; + if(!mark){xout[i] = 1e10f; yout[i] = 1e10f; continue;} + x = point[0] + K*refl[0]; // coords on diaphragm + y = point[1] + K*refl[1]; + do{ + int t = D->holes[mark-1].type; + BBox *b = &D->holes[mark-1].box; + float rx = b->w/2.f, ry = b->h/2.f; + float xc = b->x0 + rx, yc=b->y0 + ry; + float sx = x - xc, sy = y - yc; + switch(t){ + case H_SQUARE: + if(fabs(sx) > rx || fabs(sy) > ry) mark = 0; + break; + case H_ELLIPSE: + if(sx*sx/rx/rx+sy*sy/ry/ry > 1.f) mark = 0; + break; + default: + mark = 0; + } + }while(0); + if(!mark){xout[i] = 1e10f; yout[i] = 1e10f; continue;}; + } + // OK, test is passed, calculate position on Z0: + K = (z0 - point[2]) / refl[2]; + x = point[0] + K*refl[0]; + y = point[1] + K*refl[1]; + xout[i] = x; + yout[i] = y; + } + return 1; } diff --git a/src/CUDA.cu b/src/CUDA.cu index e3e557f..af50b73 100644 --- a/src/CUDA.cu +++ b/src/CUDA.cu @@ -419,11 +419,6 @@ free_all: * First check point on a mask plane; if photon falls to a hole in mask, increment * value on corresponding image pixel */ -// 1./sqrt(2) -#define DIVSQ2 0.7071068f -// 2*(1+2/sqrt(2)) -- (1+2/sqrt(2)) taken from linear gradient: -// 1 = (2 + 4/sqrt(2)) / (2*x) ==> x = 1 + 2/sqrt(2) -#define WEIGHT 4.82842712f __global__ void calcMir_dXdY(size_t Sz, float mirPixSZ, float *dZdX, float *dZdY){ #define TEX(X,Y) tex2D(TEXTURE(), X0+(X), Y0+(Y)) @@ -435,7 +430,7 @@ __global__ void calcMir_dXdY(size_t Sz, float mirPixSZ, if(X0 >= Sz || Y0 >= Sz) return; // calculate gradient components int idx = Y0 * Sz + X0; - mirPixSZ *= WEIGHT; + mirPixSZ *= GRAD_WEIGHT; dZdX[idx] = (PAIR(1,0) + DIVSQ2*(PAIR(1,-1)+PAIR(1,1)))/mirPixSZ; // REMEMBER!!! Axe Y looks up, so we must change the sign dZdY[idx] = -(PAIR(0,1) + DIVSQ2*(PAIR(1,1)+PAIR(-1,1)))/mirPixSZ; @@ -639,22 +634,26 @@ EXTERN int CUgetPhotonXY(float *xout, float *yout, int R, mirDeviations *D, mirMask *mmdev = NULL; uint16_t *mdatadev = NULL; float *X = NULL, *Y = NULL; - float SZ = sin(mirParms->objZ); + //float SZ = sin(mirParms->objZ); float z = mirParms->foc; float *Z_dev = NULL, *dX_dev = NULL, *dY_dev = NULL; - float A = mirParms->Aincl, Z = mirParms->Zincl; + float A = mirParms->Aincl, Z = -mirParms->Zincl; size_t H = D->mirWH, Wp = H*sizeof(float), pitch; float cA = cos(A), sA = sin(A), cZ = cos(Z), sZ = sin(Z); size_t sz = N_photons * sizeof(float); size_t dimens = (N_photons+LBLKSZ-1)/LBLKSZ; // light direction vector - float3 f = make_float3(-SZ*sin(mirParms->objA), -SZ*cos(mirParms->objA), -cos(mirParms->objZ)); + //float3 f = make_float3(-SZ*sin(mirParms->objA), -SZ*cos(mirParms->objA), -cos(mirParms->objZ)); + float3 f = make_float3(-sin(mirParms->objA), -sin(mirParms->objZ), -1.); // rotation matrix by Z than by A: Matrix M, *Mptr = NULL; - if(A != 0.f || Z != 0.f){ - M.l1 = make_float3(cA, sA*cZ, sA*sZ); + if((fabs(A) > FLT_EPSILON) || (fabs(Z) > FLT_EPSILON)){ + /*M.l1 = make_float3(cA, sA*cZ, sA*sZ); M.l2 = make_float3(-sA, cA*cZ, cA*sZ); - M.l3 = make_float3(0.f, -sZ, cZ); + M.l3 = make_float3(0.f, -sZ, cZ);*/ + M.l1 = make_float3(cA, 0.f, sA); + M.l2 = make_float3(sA*sZ, cZ, -sZ*cA); + M.l3 = make_float3(-sA*cZ, sZ, cZ*cA); Mptr = &M; } // textures for linear interpolation diff --git a/src/include/usefull_macros.h b/src/include/usefull_macros.h index 6fdf849..05f50f8 100644 --- a/src/include/usefull_macros.h +++ b/src/include/usefull_macros.h @@ -56,6 +56,13 @@ // unused arguments with -Wall -Werror #define _U_ __attribute__((__unused__)) +#ifndef FLT_EPSILON +#define FLT_EPSILON (1.1920928955078125e-07) +#endif +#ifndef DBL_EPSILON +#define DBL_EPSILON (2.2204460492503131e-16) +#endif + /* * Coloured messages output */ diff --git a/src/include/wrapper.h b/src/include/wrapper.h index 021f1b3..07d7f9d 100644 --- a/src/include/wrapper.h +++ b/src/include/wrapper.h @@ -29,6 +29,12 @@ #include "mkHartmann.h" +// 1./sqrt(2) +#define DIVSQ2 0.7071068f +// 2*(1+2/sqrt(2)) -- (1+2/sqrt(2)) taken from linear gradient: +// 1 = (2 + 4/sqrt(2)) / (2*x) ==> x = 1 + 2/sqrt(2) +#define GRAD_WEIGHT 4.82842712f + static const size_t MB = 1024*1024; // convert bytes to MB void noCUDA(); diff --git a/src/locale/ru/LC_MESSAGES/mkHartmann.mo b/src/locale/ru/LC_MESSAGES/mkHartmann.mo index 472b73a..770b2e0 100644 Binary files a/src/locale/ru/LC_MESSAGES/mkHartmann.mo and b/src/locale/ru/LC_MESSAGES/mkHartmann.mo differ diff --git a/src/locale/ru/messages.po b/src/locale/ru/messages.po index 4c86ece..2135700 100644 --- a/src/locale/ru/messages.po +++ b/src/locale/ru/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-06-01 13:49+0300\n" +"POT-Creation-Date: 2016-06-06 13:44+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/src/locale/ru/ru.po~ b/src/locale/ru/ru.po~ index d47b75c..3013d09 100644 --- a/src/locale/ru/ru.po~ +++ b/src/locale/ru/ru.po~ @@ -3,745 +3,386 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2015-05-05 10:39+0300\n" - "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" - "Last-Translator: FULL NAME \n" + "POT-Creation-Date: 2016-06-01 13:36+0300\n" + "PO-Revision-Date: 2013-01-14 18:49+0400\n" + "Last-Translator: Edward V. Emelianov \n" "Language-Team: LANGUAGE \n" - "Language: \n" + "Language: Russian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=koi8-r\n" "Content-Transfer-Encoding: 8bit\n" - "#-#-#-#-# ru.po (PACKAGE VERSION) #-#-#-#-#\n" - "#-#-#-#-# ruru.po (PACKAGE VERSION) #-#-#-#-#\n" -#. "\tОпции:\n" -#: usage.c:128 -#, c-format -msgid "\tOptions:\n" -msgstr "\tОпции:\n" - -#. "Обнаружен работающий процесс (pid=%d), выход.\n" -#: takepic.c:222 takepic.c:234 -#, c-format +#. / "\n\nВсе тесты пройдены успешно" +#: wrapper.c:136 +#, fuzzy msgid "\n" - "Found running process (pid=%d), exit.\n" + "\n" + "All tests succeed" msgstr "\n" - "Обнаружен работающий процесс (pid=%d), выход.\n" + "\n" + "Все тесты пройдены успешно\n" + "\n" -#. "\nЗатвор " -#: takepic.c:409 +#. / " суммарная = " +#: wrapper.c:101 #, c-format -msgid "\n" - "The shutter is " -msgstr "\n" - "Затвор " +msgid " total= " +msgstr " суммарная = " -#. "%d секунд до окончания паузы\n" -#: takepic.c:658 +#: diaphragm.c:78 +msgid "\"bbox\" must contain an array of four doubles!\n" +msgstr "" + +#: diaphragm.c:128 +msgid "\"center\" must contain an array of two doubles!\n" +msgstr "" + +#: diaphragm.c:116 +msgid "\"radius\" array must consist of two doubles!\n" +msgstr "" + +#: diaphragm.c:121 +msgid "\"radius\" must be a number or an array of two doubles!\n" +msgstr "" + +#. / "%s: необходим аргумент!" +#: parseargs.c:485 #, c-format -msgid "%d seconds till pause ends\n" -msgstr "%d секунд до окончания паузы\n" +msgid "%s: argument needed!" +msgstr "" -#. "Не введено никаких параметров" -#: usage.c:311 -msgid "Any parameters are absent" -msgstr "Не введено никаких параметров" +#. update old width counter +#. check it +#: mkHartmann.c:142 +msgid "All rows must contain equal number of columns" +msgstr "" -#. "Поле изображения: (0, %d)(0, %d)" -#: takepic.c:442 +#. / "Тест выделения 100МБ памяти пройден успешно\n" +#: wrapper.c:133 #, c-format -msgid "Array field: (0, %d)(0, %d)" -msgstr "Поле изображения: (0, %d)(0, %d)" +msgid "Allocation test for 100MB of memory passed\n" +msgstr "Тест выделения 100МБ памяти пройден успешно\n" -#: macros.c:183 +#. nothing found - wrong format +#: cmdlnopts.c:226 +msgid "Bad keyword!" +msgstr "" + +#: cmdlnopts.c:113 +msgid "CCD height (in millimeters)" +msgstr "" + +#: cmdlnopts.c:112 +msgid "CCD width (in millimeters)" +msgstr "" + +#. / "Ошибка выделения памяти" +#: wrapper.c:77 +msgid "Can't allocate memory" +msgstr "Ошибка выделения памяти" + +#: mkHartmann.c:221 +msgid "Can't build mirror dZ arrays" +msgstr "" + +#. / "Не могу построить матрицу случайных чисел" +#: mkHartmann.c:211 +msgid "Can't build random matrix" +msgstr "" + +#: mkHartmann.c:102 +#, c-format +msgid "Can't close file %s" +msgstr "" + +#: usefull_macros.c:181 msgid "Can't close mmap'ed file" -msgstr "Не могу закрыть mmap'нутый файл" +msgstr "" -#. "Не могу удалить PID-файл" -#: takepic.c:136 -msgid "Can't delete PIDfile" -msgstr "Не могу удалить PID-файл" +#. / "Ошибка определения доступной памяти" +#: wrapper.c:75 +msgid "Can't determine free memory" +msgstr "Ошибка определения доступной памяти" -#. "Не могу переместить турель" -#: takepic.c:268 -msgid "Can't move turret" -msgstr "Не могу переместить турель" +#. / "Ошибка получения свойств видеоядра" +#: wrapper.c:73 +msgid "Can't get properties" +msgstr "Ошибка получения свойств видеоядра" -#: macros.c:192 +#. Get settings +#: usefull_macros.c:283 +#, fuzzy +msgid "Can't get settings" +msgstr "Ошибка получения свойств видеоядра" + +#: usefull_macros.c:190 +#, fuzzy msgid "Can't munmap" -msgstr "Не могу вызывать munmap" +msgstr "Ошибка получения свойств видеоядра" -#: macros.c:177 +#. / "Не могу открыть" +#: wrapper.c:155 +#, fuzzy +msgid "Can't open" +msgstr "Ошибка получения свойств видеоядра" + +#: usefull_macros.c:175 #, c-format msgid "Can't open %s for reading" -msgstr "Не могу открыть %s для чтения" +msgstr "" -#. "Не могу открыть окно OpenGL, просмотр будет недоступен!" -#: takepic.c:631 -msgid "Can't open OpenGL window, image preview will be inaccessible" -msgstr "Не могу открыть окно OpenGL, просмотр будет недоступен!" +#: mkHartmann.c:86 +#, fuzzy, c-format +msgid "Can't open file %s" +msgstr "Ошибка получения свойств видеоядра" -#. "Не могу открыть камеру, завершаю" -#: takepic.c:347 -msgid "Can't open camera device, exit" -msgstr "Не могу открыть камеру, завершаю" +#. / "Не могу прочесть" +#: wrapper.c:160 +msgid "Can't read" +msgstr "" -#. "Не могу открыть файл устройства %s: %s" -#: takepic.c:116 -#, c-format -msgid "Can't open device file %s: %s" -msgstr "Не могу открыть файл устройства %s: %s" +#: wrapper.c:91 +msgid "Can't run CUDA!" +msgstr "" -#. "Не могу открыть файл журнала статистики" -#: takepic.c:400 -msgid "Can't open statistics log file" -msgstr "Не могу открыть журнал статистики" +#: usefull_macros.c:293 +#, fuzzy +msgid "Can't set settings" +msgstr "Ошибка получения свойств видеоядра" -#. "Не могу открыть файл журнала температур" -#: takepic.c:386 -msgid "Can't open temperature log file" -msgstr "Не могу открыть журнал температур" +#: usefull_macros.c:214 +msgid "Can't setup console" +msgstr "" -#. "Не могу открыть турель" -#: takepic.c:251 -msgid "Can't open turret" -msgstr "Не могу открыть турель" - -#. "Не могу сохранить файл" -#: takepic.c:618 -msgid "Can't save file" -msgstr "Не могу сохранить файл" - -#: macros.c:179 +#. file not exist but some error occured +#: mkHartmann.c:73 usefull_macros.c:177 #, c-format msgid "Can't stat %s" -msgstr "Не могу выполнить stat для %s" +msgstr "" -#. "Захват кадра %d, время экспозиции - %g секунд\n" -#: takepic.c:546 +#: mkHartmann.c:69 #, c-format -msgid "Capture frame %d, exp time - %g sec\n" -msgstr "Захват кадра %d, время экспозиции - %g секунд\n" +msgid "Can't write to %s" +msgstr "" -#. "Изменение температуры холодильника" -#: takepic.c:428 -msgid "Changing of cooler setpoint" -msgstr "Изменение температуры холодильника" +#: diaphragm.c:224 +msgid "Corrupted file: bad holes format!" +msgstr "" -#. "Холодильник отключен" -#: camtools.c:137 -msgid "Cooler is off" -msgstr "Холодильник отключен" +#: diaphragm.c:212 +msgid "Corrupted file: no holes found!" +msgstr "" -#. "Целевая температура: %g\n" -#: camtools.c:132 +#: cmdlnopts.c:160 +msgid "Degrees should be less than 360" +msgstr "" + +#: diaphragm.c:227 +msgid "Didn't find any holes in json file!" +msgstr "" + +#. / "Ошибка в инициализации CUDA!" +#: wrapper.c:94 +msgid "Error in CUDA initialisation!" +msgstr "Ошибка в инициализации CUDA!" + +#: mkHartmann.c:163 #, c-format -msgid "Cooler setpoint: %g\n" -msgstr "Целевая температура: %g\n" +msgid "Error reading data: read %d numbers instead of %d" +msgstr "" -#. "Съемка темновых" -#: usage.c:335 -msgid "Dark frames" -msgstr "Съемка темновых" +#: diaphragm.c:96 +msgid "Error: NULL instead of aHole structure!\n" +msgstr "" -#. "Устройство не найдено" -#: takepic.c:108 -msgid "Device not found" -msgstr "Устройство не найдено" +#: mkHartmann.c:156 +msgid "File modified in runtime?" +msgstr "" -#. "Отобразить на экране полученное изображение" -#: usage.c:140 -msgid "Display last image" -msgstr "Отобразить на экране полученное изображение" +#. / "В вычислениях по возможности будет использоваться GPU\n" +#: wrapper.c:68 +msgid "In computations will try to use GPU\n" +msgstr "В вычислениях по возможности будет использоваться GPU\n" -#. "не засвечивать матрицу перед экспозицией" -#: usage.c:143 -msgid "Don't flash CCD chip before expose" -msgstr "не засвечивать матрицу перед экспозицией" +#. / "Целое вне допустимого диапазона" +#: parseargs.c:86 +msgid "Integer out of range" +msgstr "" -#. "Не могу вызывать ioctl" -#: takepic.c:123 -msgid "Error in ioctl" -msgstr "Не могу вызывать ioctl" +#: diaphragm.c:155 +msgid "Invalid holes array format!\n" +msgstr "" -#. "Ошибка перехода в спящий режим!" -#: takepic.c:372 -msgid "Error: sleepless night!" -msgstr "Ошибка перехода в спящий режим!" +#: diaphragm.c:207 +msgid "JSON file MUST contain floating point field \"Z\" or \"maskz\" with " + "mask's coordinate" +msgstr "" -#. "Не заданы параметры экспозиции, отключаюсь" -#: takepic.c:339 -msgid "Expose parameters aren't specified, exit" -msgstr "Не заданы параметры экспозиции, отключаюсь" - -#. "Время экспозиции: %dмс" -#: usage.c:517 +#. / "ПАМЯТЬ: свободная = " +#: wrapper.c:98 #, c-format -msgid "Exposure time: %dms" -msgstr "Время экспозиции: %dмс" +msgid "MEMORY: free = " +msgstr "ПАМЯТЬ: свободная = " -#. "Скорость вентилятора должна быть в пределе 0..3" -#: usage.c:354 -msgid "Fan speed should be in interval 0..3" -msgstr "Скорость вентилятора должна быть в пределе 0..3" +#: mkHartmann.c:148 +msgid "Matrix must be square" +msgstr "" -#. "Установить скорость вращения вентиляторов в %d" -#: usage.c:356 -#, c-format -msgid "Fan speed would be set to %d" -msgstr "Установить скорость вращения вентиляторов в %d" - -#. "Видимое поле: %s" -#: takepic.c:440 -#, c-format -msgid "Field of view: %s" -msgstr "Видимое поле: %s" - -#. "Файл записан в '%s'" -#: takepic.c:622 -#, c-format -msgid "File saved as '%s'" -msgstr "Файл записан в '%s'" - -#. "Обнаружена камера '%s' с датчиком '%s'" -#: takepic.c:354 -#, c-format -msgid "Find camera '%s' with sensor '%s'" -msgstr "Обнаружена камера '%s' с датчиком '%s'" - -#. Полное журналирование статистики -#: usage.c:400 -msgid "Full statistics logging" -msgstr "Полное журналирование статистики" - -#. "Получен сигнал %d, отключаюсь.\n" -#: takepic.c:133 -#, c-format -msgid "Get signal %d, quit.\n" -msgstr "Получен сигнал %d, отключаюсь.\n" - -#. "Получить информацию о турели" -#: usage.c:362 -msgid "Get turret's info" -msgstr "Получить информацию о турели" - -#. "Установка заданной температуры" -#: camtools.c:140 -msgid "Go to setpoint" -msgstr "Установка заданной температуры" - -#. "Спящий режим" -#: usage.c:465 -msgid "Go to sleep" -msgstr "Спящий режим" - -#. "Гор. биннинг: %d" -#: usage.c:385 -#, c-format -msgid "Horisontal binning: %d" -msgstr "Гор. биннинг: %d" - -#. "Игнорирую аргумент[ы]:\n" -#: usage.c:545 -#, c-format -msgid "Ignore argument[s]:\n" -msgstr "Игнорирую аргумент[ы]:\n" - -#. "Статистика по изображению:\n" -#: camtools.c:170 -#, c-format -msgid "Image stat:\n" -msgstr "Статистика по изображению\n" - -#. "Тип изображения - %s" -#: usage.c:390 -#, c-format -msgid "Image type - %s" -msgstr "Тип изображения - %s" - -#. "Название прибора - %s" -#: usage.c:395 -#, c-format -msgid "Instrument name - %s" -msgstr "Название прибора - %s" - -#. "Поддержание заданной температуры" -#: camtools.c:143 -msgid "Keeping setpoint" -msgstr "Поддержание заданной температуры" - -#: macros.c:182 +#: usefull_macros.c:180 msgid "Mmap error for input" -msgstr "Ошибка mmap для входных данных" +msgstr "" -#. "Переместить турель в позицию %d" -#: usage.c:370 -#, c-format -msgid "Move turret into %d" -msgstr "Переместить турель в позицию %d" - -#: macros.c:175 +#: usefull_macros.c:173 msgid "No filename given!" -msgstr "Не указано имя файла!" +msgstr "" -#. "Не засвечивать камеру до экспозиции" -#: usage.c:349 -msgid "No pre-expose flash" -msgstr "Не засвечивать камеру до экспозиции" +#: mkHartmann.c:79 +msgid "No output filename given" +msgstr "" -#. "Имя объекта - %s" -#: usage.c:428 +#. / "Приложение скомпилировано без поддержки CUDA" +#: wrapper.c:41 wrapper.c:50 wrapper.c:60 +msgid "Tool was compiled without CUDA support" +msgstr "" + +#. / "В вычислениях используется только CPU\n" +#: wrapper.c:122 +msgid "Will use only CPU in computations\n" +msgstr "В вычислениях используется только CPU\n" + +#: diaphragm.c:102 +msgid "Wrong \"shape\" value" +msgstr "" + +#: diaphragm.c:198 +msgid "Wrong JSON file" +msgstr "" + +#. / "Неправильный аргумент \"%s\" параметра \"%s\"" +#: parseargs.c:490 #, c-format -msgid "Object name - %s" -msgstr "Имя объекта - %s" +msgid "Wrong argument \"%s\" of parameter \"%s\"" +msgstr "" -#. "Наблюдатели: %s" -#: usage.c:433 +#: mkHartmann.c:134 +msgid "Wrong file: should be matrix of float data separated by spaces" +msgstr "" + +#: cmdlnopts.c:132 +msgid "Wrong float number format!" +msgstr "" + +#: cmdlnopts.c:307 #, c-format -msgid "Observers: %s" -msgstr "Наблюдатели: %s" +msgid "Wrong format of image type: %c" +msgstr "" -#. "Работать с камерой номер %d" -#: usage.c:415 +#. wrong format +#: cmdlnopts.c:206 +msgid "Wrong format: no value for keyword" +msgstr "" + +#. amount of pcount and/or scount wrong +#. / "Неправильный формат строки помощи" +#: parseargs.c:56 +msgid "Wrong helpstring!" +msgstr "" + +#: diaphragm.c:217 +msgid "Wrong hole descriptor" +msgstr "" + +#. / "Неправильный параметр: %s" +#: parseargs.c:480 #, c-format -msgid "Open camera number %d" -msgstr "Работать с камерой номер %d" - -#. "Пауза: %dс" -#: usage.c:446 -#, c-format -msgid "Pause: %ds" -msgstr "Пауза: %dс" - -#. "Номер позиции должен быть больше 0" -#: usage.c:368 -msgid "Position number should be positive value" -msgstr "Номер позиции должен быть больше 0" - -#. pre-expose -#. "Предварительная экспозиция" -#: takepic.c:466 -msgid "Pre-expose" -msgstr "Предварительная экспозиция" - -#. "Нажмите Ctrl+C еще %d раз[а], чтобы прервать считывание\n" -#: takepic.c:154 -#, c-format -msgid "Press Ctrl+C %d time[s] more to interrupt reading\n" -msgstr "Нажмите Ctrl+C еще %d раз[а], чтобы прервать считывание\n" - -#. "Автор программы: %s" -#: usage.c:323 -#, c-format -msgid "Program author: %s" -msgstr "Автор программы: %s" - -#. "Название программы: %s" -#: usage.c:438 -#, c-format -msgid "Program name: %s" -msgstr "Название программы: %s" - -#. "Считывание изображения:" -#: takepic.c:575 -#, c-format -msgid "Read image: " -msgstr "Считывание изображения: " - -#. "Ошибка считывания: %s\n" -#: takepic.c:490 takepic.c:581 -#, c-format -msgid "Readout error: %s\n" -msgstr "Ошибка считывания: %s\n" - -#. "Скорость считывания - беззнаковое целое!" -#: usage.c:451 -msgid "Readout speed should be unsigned int!" -msgstr "Скорость считывания - беззнаковое целое!" - -#. "Требуемая позиция больше максимальной" -#: takepic.c:263 -msgid "Required position greater then max" -msgstr "ребуемая позиция больше максимальной" - -#. "Полный сброс" -#: usage.c:459 -msgid "Reset" -msgstr "Полный сброс" - -#. "Сохранение журнала температур" -#: usage.c:406 -msgid "Save temperature log" -msgstr "Сохранение журнала температур" - -#. "Серия из %d кадров" -#: usage.c:423 -#, c-format -msgid "Series of %d frames" -msgstr "Серия из %d кадров" - -#. "отключить холодильник" -#: usage.c:134 usage.c:329 -msgid "Set cooler off" -msgstr "отключить холодильник" - -#. "Устанавливаю скорость вращения вентиляторов в %d\n" -#: camtools.c:119 -#, c-format -msgid "Set fan speed %d\n" -msgstr "Устанавливаю скорость вращения вентиляторов в %d\n" - -#. "Установить скорость вентиляторов в F (0..3)" -#: usage.c:146 -msgid "Set fan speed to F (0..3)" -msgstr "Установить скорость вентиляторов в F (0..3)" - -#. "Установить интервал логгирования в %d секунд" -#: usage.c:377 -#, c-format -msgid "Set logging interval to %d seconds" -msgstr "Установить интервал логгирования в %d секунд" - -#. "Установить температуру: %.3f" -#: usage.c:486 -#, c-format -msgid "Set temperature: %.3f" -msgstr "Установить температуру: %.3f" - -#. "Отключение холодильника" -#: takepic.c:422 -msgid "Switch cooler off" -msgstr "Отключение холодильника" - -#. "Температура ниже допустимой" -#: takepic.c:431 -msgid "The temperature setpoint is too low" -msgstr "Температура ниже допустимой" - -#. "Максимальная (MAX) и текущая (CUR) позиции турели:\n" -#: takepic.c:258 -#, c-format -msgid "Turret MAXimum position and CURrent position:\n" -msgstr "Максимальная (MAX) и текущая (CUR) позиции турели:\n" - -#. "Номер турели должен быть больше 0" -#: usage.c:500 -msgid "Turret number should be positive value" -msgstr "Номер турели должен быть больше 0" - -#. "Статус неизвестен" -#: camtools.c:146 -msgid "Unknown status" -msgstr "Хрен знает что" - -#. "Использование:\t%s [опции] [префикс выходных файлов]\n" -#: usage.c:125 -#, c-format -msgid "Usage:\t%s [options] [output files prefix]\n" -msgstr "Использование:\t%s [опции] [префикс выходных файлов]\n" - -#. "Значение time-interval должно быть натуральным числом" -#: usage.c:375 -msgid "Value of time-interval must be non-zero positive" -msgstr "Значение time-interval должно быть натуральным числом" - -#. "Верт. биннинг: %d" -#: usage.c:494 -#, c-format -msgid "Vertical binning: %d" -msgstr "Верт. биннинг: %d" - -#. "Подождите завершения перемещения турели " -#: takepic.c:273 -#, c-format -msgid "Wait, while turret is moving " -msgstr "Подождите завершения перемещения турели " - -#. "Активировать камеру" -#: usage.c:508 -msgid "Wakeup camera" -msgstr "Активировать камеру" - -#. "Отображение снятых кадров" -#: usage.c:341 -msgid "Will show images" -msgstr "Отображение снятых кадров" - -#. "Работать с турелью %d" -#: usage.c:502 -#, c-format -msgid "Work with turret %d" -msgstr "Работать с турелью %d" - -#. "Неверный" -#: usage.c:382 usage.c:491 -msgid "Wrong" -msgstr "Неверный" - -#. "Неверный номер камеры: %s" -#: usage.c:412 -#, c-format -msgid "Wrong camera number: %s" -msgstr "Неверный номер камеры: %s" - -#. "Неверное время экспозиции: %s" -#: usage.c:514 -#, c-format -msgid "Wrong exposure time: %s" -msgstr "Неверное время экспозиции: %s" - -#. "Неверное кол-во кадров: %s" -#: usage.c:420 -#, c-format -msgid "Wrong frames number in series: %s" -msgstr "Неверное кол-во кадров: %s" - -#. "Неверная нижняя граница: %s" -#: usage.c:104 -#, c-format -msgid "Wrong lower border: %s" -msgstr "Неверная нижняя граница: %s" - -#. "Неверная пауза: %s" -#: usage.c:443 -#, c-format -msgid "Wrong pause length: %s" -msgstr "Неверная пауза: %s" - -#. "Неверное значение температуры: %s (должно быть от -35 до 30)" -#: usage.c:482 -#, c-format -msgid "Wrong temperature: %s (must be from -35 to 30)" -msgstr "Неверное значение температуры: %s (должно быть от -35 до 30)" - -#. "Неверная верхняя граница: %s" -#: usage.c:109 -#, c-format -msgid "Wrong upper border: %s" -msgstr "Неверная верхняя граница: %s" - -#. "Диапазон по X: [%d, %d]" -#: usage.c:522 -#, c-format -msgid "X range: [%d, %d]" -msgstr "Диапазон по X: [%d, %d]" - -#. "Диапазон по Y: [%d, %d]" -#: usage.c:527 -#, c-format -msgid "Y range: [%d, %d]" -msgstr "Диапазон по Y: [%d, %d]" - -#. -255. - there's no thermometer on hot side -#. "В вашем светоприемнике нет \"горячего\" термометра" -#: camtools.c:105 -msgid "Your camera have no hot temperature sensor\n" -msgstr "В вашем светоприемнике нет \"горячего\" термометра\n" - -#. "заткрыть затвор" -#: usage.c:243 -msgid "close shutter" -msgstr "заткрыть затвор" - -#. "закрыт\n" -#: takepic.c:415 -#, c-format -msgid "closed\n" -msgstr "закрыт\n" - -#. "не очищать матрицу после считывания" -#: usage.c:234 -msgid "don't flush ccd after expose" -msgstr "не очищать матрицу после считывания" - -#. "не открывать устройство, лишь отобразить шапку FITS" -#: usage.c:246 -msgid "don't open camera device, just show FITS header" -msgstr "не открывать устройство, лишь отобразить шапку FITS" - -#. "не сохранять изображения, лишь вести запись статистки" -#: usage.c:167 -msgid "don't save images, only make all-stat log" -msgstr "не сохранять изображения, лишь вести запись статистки" - -#. "отразить изображение горизонтально (относительно оси Y)" -#: usage.c:231 -msgid "flip image horizontally (around Y axe)" -msgstr "отразить изображение горизонтально (относительно оси Y)" - -#. "отразить изображение вертикально (относительно оси X)" -#: usage.c:228 -msgid "flip image vertically (around X axe)" -msgstr "отразить изображение вертикально (относительно оси X)" - -#. "Полный сброс" -#: usage.c:194 -msgid "full reset" -msgstr "Полный сброс" - -#. получить сведения о турели -#: usage.c:149 -msgid "get turret's parameters" -msgstr "получить сведения о турели" - -#. "перейти в спящий режим" -#: usage.c:197 -msgid "go to sleeping mode" -msgstr "перейти в спящий режим" - -#. "биннинг N пикселей по горизонтали" -#: usage.c:158 -msgid "horizontal binning to N pixels" -msgstr "биннинг N пикселей по горизонтали" - -#. "тип изображения" -#: usage.c:161 -msgid "image type" -msgstr "тип изображения" - -#. "название прибора" -#: usage.c:164 -msgid "instrument name" -msgstr "название прибора" - -#. "выполнить предварительную нулевую экспозицию для очистки матрицы" -#: usage.c:237 -msgid "make a preliminary zero exposition for cleaning CCD" -msgstr "выполнить предварительную нулевую экспозицию для очистки матрицы" - -#. "выдержать ptime секунд между экспозициями" -#: usage.c:188 -msgid "make pause for ptime seconds between expositions" -msgstr "выдержать ptime секунд между экспозициями" - -#. "N кадров в серии" -#: usage.c:176 -msgid "make series of N frames" -msgstr "N кадров в серии" - -#. "вести запись рабочих температур в файл temp_log" -#: usage.c:170 -msgid "make temperatures logging to file temp_log" -msgstr "вести запись рабочих температур в файл temp_log" - -#. "Ошибка выделения памяти!" -#: takepic.c:480 takepic.c:509 -msgid "malloc() failed!" -msgstr "Ошибка выделения памяти!" - -#. "не открывать затвор при экспозиции (\"темновые\")" -#: usage.c:137 -msgid "not open shutter when exposing (\"dark frames\")" -msgstr "не открывать затвор при экспозиции (\"темновые\")" - -#. "не сохранять изображение, а только отобразить статистику" -#: usage.c:200 -msgid "not save image, just show statistics" -msgstr "не сохранять изображение, а только отобразить статистику" - -#. "название объекта" -#: usage.c:179 -msgid "object name" -msgstr "название объекта" - -#. "имена наблюдателей" -#: usage.c:182 -msgid "observers' names" -msgstr "имена наблюдателей" - -#. "название программы наблюдений" -#: usage.c:185 -msgid "observing program name" -msgstr "название программы наблюдений" - -#. "только задать/получить температуру" -#. "только отобразить/задать температуру" -#: usage.c:203 usage.c:475 -msgid "only set/get temperature" -msgstr "только задать/получить температуру" - -#. "открыт\n" -#: takepic.c:412 -#, c-format -msgid "open\n" -msgstr "открыт\n" - -#. "открыть затвор" -#: usage.c:240 -msgid "open shutter" -msgstr "открыть затвор" - -#. "автор программы" -#: usage.c:131 -msgid "program author" -msgstr "автор программы" - -#. "возобновить питание" -#: usage.c:215 -msgid "resume system" -msgstr "возобновить питание" - -#. "выбрать диапазон для считывания" -#: usage.c:221 usage.c:224 -msgid "select clip region" -msgstr "выбрать диапазон для считывания" - -#. "время экспозиции exptime мс" -#: usage.c:218 -msgid "set exposure time to exptime ms" -msgstr "время экспозиции exptime мс" - -#. "установить скорость считывания в N" -#: usage.c:191 -msgid "set readout speed to N" -msgstr "установить скорость считывания в N" - -#. переместить турель в N-ю позицию -#: usage.c:152 -msgid "set turret to Nth position" -msgstr "переместить турель в N-ю позицию" - -#. установить номер турели в N -#: usage.c:212 -msgid "set turret's number to N" -msgstr "установить номер турели в N" - -#. "задать рабочую температуру degr градусов" -#: usage.c:206 -msgid "set work temperature to degr C" -msgstr "задать рабочую температуру degr градусов" - -#. "интервал времени между последовательными записями в лог и HISTORY (в секундах)" -#: usage.c:155 -msgid "time interval between sequential writings to log & HISTORY (in " - "seconds)" -msgstr "интервал времени между последовательными записями в лог и HISTORY (в " - "секундах)" - -#. "биннинг N пикселей по вертикали" -#: usage.c:209 -msgid "vertical binning to N pixels" -msgstr "биннинг N пикселей по вертикали" - -#. "работать в 12-битном режиме" -#: usage.c:249 -msgid "work in a 12-bit ADC mode" -msgstr "работать в 12-битном режиме" - -#. "работать с N-й камерой" -#: usage.c:173 -msgid "work with Nth camera" -msgstr "работать с N-й камерой" - -msgid "Can't init mutex!" -msgstr "Не могу инициировать взаимное исключение!" - -msgid "Error removing from list" -msgstr "Ошибка удаления из списка" - -msgid "can't cancel a thread!" -msgstr "Не могу отменить выполнение потока!" +msgid "Wrong parameter: %s" +msgstr "" + +#: diaphragm.c:35 +msgid "Wrong value! Get non-number!\n" +msgstr "" + +#: cmdlnopts.c:102 +msgid "add random noice to mirror surface deviations" +msgstr "" + +#: cmdlnopts.c:111 +msgid "amount of iterations by N-photons" +msgstr "" + +#: cmdlnopts.c:100 +msgid "amount of photons falled to one pixel of matrix by one iteration" +msgstr "" + +#: cmdlnopts.c:103 +msgid "amplitude of random noice (default: 1e-8)" +msgstr "" + +#: cmdlnopts.c:104 +msgid "filename for mirror surface deviations (in microns!)" +msgstr "" + +#: cmdlnopts.c:115 +msgid "force CPU using iven if have videocard" +msgstr "" + +#: cmdlnopts.c:109 +msgid "image type, arg=[jfpt] (Jpeg, Fits, Png, Tiff)" +msgstr "" + +#: cmdlnopts.c:110 +msgid "name of JSON file with holes description" +msgstr "" + +#: cmdlnopts.c:114 +msgid "output image file name" +msgstr "" + +#: cmdlnopts.c:107 +msgid "print matrices on screen" +msgstr "" + +#: cmdlnopts.c:99 +msgid "resulting image size" +msgstr "" + +#: cmdlnopts.c:105 +msgid "rewrite output file if exists" +msgstr "" + +#: cmdlnopts.c:108 +msgid "save intermediate results to images" +msgstr "" + +#: cmdlnopts.c:106 +msgid "save matrices to file arg" +msgstr "" + +#: cmdlnopts.c:84 +msgid "set mirror parameters, arg=[diam=num:foc=num:Zincl=ang:Aincl=ang:" + "Aobj=ang:Zoobj=ang:CCD=num]\n" + "\t\t\tALL DEGREES ARE IN FORMAT [+-][DDd][MMm][SS.S] like " + "-10m13.4 !\n" + "\t\tdiam - diameter of mirror\n" + "\t\tfoc - mirror focus ratio\n" + "\t\tZincl - inclination from Z axe\n" + "\t\tAincl - azimuth of inclination\n" + "\t\tAobj - azimuth of object\n" + "\t\tZobj - zenith of object\n" + "\t\tccd - Z-coordinate of light receiver" +msgstr "" + +#: cmdlnopts.c:96 +msgid "show this help" +msgstr "" + +#: cmdlnopts.c:97 +msgid "size of initial array of surface deviations" +msgstr "" + +#: cmdlnopts.c:98 +msgid "size of interpolated array of surface deviations" +msgstr "" diff --git a/src/mkHartmann.c b/src/mkHartmann.c index 6259210..21f4c1a 100644 --- a/src/mkHartmann.c +++ b/src/mkHartmann.c @@ -256,6 +256,7 @@ int main(int argc, char **argv){ // CCD bounding box BBox CCD = {-5e-4*G->CCDW, -5e-4*G->CCDH, 1e-3*G->CCDW, 1e-3*G->CCDH}; + DBG("obj A=%f, Z=%f",M->objA, M->objZ); green("Make %d iterations by %d photons on each", G->N_iter, N_phot); printf("\n"); for(x = 0; x < G->N_iter; ++x){