import sys,os,argparse,glob parser=argparse.ArgumentParser(description="merge various devmap files") parser.add_argument("path",help="path to devmap files") parser.add_argument("devpat",help="devmap pattern") parser.add_argument("--repair",help="repair filenames",action="store_true") parser.add_argument("--zBin",help='merge up to z-bin',type=int,default=-1) parser.add_argument("--test",help='test only. no merging',action='store_true') parser.add_argument('--lines',help='number of lines to merge',type=int, default=-1) parser.add_argument('--nbins',help='number of z-bins to expect in one file',type=int,default=10) args=parser.parse_args() files=glob.glob(args.path+"/*"+args.devpat+"*") #files=[f for f in os.listdir(args.path)] dofiles=[] for f in files: if f.find("_merged.txt")>=0: continue if f.find(args.devpat)>=0: dofiles.append(f) newfname='' dofiles.sort() #for d in dofiles: # if d.find('r209')>0: # print d # exit() if args.repair: for fname in dofiles: part=fname.split('z') newfname=part[0]+'z' zbin=int(part[1]) if zbin<100: newfname+='0' if zbin<10: newfname+='0' newfname+=str(zbin) if fname!=newfname: print fname,"-->",newfname os.system('mv '+fname+' '+newfname) u=raw_input() print "redo the merging without repair option" exit() #print dofiles #print dofiles rbin=0 oldzcount=0 oldrbin=0 rcount=0 zbin=0 zcount=-1 zcount2=0 text='nothing is ' errorfile=open("./devmapErrors.txt","w") if not args.test: outfile=open(args.path+args.devpat+"_merged.txt","w+") globlinecount=0 dofiles.append("last_r999z999") nz=1447 nr=211 for fname in dofiles: linecount=0 rbin=int(fname[-7:-4]) zbin=int(fname[-3:]) if oldrbin==rbin: zcount+=1 zcount2+=1 # if rbin==209: # print zcount, zcount2 # print fname if zbin!=zcount: while (zcount!=zbin): text+=str(zcount)+' ' zcount+=1 else: print zcount2,"files for r-bin:",oldrbin print text,'missing for rBin:',oldrbin if text!='': errorfile.write(str(text)+'missing for rBin:'+str(oldrbin)+"\n") zcount=0 zcount2=1 text='' if fname=="last_r999z999": continue f=open(fname,'r') if not args.test: for line in f: if rbin==0 and zbin==0 and linecount==0: words=line.split(" ") nz=int(words[3]) nr=int(words[0]) if zbin>args.zBin and args.zBin!=-1: line = '0 0 0 0 0\n' if args.lines!=-1 and globlinecount>args.lines: line = '0 0 0 0 0\n' if not args.test: outfile.write(line) linecount+=1 globlinecount+=1 # if linecount