| Conditions | 7 |
| Total Lines | 89 |
| Code Lines | 38 |
| 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:
| 1 | import collections |
||
| 12 | def from_hdf5_file(map_tree_file, roi): |
||
| 13 | """ |
||
| 14 | Create a MapTree object from a HDF5 file and a ROI. Do not use this directly, use map_tree_factory instead. |
||
| 15 | |||
| 16 | :param map_tree_file: |
||
| 17 | :param roi: |
||
| 18 | :return: |
||
| 19 | """ |
||
| 20 | |||
| 21 | # Read the data frames contained in the file |
||
| 22 | with Serialization(map_tree_file) as serializer: |
||
| 23 | |||
| 24 | analysis_bins_df, _ = serializer.retrieve_pandas_object('/analysis_bins') |
||
| 25 | meta_df, _ = serializer.retrieve_pandas_object('/analysis_bins_meta') |
||
| 26 | _, roi_meta = serializer.retrieve_pandas_object('/ROI') |
||
| 27 | |||
| 28 | # Let's see if the file contains the definition of an ROI |
||
| 29 | if len(roi_meta) > 0: |
||
| 30 | |||
| 31 | # Yes. Let's build it |
||
| 32 | file_roi = get_roi_from_dict(roi_meta) |
||
| 33 | |||
| 34 | # Now let's check that the ROI the user has provided (if any) is compatible with the one contained |
||
| 35 | # in the file (i.e., either they are the same, or the user-provided one is smaller) |
||
| 36 | if roi is not None: |
||
| 37 | |||
| 38 | # Let's test with a nside=1024 (the highest we will use in practice) |
||
| 39 | active_pixels_file = file_roi.active_pixels(1024) |
||
| 40 | active_pixels_user = roi.active_pixels(1024) |
||
| 41 | |||
| 42 | # This verifies that active_pixels_file is a superset (or equal) to the user-provided set |
||
| 43 | assert set(active_pixels_file) >= set(active_pixels_user), \ |
||
| 44 | "The ROI you provided (%s) is not a subset " \ |
||
| 45 | "of the one contained in the file (%s)" % (roi, file_roi) |
||
| 46 | |||
| 47 | else: |
||
| 48 | |||
| 49 | # The user has provided no ROI, but the file contains one. Let's issue a warning |
||
| 50 | custom_warnings.warn("You did not provide any ROI but the map tree %s contains " |
||
| 51 | "only data within the ROI %s. " |
||
| 52 | "Only those will be used." % (map_tree_file, file_roi)) |
||
| 53 | |||
| 54 | # Make a copy of the file ROI and use it as if the user provided that one |
||
| 55 | roi = get_roi_from_dict(file_roi.to_dict()) |
||
| 56 | |||
| 57 | # Get the name of the analysis bins |
||
| 58 | |||
| 59 | bin_names = analysis_bins_df.index.levels[0] |
||
| 60 | |||
| 61 | # Loop over them and build a DataAnalysisBin instance for each one |
||
| 62 | |||
| 63 | data_analysis_bins = collections.OrderedDict() |
||
| 64 | |||
| 65 | for bin_name in bin_names: |
||
| 66 | |||
| 67 | this_df = analysis_bins_df.loc[bin_name] |
||
| 68 | this_meta = meta_df.loc[bin_name] |
||
| 69 | |||
| 70 | if roi is not None: |
||
| 71 | |||
| 72 | # Get the active pixels for this plane |
||
| 73 | active_pixels_user = roi.active_pixels(this_meta['nside']) |
||
| 74 | |||
| 75 | # Read only the pixels that the user wants |
||
| 76 | observation_hpx_map = SparseHealpix(this_df.loc[active_pixels_user, 'observation'].values, |
||
| 77 | active_pixels_user, this_meta['nside']) |
||
| 78 | background_hpx_map = SparseHealpix(this_df.loc[active_pixels_user, 'background'].values, |
||
| 79 | active_pixels_user, this_meta['nside']) |
||
| 80 | |||
| 81 | else: |
||
| 82 | |||
| 83 | # Full sky |
||
| 84 | observation_hpx_map = DenseHealpix(this_df.loc[:, 'observation'].values) |
||
| 85 | background_hpx_map = DenseHealpix(this_df.loc[:, 'background'].values) |
||
| 86 | |||
| 87 | # This signals the DataAnalysisBin that we are dealing with a full sky map |
||
| 88 | active_pixels_user = None |
||
| 89 | |||
| 90 | # Let's now build the instance |
||
| 91 | this_bin = DataAnalysisBin(bin_name, |
||
| 92 | observation_hpx_map=observation_hpx_map, |
||
| 93 | background_hpx_map=background_hpx_map, |
||
| 94 | active_pixels_ids=active_pixels_user, |
||
| 95 | n_transits=this_meta['n_transits'], |
||
| 96 | scheme='RING' if this_meta['scheme'] == 0 else 'NEST') |
||
| 97 | |||
| 98 | data_analysis_bins[bin_name] = this_bin |
||
| 99 | |||
| 100 | return data_analysis_bins |
||
| 101 |
The coding style of this project requires that you add a docstring to this code element. Below, you find an example for methods:
If you would like to know more about docstrings, we recommend to read PEP-257: Docstring Conventions.