Add functions to get 3D krypton maps#948
Conversation
|
|
||
|
|
||
|
|
||
| def normalization(krmap, method, x_low, x_high, y_low, y_high): |
There was a problem hiding this comment.
The last 4 parameters need to be optional, since they are only relevant for method == "region". I also think it would be interesting to gather them in a dictionary to simplify the logic.
|
|
||
| def normalization(krmap, method, x_low, x_high, y_low, y_high): | ||
|
|
||
| mu_values = krmap.mu |
There was a problem hiding this comment.
since you are doing .dropna() everywhere, you can do it here already
| k, i, j = np.meshgrid(k_vals, i_vals, j_vals, indexing='ij') | ||
| k = k.ravel() | ||
| i = i.ravel() | ||
| j = j.ravel() |
There was a problem hiding this comment.
| k, i, j = np.meshgrid(k_vals, i_vals, j_vals, indexing='ij') | |
| k = k.ravel() | |
| i = i.ravel() | |
| j = j.ravel() | |
| k, i, j = map(np.ravel, | |
| np.meshgrid(k_vals, i_vals, j_vals, indexing='ij')) |
|
|
||
| """ | ||
|
|
||
| def create_NaN_map(xy_range, dt_range, xy_nbins, dt_nbins): |
There was a problem hiding this comment.
| def create_NaN_map(xy_range, dt_range, xy_nbins, dt_nbins): | |
| def create_empty_map(xy_range, dt_range, xy_nbins, dt_nbins): |
| xy_bins = np.linspace(xy_range[0], xy_range[1], xy_nbins + 1) | ||
| dt_bins = np.linspace(dt_range[0], dt_range[1], dt_nbins + 1) | ||
|
|
||
| #shift to bin centers invisible_cities.core.core_functions | ||
|
|
||
| i_range = np.arange(0, len(xy_bins)-1) | ||
| j_range = np.arange(0, len(xy_bins)-1) | ||
| k_range = np.arange(0, len(dt_bins)-1) |
There was a problem hiding this comment.
xy_bins and dt_bins are only used to compute their length, which are given by the variables xy_nbins and dt_nbins
| range_S2t = (low_S2t, high_S2t) | ||
| sel_S2t = in_range(kdst.S2t, *range_S2t) |
There was a problem hiding this comment.
| range_S2t = (low_S2t, high_S2t) | |
| sel_S2t = in_range(kdst.S2t, *range_S2t) | |
| sel_S2t = in_range(kdst.S2t, low_S2t, high_S2t) |
|
|
||
|
|
||
| def select_DTrange(kdst, low_DT, high_DT): | ||
| df_DTrange = kdst[(kdst.DT >= low_DT) & (kdst.DT <= high_DT)] |
|
|
||
|
|
||
| def select_nsipm(kdst, low_nsipm, high_nsipm): | ||
| sel_nsipm = (kdst.Nsipm >= low_nsipm) & (kdst.Nsipm <= high_nsipm) |
| d = {'eff diffusion band': [eff_DT], 'eff X rays': [eff_Xrays], 'eff 1S1 & 1S2': [eff_1S1_1S2], | ||
| 'eff S2 trigger time': [eff_S2t], 'eff Rmax': [eff_Rmax], 'eff range DT': [eff_DTrange], | ||
| 'eff number of SiPMS': [eff_nsipm], 'total efficiency': [total_eff]} | ||
|
|
||
| df_efficiencies = pd.DataFrame(data = d) |
There was a problem hiding this comment.
You can also have numbers in the dictionary (instead of lists of 1 element) and then add index=[0] when creating the dataframe
Added new density column to maps and test for this
If the number of events per bin is less than 5 now mu = nan.
gonzaponte
left a comment
There was a problem hiding this comment.
another round of comments
| dtrms2_low = lambda dt: -0.7 + 0.030 * (dt-20) # Gonzalo's | ||
| dtrms2_upp = lambda dt: 2.6 + 0.036 * (dt-20) # Gonzalo's2 |
There was a problem hiding this comment.
Now that these are in the config file, you can remove them.
|
|
||
| assert np.all(kdst_sel.nS1.values == 1) | ||
| assert np.all(kdst_sel.nS2.values == 1) | ||
| assert np.all((kdst_sel.nS1.values) & (kdst_sel.nS2.values)) == 1 |
There was a problem hiding this comment.
this line is probably not what you are trying to do. I'm surprised it even works.
| if method is NormMethod.median_region_anode: | ||
| E_median_region_anode = anode.mu.median() | ||
| return E_median_region_anode | ||
|
|
There was a problem hiding this comment.
raise an error here. The only way to get to the end of this function if is method is not a NormMethod
| y : pd.core.series.Series, | ||
| E : pd.core.series.Series, | ||
| xy_params : dict = None, | ||
| keV : bool = False) -> pd.core.series.Series: |
There was a problem hiding this comment.
I think we discussed using an arbitraty unit instead of keV
These scripts contain functions to: