def main(InputNii,con,Regressor,meth,TR,itl,Fs,WrkDir=''):
	
	txt=np.loadtxt(Regressor)
	if not all([i==0 for i in txt]):
		
		RootDir,FileName=os.path.split(InputNii)
	
		trash='.exe'
		FileBase=FileName
		while trash:
			FileBase,trash=os.path.splitext(FileBase)
	
		   
		OutputPath=os.path.join(RootDir,'tPython',meth,con)
		
		if not WrkDir:
			WrkDir=os.path.join(RootDir,'{}_Work'.format(FileBase))
			
		GLMFiles=os.path.join(WrkDir,'WorkFiles','GLM',meth,con)
		ClusterJobDir=os.path.join(WrkDir,'ShFiles','GLM',meth,con)
		ErrorOutput=os.path.join(WrkDir,'ClusterError','GLM',meth,con)
		ClusterOutput=os.path.join(WrkDir,'ClusterOutput','GLM',meth,con)
		
		ReportFile=os.path.join(GLMFiles,'Report.txt')
		if os.path.exists(ReportFile):
			cmd='rm {}'.format(ReportFile)
			print cmd
			os.system(cmd)
		BaseDir,fname=os.path.split(InputNii)
		
		while not fname.find('.')==-1:
			fname,trash=os.path.splitext(fname)
			
		
		if not os.path.exists(WrkDir):
			os.makedirs(WrkDir)
	
		if not os.path.exists(ClusterJobDir):
			os.makedirs(ClusterJobDir)
		else:
			cmd='rm {}/*.sh'.format(ClusterJobDir)
			Report(ReportFile,cmd)
			os.system(cmd)
		
		if not os.path.exists(GLMFiles):
			os.makedirs(GLMFiles)
		else:
			cmd='rm {}/*'.format(GLMFiles)
			Report(ReportFile,cmd)
			os.system(cmd)
			
		if not os.path.exists(ErrorOutput):
			os.makedirs(ErrorOutput)
		else:
			cmd='rm {}/*'.format(ErrorOutput)
			Report(ReportFile,cmd)
			os.system(cmd)
			
			
		if not os.path.exists(ClusterOutput):
			os.makedirs(ClusterOutput)
		else:
			cmd='rm {}/*'.format(ClusterOutput)
			Report(ReportFile,cmd)
			os.system(cmd)
			
			
		if not os.path.exists(OutputPath):
			os.makedirs(OutputPath)
		print InputNii
		img=nb.load(InputNii)
		nslice=img.get_shape()[2]
		

		nb.loadsave.save(img,'{}/FullNii.nii.gz'.format(GLMFiles))
		# cmd='cp {} {}/FullNii.nii'.format(InputNii,GLMFiles)
		# print cmd
		# process=sp.Popen(cmd,shell=True)
		# process.wait()
		
		cmd='fslsplit {0}/FullNii.nii {0}/RefVol -t'.format(GLMFiles)
		Report(ReportFile,cmd)
		process=sp.Popen(cmd,shell=True)
		process.wait()
		
		RVs=glob.glob(os.path.join(GLMFiles,'RefVol*'))
		
		for r in RVs[1:]:
			cmd='rm {}'.format(r)
			Report(ReportFile,cmd)
			process=sp.Popen(cmd,shell=True)
			process.wait()
		
		RV=RVs[0]
		cmd='fslsplit {} {}/RefZ -z'.format(RV,GLMFiles)
		Report(ReportFile,cmd)
		process=sp.Popen(cmd,shell=True)
		process.wait()    
		RefVol=RV
		
		
		RVs=glob.glob(os.path.join(GLMFiles,'RefZ*'))
		for r in RVs[1:]:
			cmd='rm {}'.format(r)
			Report(ReportFile,cmd)
			process=sp.Popen(cmd,shell=True)
			process.wait()
		RV=RVs[0]
		
		cmd='fslsplit {0}/FullNii.nii {0}/vol -z'.format(GLMFiles)
		Report(ReportFile,cmd)
		process=sp.Popen(cmd,shell=True)
		process.wait()
		
		vols=sorted(glob.glob(os.path.join(GLMFiles,'vol*.nii.gz')))
		nVols=len(vols)        
		
		SlicesOrder,SliceTiming=MakeT(itl,0,nslice,TR)
		
		Regressor=np.loadtxt(Regressor)
		if not len(Regressor) >= img.shape[-1]*np.round(Fs*TR):
			print 'Interpolating'
			t1=np.array(range(len(Regressor)))*2
			t20=np.arange(t1[0],t1[-1],1./Fs)
			f=tpl.interp1d(t1,Regressor,kind='cubic')
			Regressor=f(t20)
			
		
		for k in xrange(img.shape[2]):
			RegressorDownsampled=np.zeros((img.shape[-1]))
			
			if len(Regressor[np.round(SliceTiming[k]*Fs)::(np.round(Fs*TR))])<img.shape[3]:
				RegressorDownsampled = list(Regressor[np.round(SliceTiming[k]*Fs)::np.round(Fs*TR)]).append(0)       
			else:   
				RegressorDownsampled = Regressor[np.round((SliceTiming[k])*Fs)::np.round(Fs*TR)]
				print 'slice {} starting at {}*{}={}::{}'.format(k,SliceTiming[k],Fs,np.round(SliceTiming[k]*Fs),np.round(Fs*TR))
				

			print len(RegressorDownsampled)
			np.savetxt(os.path.join(GLMFiles,'SliceReg{0:04d}.txt'.format(int(k))),RegressorDownsampled,fmt='%1.16f')
		
		regs=sorted(glob.glob(os.path.join(GLMFiles,'SliceReg*.txt')))
		nRegs=len(regs)
		
		if not nRegs==nVols:
			print ('Number of slices does not equal number of regs')
			return
		
		Report(ReportFile,'Number of Vols: {}'.format(nVols))
		for v,r in zip(vols,regs):
			trash,volID=os.path.split(v)
	
			volID,trash=os.path.splitext(volID)
	
			while trash:
				volID,trash=os.path.splitext(volID)
	
				
			rpt='Making SH for Volume {}'.format(volID)
			Report(ReportFile,rpt)
			shPath=os.path.join(ClusterJobDir,volID+'.sh')
			GLMsh.main(v,r,RV,shPath,ErrorOutput,ClusterOutput)
		
	
		SubmitCmd='for Dir in `/bin/ls '+ClusterJobDir+'/*.sh`; do echo "Running GLM on ${Dir}.";qsub -cwd $Dir;sleep 2; done'
		Report(ReportFile,cmd)
		os.system(SubmitCmd)
		
		Min=0
		Nvols=len(glob.glob(os.path.join(GLMFiles,'vol*')))
		NBetas=len(glob.glob(os.path.join(GLMFiles,'Beta*')))
		
		while not Nvols==NBetas and Min<120:
			time.sleep(60)
			Min=Min+1
			Nvols=len(glob.glob(os.path.join(GLMFiles,'vol*')))
			NBetas=len(glob.glob(os.path.join(GLMFiles,'Beta*')))
			
			if Min==120:
				print ('Timeout Error For {}'.format(InputNii))
				Report(ReportFile,'Timeout Error For {}'.format(InputNii))
			print 'waiting'
			
			
		Betas=sorted(glob.glob(os.path.join(GLMFiles,'Beta*')))
		#Report(ReportFile,cmd)
		files=''
		for b in Betas:
			files=files+b+' '
		cmd='fslmerge -z {} {}'.format(os.path.join(OutputPath,'Beta'),files)
		Report(ReportFile,cmd)
		process=sp.Popen(cmd,shell=True)
		process.wait()
		
		cmd='fslcpgeom {} {}'.format(RefVol,os.path.join(OutputPath,'Beta'))
		Report(ReportFile,cmd)
		process=sp.Popen(cmd,shell=True)
		process.wait()        
		
		Betas=sorted(glob.glob(os.path.join(GLMFiles,'tStat*')))
		#print Betas
		files=''
		for b in Betas:
			files=files+b+' '
		cmd='fslmerge -z {} {}'.format(os.path.join(OutputPath,'tStat'),files)
		Report(ReportFile,cmd)
		process=sp.Popen(cmd,shell=True)
		process.wait()
		
		cmd='fslcpgeom {} {}'.format(RefVol,os.path.join(OutputPath,'tStat'))
		Report(ReportFile,cmd)
		process=sp.Popen(cmd,shell=True)
		process.wait()
		
		
		Betas=sorted(glob.glob(os.path.join(GLMFiles,'pVal*')))
		#print Betas
		files='' 
		for b in Betas:
			files=files+b+' '
		cmd='fslmerge -z {} {}'.format(os.path.join(OutputPath,'pVal'),files)
		Report(ReportFile,cmd)
		process=sp.Popen(cmd,shell=True)
		process.wait()
		
		cmd='fslcpgeom {} {}'.format(RefVol,os.path.join(OutputPath,'pVal'))
		Report(ReportFile,cmd)
		process=sp.Popen(cmd,shell=True)
		process.wait()
		
	else:
		print ('All Zero Regressor.  Skipping.')
