Source code for special_ops.SO_delimages
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import getopt
import fnmatch
import os, os.path
import string
from optparse import OptionParser
import glob
import re
#from sets import Set
from subprocess import call
from special_ops.SO_reportGenerator import reportGenerator
[docs]class Foo:
def __init__(self, filename):
self.Filename = filename
pattern = re.compile("([xyz]).+id..\.E.mod\.max_([\d.]+)\.lambda\(nm\)_([\d.]+)\.freq\(Mhz\)_([\d.]+)\.pos\(mum\)_([\d.]+)\.png")
m = pattern.match(self.Filename)
#print m
if m:
#print m.groups()
self.Plane = m.group(1)
self.MaxValue = float(m.group(2))
self.Lambda = float(m.group(3))
self.Freq = float(m.group(4))
self.Pos = float(m.group(5))
else:
print('ERROR: NO MATCH : ', filename)
sys.exit(-1)
#Xpos_set.add(pos)
#freq_set.add(freq)
#lambda_set.add(Lambda)
#self.r = realpart
#self.i = imagpart
[docs]def mergePictures(directory,FirstPic):
owd = os.getcwd()
os.chdir(directory)
print(('os.getcwd() = ',os.getcwd()))
plane_filenames = glob.glob('[xyz]*.png')
print(('plane_filenames = ',plane_filenames))
plane_list=[]
Xpos_set=set([])
Ypos_set=set([])
Zpos_set=set([])
freq_set=set([])
lambda_set=set([])
for filename in plane_filenames:
p = Foo(filename)
plane_list.append(p)
if p.Plane=='x':
Xpos_set.add(p.Pos)
elif p.Plane=='y':
Ypos_set.add(p.Pos)
else:
Zpos_set.add(p.Pos)
freq_set.add(p.Freq)
lambda_set.add(p.Lambda)
Xpos_set=sorted(list(Xpos_set))
Ypos_set=sorted(list(Ypos_set))
Zpos_set=sorted(list(Zpos_set))
lambda_set=sorted(list(lambda_set))
print(('Xpos_set = ', Xpos_set))
print(('Ypos_set = ', Ypos_set))
print(('Zpos_set = ', Zpos_set))
print(('lambda_set = ', lambda_set))
if len(Xpos_set)!=3 and len(Xpos_set)!=1:
print('WARNING: len(Xpos_set)=',len(Xpos_set))
os.chdir(owd)
return(1)
#sys.exit(-1)
if len(Ypos_set)!=3 and len(Ypos_set)!=1:
print('WARNING: len(Ypos_set)=',len(Ypos_set))
os.chdir(owd)
return(1)
#sys.exit(-1)
if len(Zpos_set)!=3 and len(Zpos_set)!=1:
print('WARNING: len(Zpos_set)=',len(Zpos_set))
os.chdir(owd)
return(1)
#sys.exit(-1)
if len(Xpos_set)==1:
Xmid = 0
else:
Xmid = 1
if len(Ypos_set)==1:
Ymid = 0
else:
Ymid = 1
if len(Zpos_set)==1:
Zmid = 0
else:
Zmid = 1
outFile_list = []
print('=== To merge: ===')
for Lambda in lambda_set:
for p in plane_list:
if p.Plane=='x' and p.Pos==Xpos_set[Xmid] and p.Lambda==Lambda:
#print 'BIP 1'
p1=p
if p.Plane=='y' and p.Pos==Ypos_set[Ymid] and p.Lambda==Lambda:
#print 'BIP 2'
p2=p
if p.Plane=='z' and p.Pos==Zpos_set[Zmid] and p.Lambda==Lambda:
#print 'BIP 3'
p3=p
print(p1.Filename+' + '+p2.Filename+' + '+p3.Filename+' -> '+str(Lambda)+'.png')
outFile = str(Lambda)+'.png'
cmd=['convert', p1.Filename, '(', p2.Filename, p3.Filename, '-append', ')', '-gravity', 'center', '+append', outFile]
outFile_list.append(outFile)
print(cmd)
call(cmd)
infiles = glob.glob('*.in')
if not infiles:
print('no infile found')
else:
base = os.path.splitext(infiles[0])[0]
title = base
texfile = base+'.report.tex'
#texfile = 'tmp.tex'
#picture_list = ['p001id.png']
picture_list = [FirstPic]
picture_list.extend(outFile_list)
title_list = [title]*len(picture_list)
print('texfile = ', texfile)
print('title_list = ', title_list)
print('picture_list = ', picture_list)
reportGenerator(texfile, title_list, picture_list)
print('=== To delete: ===')
for p in plane_list:
print(p.Filename)
os.remove(p.Filename)
#if p.Plane=='x' and p.Pos==Xpos_set[0] or p.Pos==Xpos_set[2]:
#print p.Filename
#os.remove(p.Filename)
os.chdir(owd)
return(0)
#sys.exit(0)
if __name__ == '__main__':
# temp main
# loop recursively through dirs
print(('sys.argv[1] = ',sys.argv[1]))
mergePictures(sys.argv[1],sys.argv[2])
for root, dirs, files in os.walk(sys.argv[1]):
for d in dirs:
localdir = os.path.join(root,d)
print('localdir = ', localdir)
mergePictures(localdir,sys.argv[2])