:mod:`km3modules.k40` ===================== .. py:module:: km3modules.k40 .. autoapi-nested-parse:: A collection of k40 related functions and modules. .. !! processed by numpydoc !! Module Contents --------------- Classes ~~~~~~~ .. autoapisummary:: km3modules.k40.K40BackgroundSubtractor km3modules.k40.IntraDOMCalibrator km3modules.k40.TwofoldCounter km3modules.k40.HRVFIFOTimesliceFilter km3modules.k40.SummaryMedianPMTRateService km3modules.k40.MedianPMTRatesService km3modules.k40.ResetTwofoldCounts Functions ~~~~~~~~~ .. autoapisummary:: km3modules.k40.calibrate_dom km3modules.k40.calculate_weights km3modules.k40.load_k40_coincidences_from_hdf5 km3modules.k40.load_k40_coincidences_from_rootfile km3modules.k40.gaussian km3modules.k40.gaussian_wo_offset km3modules.k40.fit_delta_ts km3modules.k40.calculate_angles km3modules.k40.exponential_polinomial km3modules.k40.exponential km3modules.k40.fit_angular_distribution km3modules.k40.minimize_t0s km3modules.k40.minimize_sigmas km3modules.k40.minimize_qes km3modules.k40.correct_means km3modules.k40.correct_rates km3modules.k40.calculate_rms_means km3modules.k40.calculate_rms_rates km3modules.k40.get_comb_index km3modules.k40.add_to_twofold_matrix .. data:: log .. data:: TIMESLICE_LENGTH :annotation: = 0.1 .. data:: MC_ANG_DIST .. py:class:: K40BackgroundSubtractor Bases::class:`km3pipe.Module` Subtracts random coincidence background from K40 data .. !! processed by numpydoc !! .. method:: configure(self) .. method:: process(self, blob) .. method:: get_corrected_counts(self) .. method:: subtract_background(self) .. method:: finish(self) .. method:: dump(self, mean_rates, corrected_counts, livetime) .. py:class:: IntraDOMCalibrator Bases::class:`km3pipe.Module` Intra DOM calibrator which performs the calibration from K40Counts. :Parameters: **det_id: int** Detector ID [default: 14] **ctmin: float** Minimum cos(angle) **mode: str ('offline' | 'online')** Calibration mode [default: 'online'] .. !! processed by numpydoc !! .. method:: configure(self) .. method:: process(self, blob) .. method:: calibrate(self, twofold_counts, fit_background=False) .. method:: finish(self) .. py:class:: TwofoldCounter Bases::class:`km3pipe.Module` Counts twofold coincidences in timeslice hits per PMT combination. :Parameters: **'tmax': int** time window of twofold coincidences [ns] **'dump_filename': str** name for the dump file .. !! processed by numpydoc !! .. method:: configure(self) .. method:: reset(self) Reset coincidence counter .. !! processed by numpydoc !! .. method:: get_livetime(self) .. method:: process(self, blob) .. method:: dump(self) Write coincidence counts into a Python pickle .. !! processed by numpydoc !! .. py:class:: HRVFIFOTimesliceFilter Bases::class:`km3pipe.Module` Creat a frame index lookup table which holds DOM IDs of frames with at least one PMT in HRV. .. !! processed by numpydoc !! .. method:: configure(self) .. method:: get_skipped_frames(self) .. py:class:: SummaryMedianPMTRateService Bases::class:`km3pipe.Module` .. method:: configure(self) .. method:: get_median_rates(self) .. py:class:: MedianPMTRatesService Bases::class:`km3pipe.Module` .. method:: configure(self) .. method:: process(self, blob) .. method:: get_median_rates(self) .. py:class:: ResetTwofoldCounts Bases::class:`km3pipe.Module` .. method:: process(self, blob) .. function:: calibrate_dom(dom_id, data, detector, livetime=None, fit_ang_dist=False, scale_mc_to_data=True, ad_fit_shape='pexp', fit_background=True, ctmin=-1.0) Calibrate intra DOM PMT time offsets, efficiencies and sigmas :Parameters: **dom_id: DOM ID** .. **data: dict of coincidences or root or hdf5 file** .. **detector: instance of detector class** .. **livetime: data-taking duration [s]** .. **fixed_ang_dist: fixing angular distribution e.g. for data mc comparison** .. **auto_scale: auto scales the fixed angular distribution to the data** .. :Returns: **return_data: dictionary with fit results** .. .. !! processed by numpydoc !! .. function:: calculate_weights(fitted_rates, data) .. function:: load_k40_coincidences_from_hdf5(filename, dom_id) Load k40 coincidences from hdf5 file :Parameters: **filename: filename of hdf5 file** .. **dom_id: DOM ID** .. :Returns: **data: numpy array of coincidences** .. **livetime: duration of data-taking** .. .. !! processed by numpydoc !! .. function:: load_k40_coincidences_from_rootfile(filename, dom_id) Load k40 coincidences from JMonitorK40 ROOT file :Parameters: **filename: root file produced by JMonitorK40** .. **dom_id: DOM ID** .. :Returns: **data: numpy array of coincidences** .. **dom_weight: weight to apply to coincidences to get rate in Hz** .. .. !! processed by numpydoc !! .. function:: gaussian(x, mean, sigma, rate, offset) .. function:: gaussian_wo_offset(x, mean, sigma, rate) .. function:: fit_delta_ts(data, livetime, fit_background=True) Fits gaussians to delta t for each PMT pair. :Parameters: **data: 2d np.array: x = PMT combinations (465), y = time, entry = frequency** .. **livetime: length of data taking in seconds** .. **fit_background: if True: fits gaussian with offset, else without offset** .. :Returns: **numpy arrays with rates and means for all PMT combinations** .. .. !! processed by numpydoc !! .. function:: calculate_angles(detector, combs) Calculates angles between PMT combinations according to positions in detector_file :Parameters: **detector_file: file from which to read the PMT positions (.detx)** .. **combs: pmt combinations** .. :Returns: **angles: numpy array of angles between all PMT combinations** .. .. !! processed by numpydoc !! .. function:: exponential_polinomial(x, p1, p2, p3, p4) .. function:: exponential(x, a, b) .. function:: fit_angular_distribution(angles, rates, rate_errors, shape='pexp') Fits angular distribution of rates. :Parameters: **rates: numpy array** with rates for all PMT combinations **angles: numpy array** with angles for all PMT combinations **shape:** which function to fit; exp for exponential or pexp for exponential_polinomial :Returns: **fitted_rates: numpy array of fitted rates (fit_function(angles, popt...))** .. .. !! processed by numpydoc !! .. function:: minimize_t0s(means, weights, combs) Varies t0s to minimize the deviation of the gaussian means from zero. :Parameters: **means: numpy array of means of all PMT combinations** .. **weights: numpy array of weights for the squared sum** .. **combs: pmt combinations to use for minimization** .. :Returns: **opt_t0s: optimal t0 values for all PMTs** .. .. !! processed by numpydoc !! .. function:: minimize_sigmas(sigmas, weights, combs) Varies sigmas to minimize gaussian sigma12 - sqrt(sigma1² + sigma2²). :Parameters: **sigmas: numpy array of fitted sigmas of gaussians** .. **weights: numpy array of weights for the squared sum** .. **combs: pmt combinations to use for minimization** .. :Returns: **opt_sigmas: optimal sigma values for all PMTs** .. .. !! processed by numpydoc !! .. function:: minimize_qes(fitted_rates, rates, weights, combs) Varies QEs to minimize the deviation of the rates from the fitted_rates. :Parameters: **fitted_rates: numpy array of fitted rates from fit_angular_distribution** .. **rates: numpy array of rates of all PMT combinations** .. **weights: numpy array of weights for the squared sum** .. **combs: pmt combinations to use for minimization** .. :Returns: **opt_qes: optimal qe values for all PMTs** .. .. !! processed by numpydoc !! .. function:: correct_means(means, opt_t0s, combs) Applies optimal t0s to gaussians means. Should be around zero afterwards. :Parameters: **means: numpy array of means of gaussians of all PMT combinations** .. **opt_t0s: numpy array of optimal t0 values for all PMTs** .. **combs: pmt combinations used to correct** .. :Returns: **corrected_means: numpy array of corrected gaussian means for all PMT combs** .. .. !! processed by numpydoc !! .. function:: correct_rates(rates, opt_qes, combs) Applies optimal qes to rates. Should be closer to fitted_rates afterwards. :Parameters: **rates: numpy array of rates of all PMT combinations** .. **opt_qes: numpy array of optimal qe values for all PMTs** .. **combs: pmt combinations used to correct** .. :Returns: **corrected_rates: numpy array of corrected rates for all PMT combinations** .. .. !! processed by numpydoc !! .. function:: calculate_rms_means(means, corrected_means) Calculates RMS of means from zero before and after correction :Parameters: **means: numpy array of means of gaussians of all PMT combinations** .. **corrected_means: numpy array of corrected gaussian means for all PMT combs** .. :Returns: **rms_means: RMS of means from zero** .. **rms_corrected_means: RMS of corrected_means from zero** .. .. !! processed by numpydoc !! .. function:: calculate_rms_rates(rates, fitted_rates, corrected_rates) Calculates RMS of rates from fitted_rates before and after correction :Parameters: **rates: numpy array of rates of all PMT combinations** .. **corrected_rates: numpy array of corrected rates for all PMT combinations** .. :Returns: **rms_rates: RMS of rates from fitted_rates** .. **rms_corrected_rates: RMS of corrected_ratesrates from fitted_rates** .. .. !! processed by numpydoc !! .. function:: get_comb_index(i, j) Return the index of PMT pair combinations .. !! processed by numpydoc !! .. function:: add_to_twofold_matrix(times, tdcs, mat, tmax=10) Add counts to twofold coincidences for a given `tmax`. :Parameters: **times: np.ndarray of hit times (int32)** .. **tdcs: np.ndarray of channel_ids (uint8)** .. **mat: ref to a np.array((465, tmax * 2 + 1))** .. **tmax: int (time window)** .. :Returns: **mat: coincidence matrix (np.array((465, tmax * 2 + 1)))** .. .. !! processed by numpydoc !!