Xmipp  v3.23.11-Nereus
Public Member Functions | Public Attributes | List of all members
ProgGpuCorrelation Class Reference

#include <xmipp_gpu_correlation.h>

Inheritance diagram for ProgGpuCorrelation:
Inheritance graph
[legend]
Collaboration diagram for ProgGpuCorrelation:
Collaboration graph
[legend]

Public Member Functions

void readParams ()
 Read argument from command line. More...
 
void show ()
 Show. More...
 
void defineParams ()
 Define parameters. More...
 
void run ()
 
- Public Member Functions inherited from XmippProgram
const char * getParam (const char *param, int arg=0)
 
const char * getParam (const char *param, const char *subparam, int arg=0)
 
int getIntParam (const char *param, int arg=0)
 
int getIntParam (const char *param, const char *subparam, int arg=0)
 
double getDoubleParam (const char *param, int arg=0)
 
double getDoubleParam (const char *param, const char *subparam, int arg=0)
 
float getFloatParam (const char *param, int arg=0)
 
float getFloatParam (const char *param, const char *subparam, int arg=0)
 
void getListParam (const char *param, StringVector &list)
 
int getCountParam (const char *param)
 
bool checkParam (const char *param)
 
bool existsParam (const char *param)
 
void addParamsLine (const String &line)
 
void addParamsLine (const char *line)
 
ParamDefgetParamDef (const char *param) const
 
virtual void quit (int exit_code=0) const
 
virtual int tryRun ()
 
void initProgress (size_t total, size_t stepBin=60)
 
void setProgress (size_t value=0)
 
void endProgress ()
 
void processDefaultComment (const char *param, const char *left)
 
void setDefaultComment (const char *param, const char *comment)
 
virtual void initComments ()
 
void setProgramName (const char *name)
 
void addUsageLine (const char *line, bool verbatim=false)
 
void clearUsage ()
 
void addExampleLine (const char *example, bool verbatim=true)
 
void addSeeAlsoLine (const char *seeAlso)
 
void addKeywords (const char *keywords)
 
const char * name () const
 
virtual void usage (int verb=0) const
 
virtual void usage (const String &param, int verb=2)
 
int version () const
 
virtual void show () const
 
virtual void read (int argc, const char **argv, bool reportErrors=true)
 
virtual void read (int argc, char **argv, bool reportErrors=true)
 
void read (const String &argumentsLine)
 
 XmippProgram ()
 
 XmippProgram (int argc, const char **argv)
 
virtual ~XmippProgram ()
 

Public Attributes

MetaDataVec SF
 
MetaDataVec SFexp
 
- Public Attributes inherited from XmippProgram
bool doRun
 
bool runWithoutArgs
 
int verbose
 Verbosity level. More...
 
int debug
 

Additional Inherited Members

- Protected Member Functions inherited from XmippProgram
void defineCommons ()
 
- Protected Attributes inherited from XmippProgram
int errorCode
 
ProgramDefprogDef
 Program definition and arguments parser. More...
 
std::map< String, CommentListdefaultComments
 
int argc
 Original command line arguments. More...
 
const char ** argv
 

Detailed Description

Definition at line 36 of file xmipp_gpu_correlation.h.

Member Function Documentation

◆ defineParams()

void ProgGpuCorrelation::defineParams ( )
virtual

Define parameters.

Reimplemented from XmippProgram.

Definition at line 536 of file xmipp_gpu_correlation.cpp.

537 {
538 
539  addParamsLine(" -i_ref <md_ref_file> : Metadata file with input reference images");
540  addParamsLine(" -i_exp <md_exp_file> : Metadata file with input experimental images");
541  addParamsLine(" -o <md_out> : Output metadata file");
542  addParamsLine(" [--classify <md_classes_out=\"output_classes.xmd\">] : To generate the aligned output images and write the associated metadata");
543  addParamsLine(" [--keep_best <N=2>] : To keep N aligned images with the highest correlation");
544  addParamsLine(" [--significance <alpha=0.2>] : To use significance with the indicated value");
545  addParamsLine(" [--odir <outputDir=\".\">] : Output directory to save the aligned images");
546  addParamsLine(" [--maxShift <s=10>] : Maximum shift allowed (+-this amount)");
547  addParamsLine(" [--simplifiedMd <b=false>] : To generate a simplified metadata with only the maximum weight image stores");
548  addParamsLine(" [--sizePad <pad=100>] ");
549  addParamsLine(" [--device <dev=0>] : GPU device to use. 0th by default");
550  addUsageLine("Computes the correlation between a set of experimental images with respect "
551  "to a set of reference images with CUDA in GPU");
552 
553 }
void addUsageLine(const char *line, bool verbatim=false)
void addParamsLine(const String &line)

