|
pflib v3.9.5-8-gf71a60f
Pretty Fine HGCROC Interaction Library
|
housing of higher-level methods for repeatable tasks More...
Classes | |
| class | DataFitter |
| Data class that stores information about each point in a 1d space. More... | |
Functions | |
| std::array< int, 72 > | get_calibs (Target *tgt, ROC &roc, size_t &n_events, int &target_adc) |
| Find calib value where the max adc corresponds to a target value. | |
| std::array< double, 72 > | get_toa_efficiencies (const std::vector< pflib::packing::MultiSampleECONDEventPacket > &data) |
| calculate the highest TOA_VREF value for each link, for which there is a non-zero TOA efficiency | |
| std::map< std::string, std::map< std::string, uint64_t > > | inv_vref_lund (Target *tgt, ROC &roc) |
| Find the inv_vref parameters. | |
| static int | get_adc (const pflib::packing::MultiSampleECONDEventPacket &p, int ch) |
| Retrieve the ADC sample for the input channel from the input event packet. | |
| static std::array< int, 72 > | get_adc_medians (const std::vector< pflib::packing::MultiSampleECONDEventPacket > &data) |
| get the medians of the channel ADC values | |
| std::map< std::string, std::map< std::string, uint64_t > > | level_pedestals (Target *tgt, ROC roc) |
| Level pedestals so that they are all within noise of their link median. | |
| std::map< std::string, std::map< std::string, uint64_t > > | toa_vref_scan (Target *tgt, ROC roc) |
| Find TOA threshold voltage reference to align TOA values. | |
| std::map< std::string, std::map< std::string, uint64_t > > | tot_vref_scan (Target *tgt, ROC roc, size_t n_events_calib) |
| Find TOT threshold voltage. | |
| double | eff_scan (Target *tgt, ROC &roc, int &channel, int &vref_value, size_t &n_events, auto &refvol_page, auto &buffer, int &i_link) |
| int | global_vref_scan (Target *tgt, ROC &roc, int &channel, size_t &n_events, auto &refvol_page, auto &buffer, int &i_link) |
| int | local_vref_scan (Target *tgt, ROC &roc, int &channel, int &vref_value, size_t &n_events, auto &refvol_page, auto &buffer, int &i_link) |
| std::array< int, 2 > | tp50_scan (Target *tgt, ROC &roc, size_t &n_events, std::array< int, 72 > &calibs, std::array< int, 2 > &link_vref_list) |
| Find TOT threshold voltage that corresponds to 50% efficiency for a given pulse. | |
| std::map< std::string, std::map< std::string, uint64_t > > | trim_toa_scan (Target *tgt, ROC roc) |
| Find trim_toa to align TOA for each channel. | |
| std::array< int, 72 > | trim_tot_scan (Target *tgt, ROC &roc, size_t &n_events, std::array< int, 72 > &calibs, std::array< int, 2 > &tot_vrefs, std::array< int, 72 > &tot_trims) |
| Find trim_toa to align TOA for each channel. | |
housing of higher-level methods for repeatable tasks
Calculate the TRIM_TOA for each channel that best aligns all of them to a common threshold voltage, charge injection pulse (calib).
|
static |
get the medians of the channel ADC values
This may be helpful in some other contexts, but since it depends on the packing library it cannot go into utility. Just keeping it here for now, maybe move it into its own header/impl in algorithm.
| [in] | data | buffer of single-roc packet data |
reserve a vector of the appropriate size to avoid repeating allocation time for all 72 channels
| std::array< int, 72 > pflib::algorithm::get_calibs | ( | Target * | tgt, |
| ROC & | roc, | ||
| size_t & | n_events, | ||
| int & | target_adc ) |
Find calib value where the max adc corresponds to a target value.
| [in] | tgt | pointer to Target to interact with roc for setting params target calib value |
reserve a vector of the appropriate size to avoid repeating allocation time for all 72 channels
| std::array< double, 72 > pflib::algorithm::get_toa_efficiencies | ( | const std::vector< pflib::packing::MultiSampleECONDEventPacket > & | data | ) |
calculate the highest TOA_VREF value for each link, for which there is a non-zero TOA efficiency
reserve a vector of the appropriate size to avoid repeating allocation time for all 72 channels
we assume that the data provided is not empty otherwise the efficiency calculation is meaningless
| std::map< std::string, std::map< std::string, uint64_t > > pflib::algorithm::inv_vref_lund | ( | Target * | tgt, |
| ROC & | roc ) |
Find the inv_vref parameters.
The noinv_vref parameters are hardcoded to 612 for each link.
| [in] | tgt | pointer to Target to interact with |
| std::map< std::string, std::map< std::string, uint64_t > > pflib::algorithm::level_pedestals | ( | Target * | tgt, |
| ROC | roc ) |
Level pedestals so that they are all within noise of their link median.
| [in] | tgt | pointer to Target to interact with |
do three runs of 100 samples each to have well defined pedestals
TODO for multi-ROC set ups, we could dynamically determine the number
| std::map< std::string, std::map< std::string, uint64_t > > pflib::algorithm::toa_vref_scan | ( | Target * | tgt, |
| ROC | roc ) |
Find TOA threshold voltage reference to align TOA values.
| [in] | tgt | pointer to Target to interact with |
do a run of 100 samples per toa_vref to measure the TOA efficiency when looking at pedestal data
| std::map< std::string, std::map< std::string, uint64_t > > pflib::algorithm::tot_vref_scan | ( | Target * | tgt, |
| ROC | roc, | ||
| size_t | n_events_calib ) |
Find TOT threshold voltage.
| [in] | tgt | pointer to Target to interact with |
| std::array< int, 2 > pflib::algorithm::tp50_scan | ( | Target * | tgt, |
| ROC & | roc, | ||
| size_t & | n_events, | ||
| std::array< int, 72 > & | calibs, | ||
| std::array< int, 2 > & | link_vref_list ) |
Find TOT threshold voltage that corresponds to 50% efficiency for a given pulse.
| [in] | tgt | pointer to Target to interact with roc calib: target calib tot_vref: previously set tot_vref |
| std::map< std::string, std::map< std::string, uint64_t > > pflib::algorithm::trim_toa_scan | ( | Target * | tgt, |
| ROC | roc ) |
Find trim_toa to align TOA for each channel.
| [in] | tgt | pointer to Target to interact with |
Charge injection scan (100 samples) while varying TRIM_TOA. Purpose is to align TRIM_TOA for each channel. Calculates TOA efficiency while looking at charge injection data. Then uses Siegel Linear Regression to calculate the aligned TRIM_TOA value for each channel to match a common "calib" value.
Now that we have the data, we need to analyze it.
We'll be looking for the turn-on (threshold) points for each channel at each trim_toa value. The turn-on (threshold) point is the first point where toa_efficiency goes from 0 to non-zero. The toa_efficiency is simply the number of times TOA triggers divided by the sample size, for a given trim_toa/calib/channel combination.
We'll be using the Siegel Linear Regression because it's less sensitive to outliers, since sometimes changing the trim_toa causes the threshold (turn-on) points to "wrap around".
| std::array< int, 72 > pflib::algorithm::trim_tot_scan | ( | Target * | tgt, |
| ROC & | roc, | ||
| size_t & | n_events, | ||
| std::array< int, 72 > & | calibs, | ||
| std::array< int, 2 > & | tot_vrefs, | ||
| std::array< int, 72 > & | tot_trims ) |
Find trim_toa to align TOA for each channel.
| [in] | tgt | pointer to Target to interact with |