annotate pp_dexela.py @ 3:4419368c8287 draft default tip

"planemo upload"
author mzhuang
date Mon, 27 Sep 2021 18:50:33 +0000
parents 4d2a2268a17a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
1 from __future__ import print_function
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
2
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
3 import time
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
4 import os
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
5 import numpy as np
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
6
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
7 from hexrd import imageseries
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
8 from hexrd.imageseries.process import ProcessedImageSeries
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
9
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
10
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
11
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
12
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
13 class ProcessedDexelaIMS(ProcessedImageSeries):
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
14
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
15 ADDROW = 'add-row'
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
16 ADDCOL = 'add-column'
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
17
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
18 def __init__(self, imser, oplist, **kwargs):
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
19 super(ProcessedDexelaIMS, self).__init__(imser, oplist, **kwargs)
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
20 self.addop(self.ADDROW, self._addrow)
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
21 self.addop(self.ADDCOL, self._addcol)
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
22
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
23 def _addrow(self, img, k):
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
24 """insert row into position k"""
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
25 shp = img.shape
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
26 pimg = np.insert(img, k, 0, axis=0)
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
27 if k==0:
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
28 pimg[0] = pimg[1]
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
29 elif k==shp[0]:
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
30 pimg[k] = pimg[k-1]
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
31 else: # in middle
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
32 pimg[k] = (pimg[k-1] + pimg[k+1])/2
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
33
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
34 return pimg
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
35
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
36 def _addcol(self, img, k):
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
37 """insert row into position k"""
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
38 shp = img.shape
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
39 pimg = np.insert(img, k, 0, axis=1)
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
40 if k==0:
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
41 pimg[:,0] = pimg[:,1]
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
42 elif k==shp[0]:
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
43 pimg[:,k] = pimg[:,k-1]
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
44 else: # in middle
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
45 pimg[:,k] = (pimg[:,k-1] + pimg[:,k+1])/2
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
46
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
47 return pimg
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
48
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
49
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
50 DexelaIMS=ProcessedDexelaIMS
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
51
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
52 class PP_Dexela(object):
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
53 """PP_Dexela"""
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
54 PROCFMT = 'frame-cache'
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
55 RAWFMT = 'hdf5'
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
56 RAWPATH = '/imageseries'
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
57 DARKPCTILE = 50
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
58
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
59 def __init__(self,
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
60 fname, omw, panel_opts, panel_id,
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
61 frame_start=0, raw_format='hdf5',dark=None):
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
62 """Constructor for PP_Dexela"""
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
63 self._panel_id = panel_id
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
64 self.fname = fname
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
65 self.omwedges = omw
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
66 self.panel_opts = panel_opts
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
67 self.frame_start = frame_start
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
68 self.use_frame_list = (self.frame_start > 0)
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
69 if raw_format.lower() == 'hdf5':
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
70 self.raw = imageseries.open(
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
71 self.fname, self.RAWFMT, path=self.RAWPATH
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
72 )
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
73 else:
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
74 self.raw = imageseries.open(self.fname, raw_format.lower())
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
75 self._dark = dark
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
76
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
77 #print(
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
78 # 'On Init:\n\t%s, %d frames, %d omw, %d total'
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
79 # % (self.fname, self.nframes, self.omwedges.nframes, len(self.raw))
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
80 #)
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
81
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
82 @property
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
83 def panel_id(self):
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
84 return self._panel_id
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
85
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
86 @property
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
87 def oplist(self):
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
88 return [('dark', self.dark)]+self.panel_opts
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
89
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
90 @property
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
91 def framelist(self):
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
92 return range(self.frame_start, self.nframes + self.frame_start)
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
93
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
94 #
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
95 # ============================== API
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
96 #
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
97 @property
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
98 def nframes(self):
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
99 return self.omwedges.nframes
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
100
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
101 @property
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
102 def omegas(self):
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
103 return self.omwedges.omegas
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
104
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
105 def processed(self):
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
106 kw = {}
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
107 if self.use_frame_list:
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
108 kw = dict(frame_list=self.framelist)
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
109 return DexelaIMS(self.raw, self.oplist, **kw)
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
110
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
111 @property
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
112 def dark(self, nframes=100):
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
113 """build and return dark image"""
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
114 if self._dark is None:
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
115 usenframes = min(nframes, self.nframes)
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
116 print(
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
117 "building dark images using %s frames (may take a while)..."
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
118 % usenframes
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
119 )
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
120 start = time.time()
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
121 # self._dark = imageseries.stats.percentile(
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
122 # self.raw, self.DARKPCTILE, nframes=usenframes
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
123 # )
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
124 self._dark = imageseries.stats.median(
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
125 self.raw, nframes=usenframes
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
126 )#changed to median by DCP 11/18/17
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
127 elapsed = (time.time() - start)
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
128 print(
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
129 "done building background (dark) image: " +
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
130 "elapsed time is %f seconds" % elapsed
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
131 )
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
132
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
133 return self._dark
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
134
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
135 def save_processed(self, name, threshold, output_dir=None):
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
136 if output_dir is None:
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
137 output_dir = os.getcwd()
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
138 else:
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
139 os.mkdir(output_dir)
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
140
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
141 # add omegas
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
142 pims = self.processed()
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
143 metad = pims.metadata
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
144 metad['omega'] = self.omegas
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
145 metad['panel_id'] = self.panel_id
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
146 cache = '%s-cachefile.npz' % name
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
147 imageseries.write(pims, "dummy", self.PROCFMT,
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
148 style="npz",
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
149 threshold=threshold,
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
150 cache_file=cache)
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
151 pass # end class
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
152
4d2a2268a17a "planemo upload"
mzhuang
parents:
diff changeset
153