//#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //# Author: Piyush Agram //# Copyright 2013, by the California Institute of Technology. ALL RIGHTS RESERVED. //# United States Government Sponsorship acknowledged. //# Any commercial use must be negotiated with the Office of Technology Transfer at //# the California Institute of Technology. //# This software may be subject to U.S. export control laws. //# By accepting this software, the user agrees to comply with all applicable U.S. //# export laws and regulations. User has the responsibility to obtain export licenses, //# or other export authority as may be required before exporting such information to //# foreign countries or providing access to foreign persons. //# //#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #include #include #include #include "addsubmodel.h" #include "DataAccessor.h" using namespace std; void addsubmodel::setDims(int wid, int len) { width = wid; length = len; } void addsubmodel::setScaleFactor(float scale) { scaleFactor = scale; } void addsubmodel::setFlip(int flag) { flip = flag; } void addsubmodel::cpxCpxprocess(uint64_t input, uint64_t model, uint64_t out) { DataAccessor* modelAcc = (DataAccessor*) model; DataAccessor* inAcc = (DataAccessor*) input; DataAccessor* outAcc = (DataAccessor*) out; int i,j,k; int wid; if (scaleFactor != 1.0) { cout << "scaleFactor is not used when both input and model are complex floats. \n"; } complex *data = new complex[width]; complex *modarr = new complex[width]; for(i=0;igetLine((char*)modarr,k); k=i; inAcc->getLine((char*)data,k); wid = width; if(flip !=0 ) { #pragma omp parallel for private(j) \ shared(modarr,wid,data) for(j=0;jsetLine((char*)data,k); } delete [] data; delete [] modarr; modelAcc = NULL; inAcc = NULL; outAcc = NULL; } void addsubmodel::unwUnwprocess(uint64_t input, uint64_t model, uint64_t out) { DataAccessor* modelAcc = (DataAccessor*) model; DataAccessor* inAcc = (DataAccessor*) input; DataAccessor* outAcc = (DataAccessor*) out; int i,j,k; int wid; float mult; if (flip != 0) { mult = -scaleFactor; } else { mult = scaleFactor; } float *data = new float[width]; float *modarr = new float[width]; for(i=0;igetLine((char*)modarr,k); k=i; inAcc->getLine((char*)data,k); wid = width; #pragma omp parallel for private(j) \ shared(modarr,data,wid,mult) for(j=0; jsetLine((char*)data,k); } delete [] data; delete [] modarr; modelAcc = NULL; inAcc = NULL; outAcc = NULL; } void addsubmodel::cpxUnwprocess(uint64_t input, uint64_t model, uint64_t out) { DataAccessor* modelAcc = (DataAccessor*) model; DataAccessor* inAcc = (DataAccessor*) input; DataAccessor* outAcc = (DataAccessor*) out; //Complex J complex cJ; cJ = (0.0,1.0); int i,j,k; int wid; float mult; if (flip != 0) { mult = -scaleFactor; } else { mult = scaleFactor; } complex *data = new complex[width]; float *modarr = new float[width]; for(i=0;igetLine((char*)modarr,k); k=i; inAcc->getLine((char*)data,k); wid = width; #pragma omp parallel for private(j) \ shared(modarr,data,wid,mult,cJ) for(j=0; jsetLine((char*)data,k); } delete [] data; delete [] modarr; modelAcc = NULL; inAcc = NULL; outAcc = NULL; } void addsubmodel::print() { cout << "**************************\n"; cout << "Length: " << length <<"\n"; cout << "Width: " << width << "\n"; cout << "Scale : " << scaleFactor << "\n"; cout << "Flip : " << flip << "\n"; }