main change: worked to avoid memory leaks trough view of original big array and iminuit object
This commit is contained in:
parent
a2c508fa5d
commit
6457520442
24
alignment.py
24
alignment.py
|
@ -77,7 +77,7 @@ kw_2dplot = dict(
|
||||||
cmap = cmap
|
cmap = cmap
|
||||||
)
|
)
|
||||||
|
|
||||||
fit_ret = collections.namedtuple("fit_ret",["fit_result","init_pars","final_pars",\
|
fit_ret = collections.namedtuple("fit_ret",["init_pars","final_pars",\
|
||||||
"final_transform1","final_transform2","im1","im2","E","p1","p1_sum","p2","p2_sum","fom","ratio","tneeded"] )
|
"final_transform1","final_transform2","im1","im2","E","p1","p1_sum","p2","p2_sum","fom","ratio","tneeded"] )
|
||||||
|
|
||||||
def calcFOM(p1,p2,ratio):
|
def calcFOM(p1,p2,ratio):
|
||||||
|
@ -268,22 +268,21 @@ def loadAlignment(fname):
|
||||||
def unravel_results(res,nSaveImg='all'):
|
def unravel_results(res,nSaveImg='all'):
|
||||||
final_pars = dict()
|
final_pars = dict()
|
||||||
# res[0].fit_result is a list if we are trying to unravel retult from getShots
|
# res[0].fit_result is a list if we are trying to unravel retult from getShots
|
||||||
if isinstance(res[0].fit_result,list):
|
if isinstance(res[0].init_pars,list):
|
||||||
parnames = res[0].fit_result[0].parameters
|
parnames = res[0].init_pars[0].get_keys()
|
||||||
else:
|
else:
|
||||||
parnames = res[0].fit_result.parameters
|
parnames = res[0].init_pars.keys()
|
||||||
final_pars = dict()
|
final_pars = dict()
|
||||||
init_pars = dict()
|
init_pars = dict()
|
||||||
for n in parnames:
|
for n in parnames:
|
||||||
final_pars[n] = np.hstack( [r.final_pars[n] for r in res])
|
final_pars[n] = np.hstack( [r.final_pars[n] for r in res])
|
||||||
init_pars[n] = np.hstack( [r.init_pars[n] for r in res])
|
init_pars[n] = np.hstack( [r.init_pars[n] for r in res])
|
||||||
im1 = np.asarray( [r.im1 for r in res])
|
im1 = np.asarray( [r.im1 for r in res if r.im1.shape[0] != 0])
|
||||||
im2 = np.asarray( [r.im2 for r in res])
|
im2 = np.asarray( [r.im2 for r in res if r.im2.shape[0] != 0])
|
||||||
if nSaveImg != 'all':
|
if nSaveImg != 'all':
|
||||||
im1 = im1[:nSaveImg]
|
im1 = im1[:nSaveImg].copy(); # copy is necessary to free the original memory
|
||||||
im2 = im2[:nSaveImg]
|
im2 = im2[:nSaveImg].copy(); # of original array
|
||||||
return fit_ret(
|
return fit_ret(
|
||||||
fit_result = [r.fit_result for r in res],
|
|
||||||
init_pars = init_pars,
|
init_pars = init_pars,
|
||||||
final_pars = final_pars,
|
final_pars = final_pars,
|
||||||
final_transform1 = [r.final_transform1 for r in res],
|
final_transform1 = [r.final_transform1 for r in res],
|
||||||
|
@ -439,7 +438,6 @@ def transformIminuit(im1,im2,init_transform=dict(),show=False,verbose=True,zeroT
|
||||||
idx = p1>np.nanmax(p1)/10.
|
idx = p1>np.nanmax(p1)/10.
|
||||||
fom = calcFOM(p1,p2,r)
|
fom = calcFOM(p1,p2,r)
|
||||||
return fit_ret(
|
return fit_ret(
|
||||||
fit_result = imin,
|
|
||||||
init_pars = init_params,
|
init_pars = init_params,
|
||||||
final_pars = final_params,
|
final_pars = final_params,
|
||||||
final_transform1 = t1,
|
final_transform1 = t1,
|
||||||
|
@ -581,9 +579,9 @@ def doShots(imgs1,imgs2,initpars,nJobs=16,doFit=False,returnBestTransform=False,
|
||||||
(joblib.delayed(doShot)(imgs1[i],imgs2[i],initpars,doFit=doFit) for i in range(N))
|
(joblib.delayed(doShot)(imgs1[i],imgs2[i],initpars,doFit=doFit) for i in range(N))
|
||||||
res = unravel_results(pool,nSaveImg=nSaveImg)
|
res = unravel_results(pool,nSaveImg=nSaveImg)
|
||||||
if returnBestTransform:
|
if returnBestTransform:
|
||||||
idx = np.argmin( res.fom );
|
idx = np.nanargmin( res.fom );
|
||||||
print("FOM for best alignment %.2f"%res.fom[fom])
|
print("FOM for best alignment %.2f"%res.fom[idx])
|
||||||
return res,res.final_transform1[idx]
|
return res,pool[idx].final_pars
|
||||||
else:
|
else:
|
||||||
return res
|
return res
|
||||||
# out = collections.OrderedDict( enumerate(pool) )
|
# out = collections.OrderedDict( enumerate(pool) )
|
||||||
|
|
Loading…
Reference in New Issue