def main(InputNii, con, Regressor, meth, WrkDir="", OutputDir=""):

    txt = np.loadtxt(Regressor)
    if not all([i == 0 for i in txt]):

        RootDir, FileName = os.path.split(InputNii)

        trash = ".exe"
        FileBase = FileName
        while trash:
            FileBase, trash = os.path.splitext(FileBase)

        OutputPath = os.path.join(RootDir, "tPython", meth, con)

        if not WrkDir:
            WrkDir = os.path.join(RootDir, "{}_Work".format(FileBase))

        GLMFiles = os.path.join(WrkDir, "WorkFiles", "GLM", meth, con)
        ClusterJobDir = os.path.join(WrkDir, "ShFiles", "GLM", meth, con)
        ErrorOutput = os.path.join(WrkDir, "ClusterError", "GLM", meth, con)
        ClusterOutput = os.path.join(WrkDir, "ClusterOutput", "GLM", meth, con)

        ReportFile = os.path.join(GLMFiles, "Report.txt")
        if os.path.exists(ReportFile):
            cmd = "rm {}".format(ReportFile)
            print cmd
            os.system(cmd)
        BaseDir, fname = os.path.split(InputNii)

        while not fname.find(".") == -1:
            fname, trash = os.path.splitext(fname)

        if not os.path.exists(WrkDir):
            os.makedirs(WrkDir)

        if not os.path.exists(ClusterJobDir):
            os.makedirs(ClusterJobDir)
        else:
            cmd = "rm {}/*.sh".format(ClusterJobDir)
            Report(ReportFile, cmd)
            os.system(cmd)

        if not os.path.exists(GLMFiles):
            os.makedirs(GLMFiles)
        else:
            cmd = "rm {}/*".format(GLMFiles)
            Report(ReportFile, cmd)
            os.system(cmd)

        if not os.path.exists(ErrorOutput):
            os.makedirs(ErrorOutput)
        else:
            cmd = "rm {}/*".format(ErrorOutput)
            Report(ReportFile, cmd)
            os.system(cmd)

        if not os.path.exists(ClusterOutput):
            os.makedirs(ClusterOutput)
        else:
            cmd = "rm {}/*".format(ClusterOutput)
            Report(ReportFile, cmd)
            os.system(cmd)

        if not os.path.exists(OutputPath):
            os.makedirs(OutputPath)
        print InputNii
        img = nb.load(InputNii)
        nb.loadsave.save(img, "{}/FullNii.nii.gz".format(GLMFiles))
        # cmd='cp {} {}/FullNii.nii'.format(InputNii,GLMFiles)
        # print cmd
        # process=sp.Popen(cmd,shell=True)
        # process.wait()

        cmd = "fslsplit {0}/FullNii.nii {0}/RefVol -t".format(GLMFiles)
        Report(ReportFile, cmd)
        process = sp.Popen(cmd, shell=True)
        process.wait()

        RVs = glob.glob(os.path.join(GLMFiles, "RefVol*"))

        for r in RVs[1:]:
            cmd = "rm {}".format(r)
            Report(ReportFile, cmd)
            process = sp.Popen(cmd, shell=True)
            process.wait()

        RV = RVs[0]
        cmd = "fslsplit {} {}/RefZ -z".format(RV, GLMFiles)
        Report(ReportFile, cmd)
        process = sp.Popen(cmd, shell=True)
        process.wait()
        RefVol = RV

        RVs = glob.glob(os.path.join(GLMFiles, "RefZ*"))
        for r in RVs[1:]:
            cmd = "rm {}".format(r)
            Report(ReportFile, cmd)
            process = sp.Popen(cmd, shell=True)
            process.wait()
        RV = RVs[0]

        cmd = "fslsplit {0}/FullNii.nii {0}/vol -z".format(GLMFiles)
        Report(ReportFile, cmd)
        process = sp.Popen(cmd, shell=True)
        process.wait()

        vols = glob.glob(os.path.join(GLMFiles, "vol*.nii.gz"))
        nVols = len(vols)
        Report(ReportFile, "Number of Vols: {}".format(nVols))
        for v in vols:
            trash, volID = os.path.split(v)

            volID, trash = os.path.splitext(volID)

            while trash:
                volID, trash = os.path.splitext(volID)

            rpt = "Making SH for Volume {}".format(volID)
            Report(ReportFile, rpt)
            shPath = os.path.join(ClusterJobDir, volID + ".sh")
            GLMsh.main(v, Regressor, RV, shPath, ErrorOutput, ClusterOutput)

        SubmitCmd = (
            "for Dir in `/bin/ls "
            + ClusterJobDir
            + '/*.sh`; do echo "Running GLM on ${Dir}.";qsub -cwd $Dir;sleep 2; done'
        )
        Report(ReportFile, cmd)
        os.system(SubmitCmd)

        Min = 0
        Nvols = len(glob.glob(os.path.join(GLMFiles, "vol*")))
        NBetas = len(glob.glob(os.path.join(GLMFiles, "Beta*")))

        while not Nvols == NBetas and Min < 120 * 2:
            time.sleep(60)
            Min = Min + 1
            Nvols = len(glob.glob(os.path.join(GLMFiles, "vol*")))
            NBetas = len(glob.glob(os.path.join(GLMFiles, "Beta*")))

            if Min == 120 * 2:
                print ("Timeout Error For {}".format(InputNii))
                Report(ReportFile, "Timeout Error For {}".format(InputNii))
            print "waiting"

        if Min < 120 * 2:
            Betas = sorted(glob.glob(os.path.join(GLMFiles, "Beta*")))
            # Report(ReportFile,cmd)
            files = ""
            for b in Betas:
                files = files + b + " "
            cmd = "fslmerge -z {} {}".format(os.path.join(OutputPath, "Beta"), files)
            Report(ReportFile, cmd)
            process = sp.Popen(cmd, shell=True)
            process.wait()

            cmd = "fslcpgeom {} {}".format(RefVol, os.path.join(OutputPath, "Beta"))
            Report(ReportFile, cmd)
            process = sp.Popen(cmd, shell=True)
            process.wait()

            Betas = sorted(glob.glob(os.path.join(GLMFiles, "tStat*")))
            # print Betas
            files = ""
            for b in Betas:
                files = files + b + " "
            cmd = "fslmerge -z {} {}".format(os.path.join(OutputPath, "tStat"), files)
            Report(ReportFile, cmd)
            process = sp.Popen(cmd, shell=True)
            process.wait()

            cmd = "fslcpgeom {} {}".format(RefVol, os.path.join(OutputPath, "tStat"))
            Report(ReportFile, cmd)
            process = sp.Popen(cmd, shell=True)
            process.wait()

            Betas = sorted(glob.glob(os.path.join(GLMFiles, "pVal*")))
            # print Betas
            files = ""
            for b in Betas:
                files = files + b + " "
            cmd = "fslmerge -z {} {}".format(os.path.join(OutputPath, "pVal"), files)
            Report(ReportFile, cmd)
            process = sp.Popen(cmd, shell=True)
            process.wait()

            cmd = "fslcpgeom {} {}".format(RefVol, os.path.join(OutputPath, "pVal"))
            Report(ReportFile, cmd)
            process = sp.Popen(cmd, shell=True)
            process.wait()

    else:
        print ("All Zero Regressor.  Skipping.")