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