# -*- coding: utf-8 -*-
from __future__ import absolute_import
import calendar
import datetime as dt
import locale
import os
import shutil
import re
from six.moves import range
def moveSpmOutFiles(inDir, outPath, spmPrefixes=['w'], outDir=None, ext='.nii'):
    if not isinstance(spmPrefixes, list):
        raise TypeError('a list is required for spmPrefixes')
    else:
        for i in range(0, len(spmPrefixes)):
            if(spmPrefixes[i].startswith("""'""")):
                spmPrefixes[i] = spmPrefixes[i][1:-1]
        for root, _dirs, filenames in os.walk(inDir):
            for f in filenames:
                goodPrefix = False
                for spmPrefix in spmPrefixes:
                    if(f.startswith(spmPrefix)):
                        goodPrefix = True
                        break
                goodExtension = f.endswith(ext) or f.endswith('.txt')
                if (goodPrefix and goodExtension):
                    if(outPath is not None):
                        movePath(root + '/' + f, outPath)
                    else:
                        movePath(root + '/' + f, outDir + '/' + f)
def movePathToDiskItem(srcPath, dstDI):
    if(dstDI is not None):
        return movePath(srcPath, dstDI.fullPath())
def movePath(srcPath, dstPath):
    if (os.path.exists(srcPath)):
        if(os.path.exists(dstPath)):
            os.remove(dstPath)
                      # do not use directly os.rename (but remove before)
                      # because : on windows, rename with dstPath already
                      # exists causes exception
        shutil.move(srcPath, dstPath)
                    # shutil.move is better than os.rename, because os.rename
                    # failed if src and dst are not on the same filesystem
    if (os.path.exists(srcPath)):
        os.remove(srcPath)
[docs]def merge_mat_files(mergedMatFile, *matFiles):
    """
    Create a .m file from a set of .m files
    :param string mergedMatFile
        The .m file containing the merge result
    :param set *matFiles
        The .m files to merge
    :returns:
        True if the merge succeeds and False otherwise
    """
    mergedMatFileFo = open(mergedMatFile, 'w')
    moduleNum = 1
    for f in matFiles:
        currentNum = None
        previousNum = None
        for l in open(f, 'r'):
            if not l.strip():
                continue
            try:
                currentNum = re.match(
                    r"matlabbatch\{([0-9]*)\}(.*)", l).group(1)
            except Exception:
                pass
            if previousNum and currentNum != previousNum:
                moduleNum += 1
            previousNum = currentNum
            try:
                mergedMatFileFo.write(
                    re.sub(r"matlabbatch{([0-9]*)}", "matlabbatch{" + str(moduleNum) + "}", l))
            except Exception:
                return False
        moduleNum += 1
    mergedMatFileFo.close()
    return True 
def spm_today():
    now = dt.datetime.now()
    currentLocale = locale.getlocale(locale.LC_TIME)
    # locale.setlocale(locale.LC_TIME, ("en","us"))# mika : doesn't works for
    # me
    locale.setlocale(locale.LC_TIME, ('en_US', 'UTF8'))
    month_name = calendar.month_name[now.month]
    locale.setlocale(locale.LC_TIME, currentLocale)
    month = month_name[:3]
    mth = month[0].upper() + month[1:]
    mth = mth.replace('é', 'e')
    mth = mth.replace('û', 'u')
    spm_today = str(now.day)
    if (now.day < 10):
        spm_today = '0' + str(now.day)
    d = str(now.year) + mth + spm_today
    return d
def removeNan(filePath):
    fileMinfPath = filePath + '.minf'
    if(os.path.exists(fileMinfPath)):
        os.remove(fileMinfPath)
    AimsRemoveNaNCmd = 'AimsRemoveNaN' + ' -i "' + \
        str(filePath) + '" -o "' + str(filePath) + '.noNan.nii"'
    os.system(AimsRemoveNaNCmd)
    os.remove(filePath)
    os.rename(filePath + '.noNan.nii', filePath)
    os.rename(filePath + '.noNan.nii.minf', filePath + '.minf')
#------------------------------------------------------------------------------
#
# Write smooth batch for one image to smooth
#
def writeSmoothMatFile(context, data, matfileDI, mat_file,
                       fwhm="""[8 8 8]""",
                       dtype="""0""",
                       im="""0""",
                       prefix="""spmSmooth_"""
                       ):
    mat_file.write("""
matlabbatch{1}.spm.spatial.smooth.data = {'%s,1'};
matlabbatch{1}.spm.spatial.smooth.fwhm = %s;
matlabbatch{1}.spm.spatial.smooth.dtype = %s;
matlabbatch{1}.spm.spatial.smooth.im = %s;
matlabbatch{1}.spm.spatial.smooth.prefix = '%s';
""" % (data
       , fwhm, dtype, im, prefix)
    )
    mat_file.close()
    return mat_file.name
# def initializeSmooth_withSPM8DefaultValues(process):
#	process.fwhm = """[12 12 12]"""
#	process.dtype = """0"""
#	process.im = """0"""
#	process.prefix = """spmSmooth_12"""
#
# Write smooth batch for a list of images to smooth
#
# def writeSmoothListMatFile(context, images, matfileDI, mat_file
#                              , fwhm="""[8 8 8]"""
#                              , dtype="""0"""
#                              , im="""0"""
#                              , prefix="""'spmSmooth8_'"""
#                            ):
#
#	images_to_smooth = ""
#	for img in images:
#	   images_to_smooth = images_to_smooth + " '" + img.fullPath() + ",1'"
#
#	mat_file.write("""
#		matlabbatch{1}.spm.spatial.smooth.data = { %s };
#		matlabbatch{1}.spm.spatial.smooth.fwhm = %s;
#		matlabbatch{1}.spm.spatial.smooth.dtype = %s;
#		matlabbatch{1}.spm.spatial.smooth.im = %s;
#		matlabbatch{1}.spm.spatial.smooth.prefix = '%s';
#		""" % (images_to_smooth, fwhm, dtype, im, prefix)
#                 )
#  	mat_file.close()
#  	return mat_file.name
#
#------------------------------------------------------------------------------
#
# SPM 8 imcalc batch creation
#
# def writeImageCalculatorMatFile(context, subjectsPathList, matfileDI, mat_file
#                                , output_filename
#				, output_dir
#                                , expression
#                                , dmtx="""0"""
#                                , mask="""0"""
#                                , interp="""1"""
#                                , dtype="""4"""
#                            ):
#  scans = convertPathList(subjectsPathList)
#  mat_file.write("""matlabbatch{1}.spm.util.imcalc.input = {%s
#                                                           };
#
# matlabbatch{1}.spm.util.imcalc.output = %s
# matlabbatch{1}.spm.util.imcalc.outdir = %s;
# matlabbatch{1}.spm.util.imcalc.expression = %s;
# matlabbatch{1}.spm.util.imcalc.options.dmtx = %s;
# matlabbatch{1}.spm.util.imcalc.options.mask = %s;
# matlabbatch{1}.spm.util.imcalc.options.interp = %s;
# matlabbatch{1}.spm.util.imcalc.options.dtype = %s;
#""" % (scans
#, output_filename, output_dir, expression, dmtx, mask, interp, dtype)
#                 )
#  mat_file.close()
#  return mat_file.name