def METHOD_NAME(self,vals):
    print('oooo invoking: dualImageRegression with vals', vals);
    debug=self.parseBoolean(vals['debug'])
    df=self.parseBoolean(vals['dff'])
    doregress=self.parseBoolean(vals['doregress'])
    input=self.inputs['input'];
    sz=input.get_data().shape;
    if len(sz)==3:
        sz=[ sz[0],sz[1],1,sz[2] ];
        print('Fixed shape to',sz);
    idata = np.reshape(self.inputs['input'].get_data(),[ sz[0]*sz[1]*sz[2],sz[3] ]);
    if (doregress):
        rdata = np.reshape(self.inputs['regressor'].get_data(),[ sz[0]*sz[1]*sz[2],sz[3] ]);
    if (debug):
        print('Input Shape=',sz,' Reshaped=', idata.shape)
    if (df):
        mean=np.mean(idata,axis=1)
        if (debug):
            print('Mean shape=',mean.shape);
            print('Mean=',mean[0:5]);
            print('Pre mean:',idata[0,0:5])
        idata=np.transpose(np.transpose(idata)-mean)
        if (debug):
            print('Post mean',idata[0,0:5])
        if (doregress):
            rmean=np.mean(rdata,axis=1);
            rdata=np.transpose(np.transpose(rdata)-rmean)
            if (debug):
                print('R-Mean shape=',rmean.shape);
    if (doregress):
        print('.... computing dual image regression')
        outdata=self.dualRegress(idata,rdata,debug);
    else:   
        print('.... not computing dual image regression')
        outdata=idata;
    if (df):
        print('.... computing df/f')
        outdata=np.transpose((np.transpose(outdata)+mean)/mean)
    else:
        print('.... not computing df/f')
    outdata=np.reshape(outdata,sz);
    self.outputs['output'] = bis_objects.bisImage().create(outdata,input.spacing,input.affine);
    return True