# $Id: batch.py,v 1.63 2013/02/15 19:15:41 samn Exp $ # execfile("runone.py") # loads sim import sys import os import numpy # from modindex import * import multiprocessing # from Queue import Queue from conf import writeconf # from IPython.core.debugger import Tracer # debug_here = Tracer() # if __name__ != "__main__": # from neuron import h # from network import net # execfile("run.py") # #from run import loadminrundat liseed = [1234] # ,6912,9876,6789,3219,5936] lwseed = [4321] # ,5012,9281,8130,6143,7131] def appline (s,fn): fp = open(fn,"a") fp.write(s) fp.write("\n") fp.close() batchf = "mybatch.sh" def mycomm (s, fn=batchf): appline(s,fn) def mylog(s,fn="OLMbatchLong_13aug5B.log"): appline(s,fn) # runs batch modulating strength of NMDA synapses at OLM cells # loops & calls ntebatchrun.py to run the sim/save data def ntebatch(nlevels,startnum=0): x = numpy.linspace(0,1,nlevels) y = 0 for iseed in liseed: for wseed in lwseed: for i1,r1 in enumerate(x): #net.olm.set_r("somaNMDA",r1) if y < startnum: print ("skipping sim num ", y) y += 1 continue s = "./mod/x86_64/special -python ntebatchrun.py" s += " "+str(iseed)+" "+str(wseed)+" "+str(r1) print ("sim num = ", y, ", command = ", s) y += 1 mylog(s) os.system(s) # load info about batch run into an NQS. returns the NQS def ntebatchnq(nlevels=5): from neuron import h nq = h.NQS("id","simstr","iseed","wseed","OLMr") nq.strdec("simstr") x = numpy.linspace(0,1,nlevels) y = 0 for iseed in liseed: for wseed in lwseed: for i1,r1 in enumerate(x): simstr = "11may20.05_iseed_"+str(iseed)+"_wseed_"+str(wseed) simstr += "_OLMr_"+str(r1) nq.append(y,simstr,iseed,wseed,r1) y += 1 return nq # runs batch modulating strength of NMDA synapses at different cell types/locations # loops & calls nmbatchrun.py to run the sim/save data def nmbatch(nlevels,startnum=0): x = numpy.linspace(0,1,nlevels) y = 0 for iseed in liseed: for wseed in lwseed: for i1,r1 in enumerate(x): #net.olm.set_r("somaNMDA",r1) for i2, r2 in enumerate(x): #net.bas.set_r("somaNMDA",r2) for i3, r3 in enumerate(x): #net.pyr.set_r("BdendNMDA",r3) for i4, r4 in enumerate(x): if y < startnum: print ("skipping sim num ", y) y += 1 continue s = "./mod/x86_64/special -python nmbatchrun.py" s += " "+str(iseed)+" "+str(wseed)+" "+str(r1)+" "+str(r2)+" "+str(r3)+" "+str(r4) print ("sim num = ", y, ", command = ", s) y += 1 mylog(s) os.system(s) #net.pyr.set_r("Adend3NMDA",r4) # runs batch modulating level of Ih conductance at PYR,BAS cells together - maintaining OLM Ih conductance # loops & calls ihbatchrun.py to run the sim/save data def longihbatchPYRBAS (nlevels,startnum=0,qsz=25): procs = [] q = Queue(qsz) x,y = numpy.linspace(0,2,nlevels), 0 iseed, wseed = liseed[0], lwseed[0] def myworker (scomm,num): os.system(scomm) #worker function, invoked in a process. for ih1 in x: for ih2 in x: if y < startnum: print ("skipping sim num ", y) y += 1 continue s = "./mod/x86_64/special -python ihbatchrun.py" s += " "+str(iseed)+" "+str(wseed)+" "+str(ih1)+" "+str(ih2)+" "+str(1.0)+" 1.0" p = multiprocessing.Process(target=myworker,args=(s,2)) procs.append(p) q.put(p,True) # put proc on q and wait for free slot print ("sim num = ", y, ", command = ", s) mylog(s) p.start() # maybe have to put this before placing on q y += 1 for p in procs: p.join() # Wait for all worker processes to finish # runs batch modulating level of Ih conductance at OLM cells - maintaining PYR,BAS Ih conductance # loops & calls ihbatchrun.py to run the sim/save data def longihbatchOLM (nlevels,startnum=0,qsz=11): procs = [] q = Queue(qsz) x,y = numpy.linspace(0,2,nlevels), 0 iseed, wseed = liseed[0], lwseed[0] def myworker (scomm,num): os.system(scomm) #worker function, invoked in a process. for ih1 in x: if y < startnum: print ("skipping sim num ", y) y += 1 continue s = "./mod/x86_64/special -python ihbatchrun.py" s += " "+str(iseed)+" "+str(wseed)+" "+str(1.0)+" "+str(1.0)+" "+str(ih1)+" 1.0" p = multiprocessing.Process(target=myworker,args=(s,2)) procs.append(p) q.put(p,True) # put proc on q and wait for free slot print ("sim num = ", y, ", command = ", s) mylog(s) p.start() # maybe have to put this before placing on q y += 1 for p in procs: p.join() # Wait for all worker processes to finish # def getihsimstr (iseed,wseed,ihpyr,ihbas,iholm): simstr = "12nov09.09_iseed_"+str(iseed)+"_wseed_"+str(wseed) simstr += "_ihpyr_"+str(ihpyr)+"_ihbas_"+str(ihbas)+"_iholm_"+str(iholm) return simstr # return an NQS with concatenated vectors from longihbatcPYRBAS run # only loads data <= savenums def longihbatchPYRBASNQ (nlevels,savenums): x,y = numpy.linspace(0,2,nlevels), 0 iseed, wseed = liseed[0], lwseed[0] nq = h.NQS("id","simstr","iseed","wseed","ihpyr","ihbas","iholm","vlfp") nq.strdec("simstr") nq.odec("lfp") for ih1 in x: for ih2 in x: simstr = getihsimstr(iseed,wseed,ih1,ih2,1.0) fbase = "./data/lfp/" + simstr + "_" vlfp = catlfp(fbase,savenums) nq.append(y,simstr,iseed,wseed,ih1,ih2,1.0,vlfp) y += 1 return nq # runs batch modulating level of Ih conductance at PYR,BAS cells together - maintaining OLM Ih conductance # loops & calls ihbatchrun.py to run the sim/save data def ihbatchPYRBAS (nlevels,startnum=0): x = numpy.linspace(0,2,nlevels) y = 0 for iseed in liseed: for wseed in lwseed: for r1 in x: for r2 in x: if r1 == 1.0 and r2 == 1.0: continue # already ran all at baseline elif r1 != r2: continue # only running where they're equal else: xl = [[r1, r2, 1.0]] #elif r1 == r2: # continue # already ran same values of r1,r2 for xll in xl: if y < startnum: print ("skipping sim num ", y) y += 1 continue s = "./mod/x86_64/special -python ihbatchrun.py" s += " "+str(iseed)+" "+str(wseed)+" "+str(xll[0])+" "+str(xll[1])+" "+str(xll[2]) print ("sim num = ", y, ", command = ", s) y += 1 mylog(s) os.system(s) # mycomm(s) # load info about batch run into an NQS. returns the NQS def ihbatchPYRBASnq (nlevels): from neuron import h nq = h.NQS("id","simstr","iseed","wseed","ihpyr","ihbas","iholm") nq.strdec("simstr") x = numpy.linspace(0,2,nlevels) y = 0 for iseed in liseed: for wseed in lwseed: for r1 in x: for r2 in x: if r1 == 1.0 and r2 == 1.0: continue # already ran all at baseline else: xl = [[r1, r2, 1.0]] for xll in xl: simstr = "12nov09.09_iseed_"+str(iseed)+"_wseed_"+str(wseed) simstr += "_ihpyr_"+str(xll[0])+"_ihbas_"+str(xll[1])+"_iholm_"+str(xll[2]) nq.append(y,simstr,iseed,wseed,xll[0],xll[1],xll[2]) y += 1 return nq # runs batch modulating level of ih conductance # loops & calls ihbatchrun.py to run the sim/save data def ihbatch (nlevels,startnum=0): x = numpy.linspace(0,2,nlevels) y = 0 for iseed in liseed: for wseed in lwseed: for r1 in x: if r1 == 1.0: xl = [[1.0, 1.0, 1.0]] # skip dups else: xl = [[r1, r1, r1], [r1, 1.0, 1.0], [1.0, r1, 1.0], [1.0, 1.0, r1] ] for xll in xl: if y < startnum: print ("skipping sim num ", y) y += 1 continue s = "./mod/x86_64/special -python ihbatchrun.py" s += " "+str(iseed)+" "+str(wseed)+" "+str(xll[0])+" "+str(xll[1])+" "+str(xll[2]) print ("sim num = ", y, ", command = ", s) y += 1 mylog(s) os.system(s) # load info about batch run into an NQS. returns the NQS def ihbatchnq(nlevels): from neuron import h nq = h.NQS("id","simstr","iseed","wseed","ihpyr","ihbas","iholm") nq.strdec("simstr") x = numpy.linspace(0,2,nlevels) y = 0 for iseed in liseed: for wseed in lwseed: for r1 in x: if r1 == 1.0: xl = [[1.0, 1.0, 1.0]] # skip dups else: xl = [[r1, r1, r1], [r1, 1.0, 1.0], [1.0, r1, 1.0], [1.0, 1.0, r1] ] for xll in xl: simstr = "12nov09.09_iseed_"+str(iseed)+"_wseed_"+str(wseed) simstr += "_ihpyr_"+str(xll[0])+"_ihbas_"+str(xll[1])+"_iholm_"+str(xll[2]) nq.append(y,simstr,iseed,wseed,xll[0],xll[1],xll[2]) y += 1 return nq # load info about batch run into an NQS. returns the NQS (batch from 13aug1) def newihbatchnq (nlevels): nq = h.NQS("id","simstr","iseed","wseed","ihpyr","ihbas","iholm") nq.strdec("simstr") x = numpy.linspace(0,2,nlevels) y = 0 liseed = [1234]; lwseed = [4321]; for iseed in liseed: for wseed in lwseed: for r1 in x: if r1 == 1.0: xl = [[1.0, 1.0, 1.0]] # skip dups else: xl = [[r1, r1, r1], [r1, 1.0, 1.0], [1.0, r1, 1.0], [1.0, 1.0, r1] ] for xll in xl: simstr = "13aug1_iseed_"+str(iseed)+"_wseed_"+str(wseed) simstr += "_ihpyr_"+str(xll[0])+"_ihbas_"+str(xll[1])+"_iholm_"+str(xll[2]) nq.append(y,simstr,iseed,wseed,xll[0],xll[1],xll[2]) y += 1 for r1 in x: for r2 in x: if r1 == 1.0 and r2 == 1.0: continue # already ran all at baseline elif r1 != r2: continue else: xl = [[r1, r2, 1.0]] for xll in xl: simstr = "13aug1_iseed_"+str(iseed)+"_wseed_"+str(wseed) simstr += "_ihpyr_"+str(xll[0])+"_ihbas_"+str(xll[1])+"_iholm_"+str(xll[2]) nq.append(y,simstr,iseed,wseed,xll[0],xll[1],xll[2]) y += 1 return nq # load info about batch run into an NQS. returns the NQS def nmbatchnq(nlevels): from neuron import h nq = h.NQS("id","simstr","iseed","wseed","OLMr","BASr","PYRBr","PYRAr") nq.strdec("simstr") x = numpy.linspace(0,1,nlevels) y = 0 for iseed in liseed: for wseed in lwseed: for i1,r1 in enumerate(x): for i2, r2 in enumerate(x): for i3, r3 in enumerate(x): for i4, r4 in enumerate(x): simstr = "11jun22.02_iseed_"+str(iseed)+"_wseed_"+str(wseed) simstr += "_OLMr_"+str(r1)+"_BASr_"+str(r2)+"_PYRBr_"+str(r3)+"_PYRAr_"+str(r4) nq.append(y,simstr,iseed,wseed,r1,r2,r3,r4) y += 1 return nq def testit (): # global h,net,loadminrundat # from neuron import h # from network import net # from run import loadminrundat print (h,net,loadminrundat) # get cross-frequency coupling arrays - vlfp is a vector def getcfc (vlfp): v1 = h.Vector() v1.copy(vlfp) # (vlfp,nsamp,vlfp.size()-1-nsamp) v1.sub(v1.mean()) sampr = 1e3 / h.dt from_t = 1 to_t = int( vlfp.size() / sampr - 1 ) phaseFreq,ampFreq,modArr = varModIndArr(v1, sampr, from_t, to_t, 4, 12, 25, 55, 1 , 1, 1) return phaseFreq, ampFreq, modArr # run CFC analysis on LFPs in nqb - save output to text files def addCFCcol (nqb,datadir="./data/"): global h nqb.tog("DB") if nqb.fi("fcfc") == -1: nqb.resize("fcfc") nqb.strdec("fcfc") nqb.pad() for i in range(int(nqb.v[0].size())): print ("up to " + str(i) + " out of " + str(nqb.v[0].size())) simstr = nqb.get("simstr",i).s fcfc = "./data/cfc/" + simstr + "_cfc.txt" if os.path.exists(fcfc): print ("skipping ", fcfc, " already done.") nqb.set("fcfc",i,fcfc) continue loadminrundat(simstr,datadir) phaseFreq, ampFreq, modArr = getcfc(net.vlfp) if i == 0: numpy.savetxt("./data/cfc/phaseFreq.txt",phaseFreq) numpy.savetxt("./data/cfc/ampFreq.txt",ampFreq) numpy.savetxt(fcfc,modArr) nqb.set("fcfc",i,fcfc) # add a column to nqb with power spectra from h.matpmtm. # skipms is milliseconds of signal to skip from beginning and end of LFP # ty determines method to use for calculating power spectrum def addnqpcol(nqb,skipms=200,ty=0,datadir="./data/"): global h nqb.tog("DB") if nqb.fi("nqp") == -1: nqb.resize("nqp") nqb.odec("nqp") nqb.pad() hasvlfp = False if nqb.fi("vlfp") != -1: hasvlfp = True v1=h.Vector() nsamp = skipms / h.dt # number of samples to skip from start,end for i in range(int(nqb.v[0].size())): print ("up to " + str(i) + " out of " + str(nqb.v[0].size())) if hasvlfp: v1.copy(nqb.get("vlfp",i).o[0]) else: loadminrundat(nqb.get("simstr",i).s,datadir) v1.copy(net.vlfp,nsamp,net.vlfp.size()-1-nsamp) v1.sub(v1.mean()) if ty==0: nqp=h.matpmtm(v1,1e3/h.dt) elif ty==1: nqp=h.pypmtm(v1,1e3/h.dt) elif ty==2: nqp=h.pypsd(v1,1e3/h.dt) else: nqp=h.nrnpsd(v1,1e3/h.dt) nqb.set("nqp",i,nqp) h.nqsdel(nqp) # add columns to nqb with synchrony of each population (uses cvpsync in stats.hoc) # skipms is milliseconds of signal to skip from beginning and end of sim def addCVpcol (nqb,skipms=200,simdur=8e3,datadir="./data/"): nqb.tog("DB") if nqb.fi("pyrCVp") == -1: for s in ["pyrCVp","basCVp","olmCVp","pyrbasCVp","pyrolmCVp","basolmCVp","allCVp"]: nqb.resize(s) nqb.pad() cdx = int(nqb.fi("pyrCVp")) # column index for i in range(int(nqb.v[0].size())): print ("up to " + str(i) + " out of " + str(nqb.v[0].size())) loadminrundat(nqb.get("simstr",i).s,datadir) net.snq.verbose=0 idx = cdx for ty in range(7): cvp = 0 if ty <= 2: # PYR then BAS then OLM if net.snq.select("ty",ty,"t","[]",skipms,simdur-skipms) > 0: cvp = h.cvpsync(net.snq.getcol("t"),net.cells[ty].n) elif ty == 3: # PYR + BAS if net.snq.select("ty","!=",2,"t","[]",skipms,simdur-skipms) > 0: cvp = h.cvpsync(net.snq.getcol("t"),net.cells[0].n+net.cells[1].n) elif ty == 4: # PYR + OLM if net.snq.select("ty","!=",1,"t","[]",skipms,simdur-skipms) > 0: cvp = h.cvpsync(net.snq.getcol("t"),net.cells[0].n+net.cells[2].n) elif ty == 5: # BAS + OLM if net.snq.select("ty","!=",0,"t","[]",skipms,simdur-skipms) > 0: cvp = h.cvpsync(net.snq.getcol("t"),net.cells[1].n+net.cells[2].n) elif ty == 6: # ALL if net.snq.select("t","[]",skipms,simdur-skipms) > 0: cvp = h.cvpsync(net.snq.getcol("t"),net.cells[0].n+net.cells[1].n+net.cells[2].n) nqb.v[idx].x[i] = cvp idx += 1 net.snq.verbose=1 # add columns to nqb with frequency of each population # skipms is milliseconds of signal to skip from beginning and end of sim def addHzcol (nqb,skipms=200,simdur=8e3,datadir="./data/"): nqb.tog("DB") if nqb.fi("pyrHz") == -1: for s in ["pyrHz", "basHz", "olmHz"]: nqb.resize(s) nqb.pad() cdx = int(nqb.fi("pyrHz")) # column index for i in range(int(nqb.v[0].size())): print ("up to " + str(i) + " out of " + str(nqb.v[0].size())) loadminrundat(nqb.get("simstr",i).s,datadir) net.snq.verbose=0 idx = cdx for ty in range(3): nspks = net.snq.select("ty",ty,"t","[]",skipms,simdur-skipms) hz = 1e3 * nspks / ( (simdur-2*skipms) * net.cells[ty].n ) # to hz nqb.v[idx].x[i] = hz idx += 1 net.snq.verbose=1 # runs a batch of sims of form baseline/washin/washout . during washin, OLM NMDA is turned off. # at washout, it's turned back on. def washbatch(nlevels,startnum=0): x = numpy.linspace(0,1,nlevels) y = 0 for iseed in liseed: for wseed in lwseed: for r1 in x: if y < startnum: print ("skipping sim num ", y) y += 1 continue s = "./mod/x86_64/special -python washbatchrun.py" s += " "+str(iseed)+" "+str(wseed)+" "+str(r1) print ("sim num = ", y, ", command = ", s) y += 1 mylog(s,"washbatch_10dec13.14.log") os.system(s) # load info about washbatch run into an NQS. returns the NQS def washbatchnq(nlevels): from neuron import h nq = h.NQS("id","simstr","iseed","wseed","OLMr") nq.strdec("simstr") x = numpy.linspace(0,1,nlevels) y = 0 for iseed in liseed: for wseed in lwseed: for r1 in x: simstr = "10dec14.10dec13.14_iseed_"+str(iseed)+"_wseed_"+str(wseed) simstr += "_washOLMr_"+str(r1) nq.append(y,simstr,iseed,wseed,r1) y += 1 return nq # addwashnqpcol -- add a column to nqb from washbatchnq with power spectra from h.matpmtm. def addwashnqpcol(nqb): from neuron import h # from network import net # from run import loadminrundat nqb.tog("DB") if nqb.fi("nqpbase") == -1: nqb.resize("nqpbase") # baseline power spectra nqb.odec("nqpbase") nqb.resize("nqpwin") # washin power spectra nqb.odec("nqpwin") nqb.resize("nqpwout") # washout power spectra nqb.odec("nqpwout") nqb.pad() cdx = int(nqb.fi("nqpbase")) # column id vec=h.Vector() dt = h.dt # time interval sampr = 1e3/dt # sampling rate vsidx = [2e3/dt,4e3/dt,6e3/dt] # start times for different periods veidx = [4e3/dt,6e3/dt,8e3/dt] # end times for different periods for i in range(int(nqb.v[0].size())): simstr = nqb.get("simstr",i).s print ("up to " + str(i) + " out of " + str(nqb.v[0].size())) print ("\tsim = " , simstr) loadminrundat(simstr) # load the sim data j = cdx # j has column index into nqb for k in range(len(vsidx)): print ("interval=",k,vsidx[k],veidx[k]) vec.resize(0) vec.copy(net.vlfp,vsidx[k],veidx[k]) # copy relevant portion of LFP vec.sub(vec.mean()) # remove mean nqp=h.matpmtm(vec,sampr) # get the power spectra nqb.set(nqb.s[j].s,i,nqp) # save nqp in correct row,column of nqb h.nqsdel(nqp) # free memory j += 1 # increment column index # runs a batch of sims where BAS cells are turned off def basbatch(startnum=0): y = 0 for iseed in liseed: for wseed in lwseed: if y < startnum: print ("skipping sim num ", y) y += 1 continue s = "./mod/x86_64/special -python basbatchrun.py" s += " "+str(iseed)+" "+str(wseed) print ("sim num = ", y, ", command = ", s) y += 1 mylog(s,"basbatch_10dec13.14.log") os.system(s) # load info about basbatch run into an NQS. returns the NQS def basbatchnq(): from neuron import h nq = h.NQS("id","simstr","iseed","wseed") nq.strdec("simstr") y = 0 for iseed in liseed: for wseed in lwseed: simstr = "10dec15.10dec13.14_iseed_"+str(iseed)+"_wseed_"+str(wseed) simstr += "_BASoff_" nq.append(y,simstr,iseed,wseed) y += 1 return nq # runs a batch of sims where OLM NMDA is off and different levels of current injection # into the OLM cells is applied. calls currinjbatchrun.py to run sim & save data. def currinjbatch(nlevels,startnum=0): x = numpy.linspace(10,50,nlevels) y = 0 for iseed in liseed: for wseed in lwseed: for i1,r1 in enumerate(x): if y < startnum: print ("skipping sim num ", y) y += 1 continue s = "./mod/x86_64/special -python currinjbatchrun.py" s += " "+str(iseed)+" "+str(wseed)+" "+str(r1) print ("sim num = ", y, ", command = ", s) y += 1 mylog(s,"currinjbatch_10dec13.14.log") os.system(s) # load info about currinjbatch run into an NQS. returns the NQS def currinjbatchnq(nlevels): from neuron import h nq = h.NQS("id","simstr","iseed","wseed","incOLMInj") nq.strdec("simstr") x = numpy.linspace(10,50,nlevels) y = 0 for iseed in liseed: for wseed in lwseed: for ic in x: simstr = "10dec14.10dec13.14_iseed_"+str(iseed)+"_wseed_"+str(wseed) simstr += "_incOLMInj_"+str(ic) nq.append(y,simstr,iseed,wseed,ic) y += 1 return nq # runs a batch of sims with 3 periods: baseline, washin, current injection (to replace washout) # during washin, ALL OLM NMDA is off. during current injection different levels of current injection # are sent into the OLM cells instead of washout. calls washinjbatchrun.py to run sim & save data. def washinjbatch(nlevels,startnum=0): x = numpy.linspace(0,50,nlevels) y = 0 for iseed in liseed: for wseed in lwseed: for i1,r1 in enumerate(x): if y < startnum: print ("skipping sim num ", y) y += 1 continue s = "./mod/x86_64/special -python washinjbatchrun.py" s += " "+str(iseed)+" "+str(wseed)+" "+str(r1) print ("sim num = ", y, ", command = ", s) y += 1 mylog(s,"washinjbatch_10dec15.06.log") os.system(s) # load info about washinjbatch run into an NQS. returns the NQS def washinjbatchnq(nlevels): from neuron import h nq = h.NQS("id","simstr","iseed","wseed","incOLMInj") nq.strdec("simstr") x = numpy.linspace(0,50,nlevels) y = 0 for iseed in liseed: for wseed in lwseed: for ic in x: simstr = "10dec16.10dec15.06_iseed_"+str(iseed)+"_wseed_"+str(wseed) simstr += "_washincOLMInj_"+str(ic*1e-3) nq.append(y,simstr,iseed,wseed,ic) y += 1 return nq # runs a batch of sims varying the MSGain (medial septal weight gain) # msbatchrun.py to run sim & save data. def msbatch(nlevels,startnum=0): x = numpy.linspace(0,1,nlevels) y = 0 for iseed in liseed: for wseed in lwseed: for i1,r1 in enumerate(x): if y < startnum: print ("skipping sim num ", y) y += 1 continue s = "./mod/x86_64/special -python msbatchrun.py" s += " "+str(iseed)+" "+str(wseed)+" "+str(r1) print ("sim num = ", y, ", command = ", s) y += 1 mylog(s,"msbatch_11mar28.12.log") os.system(s) # load info about msbatch run into an NQS. returns the NQS def msbatchnq(nlevels=5): from neuron import h nq = h.NQS("id","simstr","iseed","wseed","msgain") nq.strdec("simstr") x = numpy.linspace(0,1,nlevels) y = 0 for iseed in liseed: for wseed in lwseed: for msgain in x: simstr = "11mar28.12_iseed_"+str(iseed)+"_wseed_"+str(wseed) simstr += "_msgain_"+str(msgain) nq.append(y,simstr,iseed,wseed,msgain) y += 1 return nq # # append line s to filepath fn # def appline (s,fn): # '''append line s to filepath fn''' # fp = open(fn,"a"); fp.write(s + "\n"); fp.close() # append to the lists def NewParam (lsec,lopt,lval,sec,opt,val): '''append to the lists of params''' lsec.append(sec); lopt.append(opt); lval.append(val) # check that the batch dir exists def checkdir (d): '''check that the batch dir exists''' try: if not os.path.exists(d): os.mkdir(d) return True except: print ("could not create directory :" + d) return False # run a batch using multiprocessing # based on http://www.bryceboe.com/2011/01/28/the-python-multiprocessing-queue-and-large-objects/ # obtained from /u/samn/ca1d/batch.py def batchRun (whichParams,blog,skip=[],qsz=10,bdir="./batchconfigFiles"): '''run a batch using multiprocessing''' if not checkdir(bdir): return False jobs = multiprocessing.Queue() lsec,lopt,lval,lconfigfilestr = whichParams() def myworker (jobs): while True: scomm = jobs.get() if scomm == None: break print ("worker starting : " , scomm) os.system(scomm) #worker function, invoked in a process. for i in range(len(lsec)): if i in skip: continue cfgname = os.path.join(bdir, lconfigfilestr[i] + ".cfg") writeconf(cfgname,sec=lsec[i],opt=lopt[i],val=lval[i]) cmd = "python runone.py " + cfgname print (cmd, type(cmd)) appline(cmd,blog) jobs.put(cmd) workers = [] for i in range(qsz): jobs.put(None) tmp = multiprocessing.Process(target=myworker, args=(jobs,)) tmp.start() workers.append(tmp) for worker in workers: worker.join() return jobs.empty() # main... if __name__ == "__main__": na = len(sys.argv) # number of args print (sys.argv) if na < 2: print ("Usage: python batch.py type[0=nmbatch,1=washbatch,2=currinjbatch,3=basbatch,4=washinj,5=msbatch,6=ntebatch,7=ihbatch],[nlevels,startnum]") sys.exit(1) ty = int(sys.argv[1]) print ("hello!!! ty is : " + str(ty)) if ty == 0: print ("nmbatch") bru = nmbatch elif ty == 1: print ("washbatch") bru = washbatch elif ty == 2: print ("currinjbatch") bru = currinjbatch elif ty == 3: print ("basbatch") if na > 2: startnum = int(sys.argv[2]) basbatch(startnum) else: basbatch() sys.exit(0) elif ty == 4: print ("washinj") bru = washinjbatch elif ty == 5: print ("msbatch") bru = msbatch elif ty == 6: print ("ntebatch") bru = ntebatch elif ty == 7: print ("ihbatch") bru = ihbatch elif ty == 8: print ("ihbatchPYRBAS") bru = ihbatchPYRBAS elif ty == 9: print ("longihbatchPYRBAS") bru = longihbatchPYRBAS elif ty == 10: print ("longihbatchOLM") bru = longihbatchOLM else: print (str(ty) + "is an unknown batch type!") sys.exit(1) nlevels = int(sys.argv[2]) if na > 3: startnum = int(sys.argv[3]) bru(nlevels,startnum) else: bru(nlevels) sys.exit(0)