| Conditions | 10 | 
| Total Lines | 77 | 
| Code Lines | 53 | 
| Lines | 0 | 
| Ratio | 0 % | 
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
Complex classes like savu.plugins.simulation.tomo_phantom.TomoPhantom.process_frames() often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
| 1 | # Copyright 2014 Diamond Light Source Ltd.  | 
            ||
| 133 | def process_frames(self, data):  | 
            ||
| 134 | # print "The input data shape is", data[0].shape  | 
            ||
| 135 | if (self.out_shape_sino[1] == 1):  | 
            ||
| 136 | # create a 2D phantom  | 
            ||
| 137 | model = TomoP2D.Model(self.model, self.dims, self.path_library2D)  | 
            ||
| 138 | # create a 2D sinogram  | 
            ||
| 139 | projdata_clean = TomoP2D.ModelSino(self.model, self.dims, self.detectors_num, self.angles, self.path_library2D)  | 
            ||
| 140 | # forming dictionaries with different artifact types and noise  | 
            ||
| 141 |             _noise_ =  {'noise_type' : self.parameters['artifacts_noise_type'], | 
            ||
| 142 | 'noise_sigma' : self.parameters['artifacts_noise_sigma'],  | 
            ||
| 143 | 'noise_seed' : 0}  | 
            ||
| 144 | # misalignment dictionary  | 
            ||
| 145 |             _sinoshifts_ = {} | 
            ||
| 146 | if self.parameters['artifacts_misalignment_maxamplitude'] is not None:  | 
            ||
| 147 |                 _sinoshifts_ = {'sinoshifts_maxamplitude' : self.parameters['artifacts_misalignment_maxamplitude']} | 
            ||
| 148 | |||
| 149 | # adding zingers and stripes  | 
            ||
| 150 |             _zingers_ = {} | 
            ||
| 151 | if self.parameters['artifacts_zingers_percentage'] is not None:  | 
            ||
| 152 |                 _zingers_ = {'zingers_percentage' : self.parameters['artifacts_zingers_percentage'], | 
            ||
| 153 | 'zingers_modulus' : 10}  | 
            ||
| 154 |             _stripes_ = {} | 
            ||
| 155 | if self.parameters['artifacts_stripes_percentage'] is not None:  | 
            ||
| 156 |                 _stripes_ = {'stripes_percentage' : self.parameters['artifacts_stripes_percentage'], | 
            ||
| 157 | 'stripes_maxthickness' : self.parameters['artifacts_stripes_maxthickness'],  | 
            ||
| 158 | 'stripes_intensity' : self.parameters['artifacts_stripes_intensity'],  | 
            ||
| 159 | 'stripes_type' : self.parameters['artifacts_stripes_type'],  | 
            ||
| 160 | 'stripes_variability' : self.parameters['artifacts_stripes_variability']}  | 
            ||
| 161 | |||
| 162 | if self.parameters['artifacts_misalignment_maxamplitude'] is not None:  | 
            ||
| 163 | [projdata, shifts] = _Artifacts_(projdata_clean, **_noise_, **_zingers_, **_stripes_, **_sinoshifts_)  | 
            ||
| 164 | else:  | 
            ||
| 165 | projdata = _Artifacts_(projdata_clean, **_noise_, **_zingers_, **_stripes_, **_sinoshifts_)  | 
            ||
| 166 | else:  | 
            ||
| 167 | # create a 3D phantom  | 
            ||
| 168 | frame_idx = self.out_pData[0].get_current_frame_idx()[0]  | 
            ||
| 169 | model = TomoP3D.ModelSub(self.model, self.dims, (frame_idx, frame_idx+1), self.path_library3D)  | 
            ||
| 170 | model = np.swapaxes(model,0,1)  | 
            ||
| 171 | model = np.flipud(model[:,0,:])  | 
            ||
| 172 | # create a 3D projection data  | 
            ||
| 173 | projdata_clean = TomoP3D.ModelSinoSub(self.model, self.dims, self.detectors_num, self.dims, (frame_idx, frame_idx+1), self.angles, self.path_library3D)  | 
            ||
| 174 | # forming dictionaries with different artifact types and noise  | 
            ||
| 175 |             _noise_ =  {'noise_type' : self.parameters['artifacts_noise_type'], | 
            ||
| 176 | 'noise_sigma' : self.parameters['artifacts_noise_sigma'],  | 
            ||
| 177 | 'noise_seed' : 0}  | 
            ||
| 178 | # misalignment dictionary  | 
            ||
| 179 |             _sinoshifts_ = {} | 
            ||
| 180 | if self.parameters['artifacts_misalignment_maxamplitude'] is not None:  | 
            ||
| 181 |                 _sinoshifts_ = {'sinoshifts_maxamplitude' : self.parameters['artifacts_misalignment_maxamplitude']} | 
            ||
| 182 | |||
| 183 | # adding zingers and stripes  | 
            ||
| 184 |             _zingers_ = {} | 
            ||
| 185 | if self.parameters['artifacts_zingers_percentage'] is not None:  | 
            ||
| 186 |                 _zingers_ = {'zingers_percentage' : self.parameters['artifacts_zingers_percentage', | 
            ||
| 187 | 'zingers_modulus' : 10}  | 
            ||
| 
                                                                                                    
                        
                         | 
                |||
| 188 |             _stripes_ = {} | 
            ||
| 189 | if self.parameters['artifacts_stripes_percentage'] is not None:  | 
            ||
| 190 |                 _stripes_ = {'stripes_percentage' : self.parameters['artifacts_stripes_percentage'], | 
            ||
| 191 | 'stripes_maxthickness' : self.parameters['artifacts_stripes_maxthickness'],  | 
            ||
| 192 | 'stripes_intensity' : self.parameters['artifacts_stripes_intensity'],  | 
            ||
| 193 | 'stripes_type' : self.parameters['artifacts_stripes_type'],  | 
            ||
| 194 | 'stripes_variability' : self.parameters['artifacts_stripes_variability']}  | 
            ||
| 195 | |||
| 196 | if self.parameters['artifacts_misalignment_maxamplitude'] is not None:  | 
            ||
| 197 | [projdata, shifts] = _Artifacts_(projdata_clean, **_noise_, **_zingers_, **_stripes_, **_sinoshifts_)  | 
            ||
| 198 | else:  | 
            ||
| 199 | projdata = _Artifacts_(projdata_clean, **_noise_, **_zingers_, **_stripes_, **_sinoshifts_)  | 
            ||
| 200 | projdata = np.swapaxes(projdata,0,1)  | 
            ||
| 201 | return [projdata, model]  | 
            ||
| 202 | |||
| 203 | def get_citation_information(self):  | 
            ||
| 204 | cite_info1 = CitationInformation()  | 
            ||
| 205 | cite_info1.name = 'citation1'  | 
            ||
| 206 | cite_info1.description = \  | 
            ||
| 207 |             ("TomoPhantom is a software package to generate 2D-4D analytical phantoms and their Radon transforms for various testing purposes.") | 
            ||
| 208 | cite_info1.bibtex = \  | 
            ||
| 209 |             ("@article{kazantsevTP2018,\n" + | 
            ||
| 210 |              "title={TomoPhantom, a software package to generate 2D-4D analytical phantoms for CT image reconstruction algorithm benchmarks},\n" + | 
            ||
| 236 |