◆ readParams()

void ProgGpuCorrelation::readParams ( )
virtual

Read argument from command line.

Reimplemented from XmippProgram.

Definition at line 494 of file xmipp_gpu_correlation.cpp.

495 {
496 
497  fn_ref = getParam("-i_ref");
498  fn_exp = getParam("-i_exp");
499  fn_out = getParam("-o");
500  generate_out = checkParam("--classify");
501  fn_classes_out = getParam("--classify");
502  significance = checkParam("--significance");
503  simplifiedMd = checkParam("--simplifiedMd");
504  if(significance){
505  alpha=getDoubleParam("--significance");
506  keepN=false;
507  }
508  if(checkParam("--keep_best") && !significance){
509  keepN=true;
510  n_keep=getIntParam("--keep_best");
511  }
512  if(!keepN && !significance){
513  keepN=true;
514  n_keep=getIntParam("--keep_best");
515  }
516  fnDir = getParam("--odir");
517  maxShift = getIntParam("--maxShift");
518  sizePad = getIntParam("--sizePad");
519  int device = getIntParam("--device");
520  gpu = GPU(device);
521 
522 }
double getDoubleParam(const char *param, int arg=0)
const char * getParam(const char *param, int arg=0)
bool checkParam(const char *param)
int getIntParam(const char *param, int arg=0)

◆ run()

void ProgGpuCorrelation::run ( )
virtual

processImage

Reimplemented from XmippProgram.

Definition at line 1337 of file xmipp_gpu_correlation.cpp.

