void myefx::updateControllers() { // immagini in input/output: timageInOut=getChannelImage("Out"); // proprietà: Controller_k1=(ctInt *)getProperty("Vel1"); Controller_k2=(ctInt *)getProperty("Vel2"); }
int main(int argc, char *argv[]) { ProgramOptions options(argc, argv); options.showParameters(); ReconParameters params = options.getReconParameters(); // -------------- Load multi-channel data ----------------- auto reconData = ReconData<float>::Create(params.samples, params.projections, options.isGPU()); loadReconData(params, reconData.get()); unsigned threads = std::min(reconData->channels(), omp_get_num_procs()); QElapsedTimer timer0, timer; timer0.start(); // -------------- Gridding ------------------------------- timer.start(); auto grid = GridLut<float>::Create(*reconData); #ifdef BUILD_CUDA if (options.isGPU()) { dynamic_cast<cuGridLut<float> *>(grid.get())->setNumOfPartitions(25); } #endif // BUILD_CUDA grid->setNumOfThreads(threads); grid->plan(params.rcxres, params.overgridding_factor, params.kernel_width, 512); auto imgData = grid->execute(); std::cout << "Gridding total time " << timer.elapsed() << " ms" << std::endl; ImageData<float> imgMap; if (params.pils) imgMap = *imgData; auto filter = ImageFilter<float>::Create(*imgData); filter->setNumOfThreads(threads); // --------------- FFT ---------------------------------- filter->fftPlan(); timer.restart(); filter->fftExecute(); filter->fftShift(); std::cout << "FFT total time " << timer.restart() << " ms" << std::endl; // -------------- Recon Methods ----------------------------------- timer.restart(); if (params.pils) { auto filterMap = ImageFilter<float>::Create(imgMap); std::cout << "\nRecon PILS... " << std::endl; filterMap->lowFilter(22); std::cout << "\nLow pass filtering | " << timer.restart() << " ms" << std::endl; std::cout << "\nFFT low res image... " << std::endl; filterMap->fftExecute(); filterMap->fftShift(); std::cout << "FFT total time " << timer.restart() << " ms" << std::endl; filterMap->normalize(); std::cout << "\nSum of Square Field Map..." << std::flush; filter->SOS(imgMap, {params.rcxres, params.rcyres, params.rczres}); std::cout << " | " << timer.elapsed() << " ms" << std::endl; } else { std::cout << "\nRecon SOS... " << std::flush; filter->SOS({params.rcxres, params.rcyres, params.rczres}); std::cout << " | " << timer.elapsed() << " ms" << std::endl; } std::cout << "\nProgram total time excluding I/O: " << timer0.elapsed() / 1000.0 << " s" << std::endl; // -------------------------- Save Data --------------------------- QFile file(params.path + params.outFile); file.open(QIODevice::WriteOnly); for (const auto &data : *imgData->getChannelImage()) { auto value = std::abs(data); file.write((const char *)&value, sizeof(decltype(value))); } file.close(); // -------------------------- Display Data ----------------------- int n = 0; if (options.isDisplay()) { QApplication app(argc, argv); for (int i = 0; i < imgData->channels(); i++) { auto data = imgData->getChannelImage(i); displayData(*data, imgData->imageSize(), QString("channel ") + QString::number(n++)); } return app.exec(); } else return 0; }