예제 #1
0
def gershgoriny_dist_from_I_aff12_file(fname):
    '''Input a file of an aff12 matrix (either MATRIX or ONELINE format).
    Must have exactly 12 numbers.

    See help of 'gershgoriny_dist_from_I_aff12()' for what happens
    next.

    Output is one scalar number.

    '''

    # read in, and get into proper shape with a transposition
    x = LAD.Afni1D(fname)
    x.transpose()

    if len(x.mat) == 3 and len(x.mat[0]) == 4:
        # then we have a MATRIX-format aff12.1D param already, and we
        # are all set to go
        out = gershgoriny_dist_from_I_aff12(x.mat)

    elif len(x.mat) == 1 and len(x.mat[0]) == 12:
        # then we have a ONELINE-format aff12.1D param, and we have to
        # reshape it
        M = [[0.0] * 4 for row in range(3)]
        for i in range(3):
            M[i][:] = x.mat[0][4 * i:4 * (i + 1)]
        dist_gershgorin = gershgoriny_dist_from_I_aff12(M)
    else:
        print("** ERROR: Input matrix in {} has some problems! Doesn't look\n"
              "   like an aff12.1D format (ONELINE, 1x12; MATRIX, 3x4)\n"
              "".format(fname))
        sys.exit(3)

    return dist_gershgorin
예제 #2
0
   def process_matlab_file(self, fname, index=0):
      """process matlab files
      """

      try:
         import scipy.io
         import numpy
      except:
         print('** missing library: scipy.io')
         print('   (please install scipy)')
         return 1

      if not os.path.isfile(fname):
         print("** missing file '%s'" % fname)
         return 1

      mfile = scipy.io.loadmat(fname)
      if mfile == None: return 1

      # prepare output prefix
      prefix = self.prefix
      if prefix != '' and len(self.infiles) > 1:
         prefix = '%s.%02d' % (self.prefix, index+1)

      klist = [key for key in list(mfile.keys()) if key[0:2] != '__']
      maxlen = max([len(key) for key in klist])

      if self.verb:
         if self.verb > 1: print()
         print('-- file %s has %d key(s)' % (fname, len(klist)))

      for key in klist:
         obj = mfile[key]
         if self.verb > 1:
            if type(obj) is numpy.ndarray:
               shstr = ' shape %s' % str(obj.shape)
            else:
               shstr = ''
            print('   %-*s %s%s' % (maxlen, key, type(obj), shstr))

         # maybe write any numpy data
         if prefix != '' and type(obj) is numpy.ndarray:
            # convert object to Afni1D and transpose
            olist = obj.tolist()
            adata = LD.Afni1D(from_mat=1, matrix=olist, verb=self.verb)
            adata.transpose()

            # if model, break apart, else just write
            if key == 'model' and adata.nvec >= 2:
               self.write_model_files(adata, prefix)
            else:
               ofile = '%s.%s.1D'%(prefix,key)
               print('++ writing ndarry to %s' % ofile)
               adata.write(ofile, overwrite=self.overwrite)

      return 0
예제 #3
0
   def write_model_files(self, adata, prefix):
      """break model matrix into many 1D files
      """

      if adata.nvec < 1: return 0

      for ind in range(adata.nvec):
         avec = LD.Afni1D(from_mat=1, matrix=[adata.mat[ind]], verb=self.verb)
         ofile = '%s.model.%02d.1D' % (prefix, ind+1)
         print('++ writing model file %s' % ofile)
         avec.write(ofile, overwrite=self.overwrite)

      return 0
예제 #4
0
    print(help_str)
    sys.exit(0)

an = 1
niter = 0
if sys.argv[an] == '-niter':
    if an + 2 >= narg:
        print(usage_str)
        sys.exit(1)
    niter = int(sys.argv[an + 1])
    print('-- using niter = %d' % niter)
    an += 2

infile = sys.argv[an]

mdata = LAD.Afni1D(infile, verb=0)
if not mdata.ready:
    print('** failed to read maxdata file %s' % infile)
    sys.exit(1)
try:
    mdata = [int(round(m)) for m in mdata.mat[0]]
except:
    print('** failed to process integers from maxdata file %s' % infile)
    sys.exit(1)

mdata.sort()
cmax = mdata[-1]
mlen = len(mdata)

if niter > 0 and niter > mlen:
    print('** have input niter (%d) > mlen(%d)' % (niter, mlen))