1338 {
1339 
1340  //Setting the cuda device to use
1341  gpu.set();
1342 
1343  //PROJECTION IMAGES
1344  size_t Xdim, Ydim, Zdim, Ndim;
1345  SF.read(fn_ref,NULL);
1346  size_t mdInSize = SF.size();
1347  getImageSize(SF, Xdim, Ydim, Zdim, Ndim);
1348 
1349 
1350  //EXPERIMENTAL IMAGES
1351  SFexp.read(fn_exp,NULL);
1352  size_t mdExpSize = SFexp.size();
1353 
1354  // Generate mask
1355  Mask mask;
1356  mask.type = BINARY_CIRCULAR_MASK;
1357  mask.mode = INNER_MASK;
1358  auto rad = (size_t)std::min(Xdim*0.48, Ydim*0.48);
1359 
1360  int number = rad;
1361  auto *out = new int[5];
1362 
1363  while(true){
1364  if (number%2!=0){
1365  number--;
1366  continue;
1367  }
1368  for (int z=0; z<5; z++)
1369  out[z]=0;
1370  primeFactors(number, out);
1371  if ((out[0]!=0 || out[1]!=0 || out[2]!=0 || out[3]!=0) && out[4]==0){
1372  rad = number;
1373  break;
1374  }
1375  else
1376  number--;
1377  }
1378 
1379  mask.R1 = rad;
1380  mask.resize(Ydim,Xdim);
1382  mask.generate_mask();
1383  int maskCount = mask.get_binary_mask().sum();
1384 
1385  //AJ check the size of the data to avoid exceed the GPU memory
1386  float memory[3]={0, 0, 0}; //total, free, used
1387  cuda_check_gpu_memory(memory);
1388 
1389  int maxGridSize[3];
1390  cuda_check_gpu_properties(maxGridSize);
1391 
1392 
1393  //AJ check_gpu_memory to know how many images we can copy in the gpu memory
1394  float limit=0.4; //0.877; 1.3;
1395  int available_images_proj = mdExpSize; //mdInSize
1396  int available1 = mdExpSize;
1397  int available2 = mdExpSize;
1398  if(Xdim*Ydim*mdExpSize*4*100/memory[1]>limit){ //mdInSize
1399  available1 = floor(memory[1]*(limit/100)/(Xdim*Ydim*4));
1400  }
1401  if(Xdim*2*Ydim*2*mdExpSize>maxGridSize[0]){ //mdInSize
1402  available2 = floor((round(maxGridSize[0]*0.9))/(Xdim*Ydim*2*2));
1403  }
1404  if (available1<available2)
1405  available_images_proj = available1;
1406  else
1407  available_images_proj = available2;
1408 
1409 
1410  //matrix with all the best transformations in CPU
1411  auto *matrixTransCpu = new MultidimArray<float> [mdInSize]; //mdExpSize
1412  for(int i=0; i<mdInSize; i++) //mdExpSize
1413  matrixTransCpu[i].coreAllocate(1, mdExpSize, 3, 3); //mdInSize
1414  auto *matrixTransCpu_mirror = new MultidimArray<float> [mdInSize]; //mdExpSize
1415  for(int i=0; i<mdInSize; i++) //mdExpSize
1416  matrixTransCpu_mirror[i].coreAllocate(1, mdExpSize, 3, 3); //mdInSize
1417 
1418  //correlation matrix
1419  MultidimArray<float> matrixCorrCpu(1, 1, mdInSize, mdExpSize); //mdExpSize, mdInSize
1420  MultidimArray<float> matrixCorrCpu_mirror(1, 1, mdInSize, mdExpSize); //mdExpSize, mdInSize
1421 
1422  //Aux vectors with maximum values of correlation in RT and TR steps
1423  float *max_vector_rt;
1424  float *max_vector_tr;
1425  float *max_vector_rt_mirror;
1426  float *max_vector_tr_mirror;
1427 
1428  //Transformation matrix in GPU and CPU
1429  TransformMatrix<float> transMat_tr;
1430  TransformMatrix<float> transMat_rt;
1431  TransformMatrix<float> transMat_tr_mirror;
1432  TransformMatrix<float> transMat_rt_mirror;
1433 
1434  TransformMatrix<float> resultTR;
1435  TransformMatrix<float> resultRT;
1436 
1437  int firstIdx=0;
1438  bool finish=false;
1439 
1440  mycufftHandle myhandlePadded_tr, myhandleMask_tr, myhandlePolar_tr, myhandleAux_tr, myhandlePaddedB_tr, myhandleMaskB_tr, myhandlePolarB_tr, myhandleAuxB_tr;
1441  mycufftHandle myhandlePadded_rt, myhandleMask_rt, myhandlePolar_rt, myhandleAux_rt, myhandlePaddedB_rt, myhandleMaskB_rt, myhandlePolarB_rt, myhandleAuxB_rt;
1442  mycufftHandle ifftcb;
1443 
1444  myStreamHandle myStreamTR, myStreamRT;
1445  myStreamCreate(myStreamTR);
1446  myStreamCreate(myStreamRT);
1447 
1448 
1449  GpuCorrelationAux d_referenceAux;
1450 
1451  size_t pad_Xdim=2*Xdim-1;
1452  size_t pad_Ydim=2*Ydim-1;
1453 
1454  number = pad_Xdim;
1455  while(true){
1456  if (number%2!=0){
1457  number++;
1458  continue;
1459  }
1460  for (int z=0; z<5; z++)
1461  out[z]=0;
1462  primeFactors(number, out);
1463  if ((out[0]!=0 || out[1]!=0 || out[2]!=0 || out[3]!=0) && out[4]==0){
1464  pad_Xdim = number;
1465  break;
1466  }
1467  else
1468  number++;
1469  }
1470 
1471  pad_Ydim = pad_Xdim;
1472  d_referenceAux.XdimOrig=Xdim;
1473  d_referenceAux.YdimOrig=Ydim;
1474  d_referenceAux.Xdim=pad_Xdim;
1475  d_referenceAux.Ydim=pad_Ydim;
1476  d_referenceAux.XdimPolar=360;
1477  d_referenceAux.YdimPolar=(size_t)mask.R1;
1478 
1479 
1480  StructuresAux myStructureAux_tr, myStructureAux_rt;
1481 
1482  auto iter = SFexp.ids().begin();
1483 
1484  GpuMultidimArrayAtCpu<float> original_image_stack;
1485 
1486  //Loop over the reference images
1487  size_t totalWork=mdInSize*mdExpSize;
1488  size_t workDone=0;
1489  init_progress_bar(totalWork);
1490  size_t lastProgressShown=0;
1491  while(!finish){
1492 
1493  original_image_stack.resize(Xdim,Ydim,1,available_images_proj);
1494 
1495  //Aux vectors with maximum values of correlation in RT and TR steps
1496  cpuMalloc((void**)&max_vector_tr, sizeof(float)*available_images_proj);
1497  cpuMalloc((void**)&max_vector_rt, sizeof(float)*available_images_proj);
1498  cpuMalloc((void**)&max_vector_tr_mirror, sizeof(float)*available_images_proj);
1499  cpuMalloc((void**)&max_vector_rt_mirror, sizeof(float)*available_images_proj);
1500 
1501 
1502  //Transformation matrix in GPU and CPU
1503  transMat_tr.resize(myStreamTR, available_images_proj);
1504  transMat_rt.resize(myStreamRT, available_images_proj);
1505  transMat_tr_mirror.resize(myStreamTR, available_images_proj);
1506  transMat_rt_mirror.resize(myStreamRT, available_images_proj);
1507 
1508  resultTR.resize(myStreamTR, available_images_proj);
1509  resultRT.resize(myStreamRT, available_images_proj);
1510 
1511  //TODO allocate memory with care
1512  myStructureAux_tr.padded_image_gpu.resize(pad_Xdim, pad_Ydim, 1, available_images_proj);
1513  myStructureAux_tr.padded_image2_gpu.resize(pad_Xdim, pad_Ydim, 1, available_images_proj);
1514  myStructureAux_tr.padded_mask_gpu.resize(pad_Xdim, pad_Ydim, 1, 1);
1515  myStructureAux_tr.polar_gpu.resize(d_referenceAux.XdimPolar,d_referenceAux.YdimPolar,1,available_images_proj);
1516  myStructureAux_tr.polar2_gpu.resize(d_referenceAux.XdimPolar,d_referenceAux.YdimPolar,1,available_images_proj);
1517 
1518  myStructureAux_rt.padded_image_gpu.resize(pad_Xdim, pad_Ydim, 1, available_images_proj);
1519  myStructureAux_rt.padded_image2_gpu.resize(pad_Xdim, pad_Ydim, 1, available_images_proj);
1520  myStructureAux_rt.padded_mask_gpu.resize(pad_Xdim, pad_Ydim, 1, 1);
1521  myStructureAux_rt.polar_gpu.resize(d_referenceAux.XdimPolar,d_referenceAux.YdimPolar,1,available_images_proj);
1522  myStructureAux_rt.polar2_gpu.resize(d_referenceAux.XdimPolar,d_referenceAux.YdimPolar,1,available_images_proj);
1523 
1524  //SF
1525  preprocess_images_reference(SFexp, firstIdx, available_images_proj, mask, d_referenceAux,
1526  myhandlePadded_tr, myhandleMask_tr, myhandlePolar_tr, myStructureAux_tr, iter, myStreamTR);
1527 
1528  d_referenceAux.maskCount=maskCount;
1529  d_referenceAux.produceSideInfo(myhandlePaddedB_tr, myhandleMaskB_tr, myStructureAux_tr, myStreamTR);
1530 
1531  //AJ calling a cudaDeviceSyncrhonize to be sure that these images are loaded in gpu memory
1532  // and available for all the streams
1533  waitGpu(myStreamTR, true);
1534 
1535  //EXPERIMENTAL IMAGES PART
1536  size_t expIndex = 0;
1537  FileName fnImgExp;
1538  auto iterExp = SF.begin();
1539 
1540  GpuCorrelationAux d_experimentalAuxTR, d_experimentalAuxRT;
1541  d_experimentalAuxTR.XdimOrig=d_referenceAux.XdimOrig;
1542  d_experimentalAuxTR.YdimOrig=d_referenceAux.YdimOrig;
1543  d_experimentalAuxTR.Xdim=d_referenceAux.Xdim;
1544  d_experimentalAuxTR.Ydim=d_referenceAux.Ydim;
1545  d_experimentalAuxTR.XdimPolar=d_referenceAux.XdimPolar;
1546  d_experimentalAuxTR.YdimPolar=d_referenceAux.YdimPolar;
1547 
1548  d_experimentalAuxRT.XdimOrig=d_referenceAux.XdimOrig;
1549  d_experimentalAuxRT.YdimOrig=d_referenceAux.YdimOrig;
1550  d_experimentalAuxRT.Xdim=d_referenceAux.Xdim;
1551  d_experimentalAuxRT.Ydim=d_referenceAux.Ydim;
1552  d_experimentalAuxRT.XdimPolar=d_referenceAux.XdimPolar;
1553  d_experimentalAuxRT.YdimPolar=d_referenceAux.YdimPolar;
1554 
1555  //TODO: here we can use threads to carry out the alignment of different images in different threads
1556  size_t n=0;
1557  int available_images_exp = mdInSize; //mdExpSize
1558  while(available_images_exp && (*iterExp).id()!=0){
1559 
1560  transMat_tr.initialize(myStreamTR);
1561  transMat_rt.initialize(myStreamRT);
1562  transMat_tr_mirror.initialize(myStreamTR);
1563  transMat_rt_mirror.initialize(myStreamRT);
1564 
1565  for(int i=0; i<available_images_proj; i++){
1566  max_vector_tr[i]=-1;
1567  max_vector_rt[i]=-1;
1568  max_vector_tr_mirror[i]=-1;
1569  max_vector_rt_mirror[i]=-1;
1570  }
1571 
1572  available_images_exp--;
1573 
1574  MDRow& rowExp = *iterExp;
1575  rowExp.getValue(MDL_IMAGE, fnImgExp);
1576  //std::cerr << expIndex << ". Image: " << fnImgExp << std::endl;
1577 
1578  //AJ calling the function to align the images
1579  bool mirror=false;
1580  //SFexp
1581  align_experimental_image(fnImgExp, d_referenceAux, d_experimentalAuxTR, d_experimentalAuxRT, transMat_tr, transMat_rt,
1582  max_vector_tr, max_vector_rt, SF, available_images_proj, mirror, maxShift,
1583  myhandlePadded_tr, myhandleMask_tr, myhandlePolar_tr, myhandlePaddedB_tr, myhandleMaskB_tr, myhandlePolarB_tr,
1584  myhandlePadded_rt, myhandleMask_rt, myhandlePolar_rt, myhandlePaddedB_rt, myhandleMaskB_rt, myhandlePolarB_rt,
1585  myStructureAux_tr, myStructureAux_rt, myStreamTR, myStreamRT,
1586  resultTR, resultRT, original_image_stack, ifftcb);
1587 
1588 
1589  mirror=true;
1590  //SFexp
1591  align_experimental_image(fnImgExp, d_referenceAux, d_experimentalAuxTR, d_experimentalAuxRT, transMat_tr_mirror, transMat_rt_mirror,
1592  max_vector_tr_mirror, max_vector_rt_mirror, SF, available_images_proj, mirror, maxShift,
1593  myhandlePadded_tr, myhandleMask_tr, myhandlePolar_tr, myhandlePaddedB_tr, myhandleMaskB_tr, myhandlePolarB_tr,
1594  myhandlePadded_rt, myhandleMask_rt, myhandlePolar_rt, myhandlePaddedB_rt, myhandleMaskB_rt, myhandlePolarB_rt,
1595  myStructureAux_tr, myStructureAux_rt, myStreamTR, myStreamRT,
1596  resultTR, resultRT, original_image_stack, ifftcb);
1597 
1598  //AJ to check the best transformation among all the evaluated
1599  transMat_tr.copyMatrixToCpu(myStreamTR);
1600  transMat_tr_mirror.copyMatrixToCpu(myStreamRT);
1601  transMat_rt.copyMatrixToCpu(myStreamTR);
1602  transMat_rt_mirror.copyMatrixToCpu(myStreamRT);
1603 
1604  waitGpu(myStreamTR, false);
1605  waitGpu(myStreamRT, false);
1606 
1607  MultidimArray<float> out2(3,3);
1608  for(int i=0; i<available_images_proj; i++){
1609  if(max_vector_tr[i]>max_vector_rt[i]){
1610  memcpy(MULTIDIM_ARRAY(out2), &transMat_tr.h_data[i*9], 9*sizeof(float));
1611  matrixTransCpu[n].setSlice(firstIdx+i, out2);
1612  A2D_ELEM(matrixCorrCpu, n, firstIdx+i) = max_vector_tr[i];
1613  }else{
1614  memcpy(MULTIDIM_ARRAY(out2), &transMat_rt.h_data[i*9], 9*sizeof(float));
1615  matrixTransCpu[n].setSlice(firstIdx+i, out2);
1616  A2D_ELEM(matrixCorrCpu, n, firstIdx+i) = max_vector_rt[i];
1617  }
1618  //mirror image
1619  if(max_vector_tr_mirror[i]>max_vector_rt_mirror[i]){
1620  memcpy(MULTIDIM_ARRAY(out2), &transMat_tr_mirror.h_data[i*9], 9*sizeof(float));
1621  matrixTransCpu_mirror[n].setSlice(firstIdx+i, out2);
1622  A2D_ELEM(matrixCorrCpu_mirror, n, firstIdx+i) = max_vector_tr_mirror[i];
1623  }else{
1624  memcpy(MULTIDIM_ARRAY(out2), &transMat_rt_mirror.h_data[i*9], 9*sizeof(float));
1625  matrixTransCpu_mirror[n].setSlice(firstIdx+i, out2);
1626  A2D_ELEM(matrixCorrCpu_mirror, n, firstIdx+i) = max_vector_rt_mirror[i];
1627  }
1628  }
1629 
1630  if(iterExp != SF.end())
1631  ++iterExp;
1632 
1633  n++;
1634  workDone+=available_images_proj;
1635  if (size_t(workDone/100)>lastProgressShown)
1636  {
1637  progress_bar(workDone);
1638  lastProgressShown=size_t(workDone/100);
1639  }
1640  }//end while experimental images
1641 
1642  firstIdx +=available_images_proj;
1643  int aux;
1644  aux=available_images_proj;
1645  if(firstIdx+available_images_proj > mdExpSize){ //mdInSize
1646  aux=available_images_proj;
1647  available_images_proj=mdExpSize-firstIdx; //mdInSize
1648  }
1649  if(firstIdx==mdExpSize){ //mdInSize
1650  finish=true;
1651  }
1652  if(aux!=available_images_proj){
1653  myhandlePadded_tr.clear();
1654  myhandleMask_tr.clear();
1655  myhandlePolar_tr.clear();
1656  myhandlePaddedB_tr.clear();
1657  myhandleMaskB_tr.clear();
1658  myhandlePolarB_tr.clear();
1659 
1660  myhandlePadded_rt.clear();
1661  myhandleMask_rt.clear();
1662  myhandlePolar_rt.clear();
1663  myhandlePaddedB_rt.clear();
1664  myhandleMaskB_rt.clear();
1665  myhandlePolarB_rt.clear();
1666  }
1667 
1668 
1669  }//End loop over the reference images while(!finish)
1670  progress_bar(totalWork);
1671 
1672  myhandlePadded_tr.clear();
1673  myhandleMask_tr.clear();
1674  myhandlePolar_tr.clear();
1675  myhandlePaddedB_tr.clear();
1676  myhandleMaskB_tr.clear();
1677  myhandlePolarB_tr.clear();
1678 
1679  myhandlePadded_rt.clear();
1680  myhandleMask_rt.clear();
1681  myhandlePolar_rt.clear();
1682  myhandlePaddedB_rt.clear();
1683  myhandleMaskB_rt.clear();
1684  myhandlePolarB_rt.clear();
1685 
1686  MultidimArray<float> weights(1,1,mdExpSize,2*mdInSize);
1687  MultidimArray<float> weightsMax;
1688  MultidimArray<float> corrTotalRow(1,1,mdExpSize, 2*mdInSize);
1689  int Nref;
1690  if(keepN){
1691  Nref=n_keep;
1692  }else if(significance){
1693  Nref=round(corrTotalRow.xdim*alpha);
1694  if(Nref==0)
1695  Nref=1;
1696  }
1697 
1698 
1699  calculate_weights(matrixCorrCpu, matrixCorrCpu_mirror, corrTotalRow, weights, Nref, mdExpSize, mdInSize, weightsMax, simplifiedMd,
1700  matrixTransCpu, matrixTransCpu_mirror, maxShift);
1701 
1702  std::cerr << "Creating output metadatas..." << std::endl;
1703 
1704  generate_metadata(SF, SFexp, fnDir, fn_out, mdExpSize, mdInSize, weights, corrTotalRow, matrixTransCpu,
1705  matrixTransCpu_mirror, maxShift, weightsMax, simplifiedMd, Nref);
1706 
1707  if(generate_out)
1708  generate_output_classes(SF, SFexp, fnDir, mdExpSize, mdInSize, weights, matrixTransCpu,
1709  matrixTransCpu_mirror, maxShift, fn_classes_out, weightsMax, simplifiedMd, Nref);
1710 
1711  //Free memory in CPU
1712  for(int i=0; i<mdInSize; i++) //mdExpSize
1713  matrixTransCpu[i].coreDeallocate();
1714  delete []matrixTransCpu;
1715  for(int i=0; i<mdInSize; i++) //mdExpSize
1716  matrixTransCpu_mirror[i].coreDeallocate();
1717  delete []matrixTransCpu_mirror;
1718 
1719  cpuFree(max_vector_tr);
1720  cpuFree(max_vector_rt);
1721  cpuFree(max_vector_tr_mirror);
1722  cpuFree(max_vector_rt_mirror);
1723 
1724 
1725 
1726 }
void init_progress_bar(long total)
void min(Image< double > &op1, const Image< double > &op2)
#define A2D_ELEM(v, i, j)
void resize(const GpuMultidimArrayAtGpu< T1 > &array)
GpuMultidimArrayAtGpu< float > polar2_gpu
__host__ __device__ float2 floor(const float2 v)
void read(const FileName &inFile, const std::vector< MDLabel > *desiredLabels=nullptr, bool decomposeStack=true) override
iterator begin() override
Definition: metadata_vec.h:501
iterator end() override
Definition: metadata_vec.h:504
void generate_output_classes(MetaDataVec SF, MetaDataVec SFexp, FileName fnDir, size_t mdExpSize, size_t mdInSize, MultidimArray< float > &weights, MultidimArray< float > *matrixTransCpu, MultidimArray< float > *matrixTransCpu_mirror, int maxShift, FileName fn_classes_out, MultidimArray< float > &weightsMax, bool simplifiedMd, int Nref)
Definition: mask.h:360
void getImageSize(const MetaData &md, size_t &Xdim, size_t &Ydim, size_t &Zdim, size_t &Ndim, MDLabel image_label)
void preprocess_images_reference(MetaDataVec &SF, int firstIdx, int numImages, Mask &mask, GpuCorrelationAux &d_correlationAux, mycufftHandle &myhandlePadded, mycufftHandle &myhandleMask, mycufftHandle &myhandlePolar, StructuresAux &myStructureAux, MetaDataVec::id_iterator iter, myStreamHandle myStream)
#define MULTIDIM_ARRAY(v)
void resize(size_t Xdim)
Definition: mask.cpp:654
void calculate_weights(MultidimArray< float > &matrixCorrCpu, MultidimArray< float > &matrixCorrCpu_mirror, MultidimArray< float > &corrTotalRow, MultidimArray< float > &weights, int Nref, size_t mdExpSize, size_t mdInSize, MultidimArray< float > &weightsMax, bool simplifiedMd, MultidimArray< float > *matrixTransCpu, MultidimArray< float > *matrixTransCpu_mirror, int maxShift)
void resize(const TransformMatrix< T1 > &array, myStreamHandle &myStream)
glob_prnt iter
virtual IdIteratorProxy< false > ids()
GpuMultidimArrayAtGpu< float > padded_mask_gpu
size_t size() const override
#define i
GpuMultidimArrayAtGpu< float > padded_image2_gpu
void align_experimental_image(FileName &fnImgExp, GpuCorrelationAux &d_referenceAux, GpuCorrelationAux &d_experimentalAuxTR, GpuCorrelationAux &d_experimentalAuxRT, TransformMatrix< float > &transMat_tr, TransformMatrix< float > &transMat_rt, float *max_vector_tr, float *max_vector_rt, MetaDataVec &SFexp, int available_images_proj, bool mirror, int maxShift, mycufftHandle &myhandlePadded_tr, mycufftHandle &myhandleMask_tr, mycufftHandle &myhandlePolar_tr, mycufftHandle &myhandlePaddedB_tr, mycufftHandle &myhandleMaskB_tr, mycufftHandle &myhandlePolarB_tr, mycufftHandle &myhandlePadded_rt, mycufftHandle &myhandleMask_rt, mycufftHandle &myhandlePolar_rt, mycufftHandle &myhandlePaddedB_rt, mycufftHandle &myhandleMaskB_rt, mycufftHandle &myhandlePolarB_rt, StructuresAux &myStructureAux_tr, StructuresAux &myStructureAux_rt, myStreamHandle &myStreamTR, myStreamHandle &myStreamRT, TransformMatrix< float > &resultTR, TransformMatrix< float > &resultRT, GpuMultidimArrayAtCpu< float > &original_image_stack, mycufftHandle &ifftcb)
GpuMultidimArrayAtGpu< float > polar_gpu
T & getValue(MDLabel label)
void cuda_check_gpu_memory(float *data)
void copyMatrixToCpu(myStreamHandle &myStream)
void resize(int _Xdim, int _Ydim=1, int _Zdim=1, int _Ndim=1)
double R1
Definition: mask.h:413
void progress_bar(long rlen)
int type
Definition: mask.h:402
double z
void myStreamCreate(myStreamHandle &myStream)
void cpuFree(void *h_data)
void generate_metadata(MetaDataVec SF, MetaDataVec SFexp, FileName fnDir, FileName fn_out, size_t mdExpSize, size_t mdInSize, MultidimArray< float > &weights, MultidimArray< float > &corrTotalRow, MultidimArray< float > *matrixTransCpu, MultidimArray< float > *matrixTransCpu_mirror, int maxShift, MultidimArray< float > &weightsMax, bool simplifiedMd, int Nref)
void set()
Definition: gpu.cpp:50
void initialize(myStreamHandle &myStream)
void produceSideInfo(mycufftHandle &myhandlePadded, mycufftHandle &myhandleMask, StructuresAux &myStructureAux, myStreamHandle &myStream)
void generate_mask(bool apply_geo=false)
Definition: mask.cpp:1577
int round(double x)
Definition: ap.cpp:7245
#define BINARY_CIRCULAR_MASK
Definition: mask.h:365
void cuda_check_gpu_properties(int *grid)
void cpuMalloc(void **h_data, size_t Nbytes)
void primeFactors(int n, int *out)
const MultidimArray< int > & get_binary_mask() const
Definition: mask.h:707
int * n
Name of an image (std::string)
double sum() const
int mode
Definition: mask.h:407
GpuMultidimArrayAtGpu< float > padded_image_gpu
void waitGpu(myStreamHandle &myStream, bool allStreams)
constexpr int INNER_MASK
Definition: mask.h:47

◆ show()

void ProgGpuCorrelation::show ( )

Show.

Definition at line 526 of file xmipp_gpu_correlation.cpp.

527 {
528  std::cout
529  << "Input projected: " << fn_ref << std::endl
530  << "Input experimental: " << fn_exp << std::endl
531  << "Generate output images (y/n): " << generate_out << std::endl
532  ;
533 }

Member Data Documentation

◆ SF

MetaDataVec ProgGpuCorrelation::SF

Definition at line 53 of file xmipp_gpu_correlation.h.

◆ SFexp

MetaDataVec ProgGpuCorrelation::SFexp

Definition at line 53 of file xmipp_gpu_correlation.h.


The documentation for this class was generated from the following files: