Handicaps
Top level functions
Module providing various handicap functionalities.
- archeryutils.handicaps.arrow_score(handicap, target, handicap_sys, arw_d=None)[source]
Calculate the average arrow score for a given target and handicap rating.
- Parameters:
handicap (
ArrayLike) – handicap(s) to calculate score fortarget (
targets.Target) – A Target class specifying the target to be usedhandicap_sys (
str | HandicapScheme) – identifier for the handicap system to usearw_d (
float | None, defaultNone) – user-specified arrow diameter in [metres]
- Returns:
average expected arrow score for this handicap and target
- Return type:
NDArray[np.float64]
Warning
Using a custom value for arrow diameter may give values that differ from the official handicap scheme values.
Examples
Expected arrow score on a WA720 70m target, using the AGB handicap system at a handicap of 10 can be calculated with:
>>> import archeryutils as au >>> from archeryutils import handicaps as hc >>> my720target = au.Target("10_zone", 122, 70.0) >>> hc.arrow_score(10.0, my720target, "AGB") 9.401182682963338
It can also be passed an array of handicaps:
>>> hc.arrow_score(np.array([10.0, 50.0, 100.0]), my720target, "AGB") array([9.40118268, 6.05227962, 0.46412515])
- archeryutils.handicaps.handicap_from_score(score, rnd, handicap_sys, arw_d=None, int_prec=False)[source]
Calculate the handicap of a given score on a given round.
- Parameters:
score (
float) – score achieved on the roundrnd (
rounds.Round) – the rounds.Round object to calculate the handicap forhandicap_sys (
str | HandicapScheme) – identifier for the handicap system to usearw_d (
float | None, defaultNone) – user-specified arrow diameter in [metres]int_prec (
bool, defaultFalse) – display results as integers? default = False if True decimal results accurate to 2dp
- Returns:
Handicap for score. Has type int if int_prec is True, else float.
- Return type:
int | float
Examples
Handicap for a score of 999 on a WA 1440 (90m) using the AGB scheme can be calculated as:
>>> import archeryutils as au >>> wa_outdoor = au.load_rounds.WA_outdoor >>> hc.handicap_from_score(999, wa_outdoor.wa1440_90, "AGB") 43.999964586102706
To get an integer value as would appear in the handicap tables use
int_prec=True:>>> au.handicap_functions.handicap_from_score( ... 999, wa_outdoor.wa1440_90, "AGB", hc_params, int_prec=True ... ) 44.0
- archeryutils.handicaps.handicap_scheme(handicap_sys, **kwargs)[source]
Create a HandicapScheme subclass for a requested handicap scheme.
- Parameters:
handicap_sys (
str | HandicapScheme) – String identifying the handicap scheme class to be generated, or an existing HandicapScheme\**kwargs (
float) – Various kwargs defining custom values of parameters as appropriate for hc_sys
- Returns:
a subclass of HandicapScheme as appropriate for the inputs
- Return type:
- Raises:
ValueError – If a handicap scheme is requested for which there is no defined class.
See also
handicap_scheme.HandicapSchemeThe HandicapScheme class
handicap_scheme_agb.HandicapAGBThe AGB HandicapScheme subclass and associated \**kwargs
handicap_scheme_agb.HandicapAGBoldThe AGBold HandicapScheme subclass and associated \**kwargs
handicap_scheme_aa.HandicapAAThe AA HandicapScheme subclass and associated \**kwargs
handicap_scheme_aa.HandicapAA2The AA2 HandicapScheme subclass and associated \**kwargs
Examples
To generate a HandicapScheme class using the Archery GB (AGB) handicap scheme:
>>> from archeryutils import handicaps as hc >>> agb_scheme = hc.handicap_scheme("AGB") >>> agb_scheme HandicapScheme('AGB')
- archeryutils.handicaps.score_for_passes(handicap, rnd, handicap_sys, arw_d=None, rounded_score=True)[source]
Calculate the expected score for all passes in a round at a given handicap.
- Parameters:
handicap (
ArrayLike) – handicap value(s) to calculate score forrnd (
rounds.Round) – A Round class specifying the round being shothandicap_sys (
str | HandicapScheme) – identifier for the handicap system to usearw_d (
float | None, defaultNone) – user-specified arrow diameter in [metres]rounded_score (
bool, defaultTrue) – round score to integer value? Note the sum of rounded passes may not be the same as the rounded round score
- Returns:
average score for each pass in the round
- Return type:
NDArray
Examples
Expected score for each pass on a WA1440 90m, using the AGB handicap system at a handicap of 10 can be calculated with the code below which returns an array with one score for each pass that makes up the round:
>>> import archeryutils as au >>> from archeryutils import handicaps as hc >>> wa_outdoor = au.load_rounds.WA_outdoor >>> hc.score_for_passes(10.0, wa_outdoor.wa1440_90, "AGB") array([322.84091528, 338.44257659, 338.66395001, 355.87959411])
It can also be passed an array of handicaps:
>>> hc.score_for_passes( ... np.array([10.0, 50.0, 100.0]), ... wa_outdoor.wa1440_90, ... "AGB", ... ) array([[322.84091528, 162.76200686, 8.90456718], [338.44257659, 217.88206641, 16.70850537], [338.66395001, 216.74407488, 16.41855209], [355.87959411, 288.77185611, 48.47897177]])
- archeryutils.handicaps.score_for_round(handicap, rnd, handicap_sys, arw_d=None, rounded_score=True)[source]
Calculate the expected score for a round at a given handicap.
- Parameters:
handicap (
ArrayLike) – handicap(s) to calculate score forrnd (
rounds.Round) – A Round class specifying the round being shothandicap_sys (
str | HandicapScheme) – identifier for the handicap system to usearw_d (
float | None, defaultNone) – user-specified arrow diameter in [metres]rounded_score (
bool, defaultTrue) – round score to integer value?
- Returns:
round_score – average score of the round for this set of parameters
- Return type:
NDArray[np.float64]
Examples
Expected score for a WA1440 90m, using the AGB handicap system at a handicap of 10 can be calculated with:
>>> import archeryutils as au >>> from archeryutils import handicaps as hc >>> wa_outdoor = au.load_rounds.WA_outdoor >>> hc.score_for_round(10.0, wa_outdoor.wa1440_90, "AGB") 1356.0 >>> au.handicap_equations.score_for_round( ... wa_outdoor.wa1440_90, 10.0, rounded_score=False ... ) 1355.8270359849505
It can also be passed an array of handicaps:
>>> hc.score_for_round( ... np.array([10.0, 50.0, 100.0]), ... wa_outdoor.wa1440_90, ... ) array([1356., 887., 91.])
HandicapTable Class
- class archeryutils.handicaps.HandicapTable(handicap_sys, hcs, round_list, rounded_scores=True, int_prec=True, clean_gaps=True, arrow_d=None)[source]
Bases:
objectClass to generate and store a handicap table.
- Parameters:
handicap_sys (
str | HandicapScheme) – identifier for the handicap system to usehcs (
ArrayLike) – handicap values to calculate scores forround_list (
list[rounds.Round]) – list of Round classes to show in the handicap tablerounded_scores (
bool, defaultTrue) – round scores to integer value?int_prec (
bool, defaultTrue) – display numbers in table as integers rather than decimals to improve appearanceclean_gaps (
bool, defaultTrue) – clean out gaps of repeated scores (using only first occurrence) gaps will be filled with -9999 (int_prec=True) or np.nan (int_prec=False)arrow_d (
float | None, defaultNone) – user-specified arrow diameter in [metres]
- hc_sys
HandicapScheme class to be used in constructing this table
- Type:
- round_list
list of Round classes to show in the handicap table
- Type:
list[rounds.Round]
- rounded_scores
round scores to integer value?
- Type:
bool
- int_prec
display numbers in table as integers rather than decimals to improve appearance
- Type:
bool
- clean_gaps
clean out gaps of repeated scores (using only first occurrence)
- Type:
bool
- hcs
handicap values to calculate scores for
- Type:
NDArray[np.float64]
- table
the generated handicap table containing appropriate score values
- Type:
NDArray[np.float64 | np.int\_]
- print()[source]
Print handicap table to screen/stdout.
Examples
>>> import archeryutils as au >>> wa_outdoor = au.load_rounds.WA_outdoor >>> from archeryutils import handicaps as hc >>> agb_table = hc.HandicapTable( ... "AGB", ... [1.0, 2.0, 3.0, 4.0, 5.0], ... [wa_outdoor.wa1440_90, wa_outdoor.wa1440_70, wa_outdoor.wa1440_60], ... ) >>> agb_table.print() Handicap WA 1440 (90m) WA 1440 (70m) WA 1440 (60m) 1 1396 1412 1427 2 1393 1409 1425 3 1389 1406 1423 4 1385 1403 1420 5 1380 1399 1418
- Return type:
None
- to_csv(csvfile)[source]
Save handicap table as a csv file.
- Parameters:
csvfile (
str) – csv filepath to save to.
Examples
>>> import archeryutils as au >>> wa_outdoor = au.load_rounds.WA_outdoor >>> from archeryutils import handicaps as hc >>> agb_table = hc.HandicapTable( ... "AGB", ... [1.0, 2.0, 3.0, 4.0, 5.0], ... [wa_outdoor.wa1440_90, wa_outdoor.wa1440_70, wa_outdoor.wa1440_60], ... ) >>> agb_table.to_csv("mycsvfile.csv") Writing handicap table to csv...Done.
- Return type:
None
- to_file(filename)[source]
Save handicap table to text file.
- Parameters:
filename (
str) – filepath to save table to.
Examples
>>> import archeryutils as au >>> wa_outdoor = au.load_rounds.WA_outdoor >>> from archeryutils import handicaps as hc >>> agb_table = hc.HandicapTable( ... "AGB", ... [1.0, 2.0, 3.0, 4.0, 5.0], ... [wa_outdoor.wa1440_90, wa_outdoor.wa1440_70, wa_outdoor.wa1440_60], ... ) >>> agb_table.to_file("mytextfile.txt") Writing handicap table to file...Done.
- Return type:
None
HandicapScheme Classes
- class archeryutils.handicaps.HandicapScheme[source]
Bases:
ABCAbstract Base Class to represent a generic handicap scheme.
- name
The name of the handicap scheme.
- Type:
str
- arw_d_out
diameter of an outdoor arrow [metres] for this scheme, default 5.5e-3
- Type:
float
- arw_d_in
diameter of an indoor arrow [metres] for this scheme, default 9.3e-3
- Type:
float
- desc_scale
does the scheme use a descending scale (lower handicap is better), default True
- Type:
bool
- scale_bounds
Reasonable upper and lower bounds on the handicap scale for bounding searches
- Type:
NDArray[np.float64]
- max_score_rounding_lim
Limit to round the max score to when searching depends on scheme rounding method e.g. round() vs. ceil() etc.
- Type:
float
See also
handicap_scheme_agb.HandicapAGBThe AGB HandicapScheme subclass and associated \**kwargs
handicap_scheme_agb.HandicapAGBoldThe AGBold HandicapScheme subclass and associated \**kwargs
handicap_scheme_aa.HandicapAAThe AA HandicapScheme subclass and associated \**kwargs
handicap_scheme_aa.HandicapAA2The AA2 HandicapScheme subclass and associated \**kwargs
- arrow_score(handicap, target, arw_d=None)[source]
Calculate the average arrow score for a given target and handicap rating.
- Parameters:
handicap (
ArrayLike) – handicap(s) to calculate score fortarget (
targets.Target) – A Target class specifying the target to be usedarw_d (
float | None, defaultNone) – user-specified arrow diameter in [metres]
- Returns:
s_bar – average score of the arrow for this set of parameters
- Return type:
NDArray[np.float64]
References
The construction of the graduated handicap tables for target archery Lane, D (2013)
Examples
Expected arrow score on a WA720 70m target at a handicap of 10, using the AGB handicap system (via the HandicapSchemeAGB subclass) can be calculated with:
>>> import archeryutils as au >>> import archeryutils.handicaps as hc >>> my720target = au.Target("10_zone", 122, 70.0) >>> agb_scheme = hc.handicap_scheme("AGB") >>> agb_scheme.arrow_score(10.0, my720target) 9.401182682963338
It can also be passed an array of handicaps:
>>> agb_scheme.arrow_score(np.array([10.0, 50.0, 100.0]), my720target) array([9.40118268, 6.05227962, 0.46412515])
- handicap_from_score(score, rnd, arw_d=None, int_prec=False)[source]
Calculate the handicap of a given score on a given round.
- Parameters:
score (
float) – score achieved on the roundrnd (
rounds.Round) – the rounds.Round object to calculate the handicap forarw_d (
float | None, defaultNone) – user-specified arrow diameter in [metres]int_prec (
bool, defaultFalse) – display results as integers? default = False decimal results accurate to 2dp from rootfinder
- Returns:
handicap – Handicap for score. Has type int if int_prec is True, else float.
- Return type:
int | float- Raises:
ValueError – If an invalid score for the given round is provided.
Examples
Handicap for a score of 999 on a WA 1440 (90m), using the AGB handicap system (via the HandicapSchemeAGB subclass), can be calculated using:
>>> import archeryutils as au >>> import archeryutils.handicaps as hc >>> wa_outdoor = au.load_rounds.WA_outdoor >>> agb_scheme = hc.handicap_scheme("AGB") >>> agb_scheme.score_for_round(wa_outdoor.wa1440_90, 10.0) >>> agb_scheme.handicap_from_score(999, wa_outdoor.wa1440_90) 43.999964586102706
To get an integer value as would appear in the handicap tables use
int_prec=True:>>> agb_scheme.handicap_from_score(999, wa_outdoor.wa1440_90, int_prec=True) 44.0
- score_for_passes(handicap, rnd, arw_d=None, rounded_score=True)[source]
Calculate the expected score for all passes in a round at a given handicap.
- Parameters:
handicap (
ArrayLike) – handicap(s) to calculate score forrnd (
rounds.Round) – A Round class specifying the round being shotarw_d (
float | None, defaultNone) – user-specified arrow diameter in [metres]rounded_score (
bool, defaultTrue) – round score to integer value? Note: sum of rounded passes may not be the same as the rounded round score
- Returns:
pass_scores – average score for each pass in the round
- Return type:
NDArray[np.float64]
Examples
Expected score for each pass on a WA1440 90m at a handicap of 10, using the AGB handicap system (via the HandicapSchemeAGB subclass) can be calculated with the following code which returns an array with one score for each pass that makes up the round:
>>> import archeryutils as au >>> import archeryutils.handicaps as hc >>> wa_outdoor = au.load_rounds.WA_outdoor >>> agb_scheme = hc.handicap_scheme("AGB") >>> agb_scheme.score_for_passes(10.0, wa_outdoor.wa1440_90) array([322.84091528, 338.44257659, 338.66395001, 355.87959411])
It can also be passed an array of handicaps:
>>> agb_scheme.score_for_passes( ... np.array([10.0, 50.0, 100.0]), wa_outdoor.wa1440_90 ... ) array([[322.84091528, 162.76200686, 8.90456718], [338.44257659, 217.88206641, 16.70850537], [338.66395001, 216.74407488, 16.41855209], [355.87959411, 288.77185611, 48.47897177]])
- score_for_round(handicap, rnd, arw_d=None, rounded_score=True)[source]
Calculate the expected score for a round at a given handicap.
- Parameters:
handicap (
ArrayLike) – handicap(s) to calculate score forrnd (
rounds.Round) – A Round class specifying the round being shotarw_d (
float | None, defaultNone) – user-specified arrow diameter in [metres]rounded_score (
bool, defaultTrue) – round score to integer value?
- Returns:
round_score – average score of the round for this set of parameters
- Return type:
NDArray[np.float64]
Examples
Expected score for a WA1440 90m at a handicap of 10, using the AGB handicap system (via the HandicapSchemeAGB subclass) can be calculated using:
>>> import archeryutils as au >>> import archeryutils.handicaps as hc >>> wa_outdoor = au.load_rounds.WA_outdoor >>> agb_scheme = hc.handicap_scheme("AGB") >>> agb_scheme.score_for_round(10.0, wa_outdoor.wa1440_90) 1356.0
To get a decimal value of the exact handicap corresponding to the requested score use
rounded_score=False:>>> agb_scheme.score_for_round( ... wa_outdoor.wa1440_90, ... 10.0, ... rounded_score=False, ... ) 1355.8270359849505
It can also be passed an array of handicaps:
>>> agb_scheme.score_for_round( ... np.array([10.0, 50.0, 100.0]), wa_outdoor.wa1440_90 ... ) array([1356., 887., 91.])
- sigma_r(handicap, dist)[source]
Calculate radial deviation for a given handicap and distance.
Standard deviation as a proxy for ‘group size’ based on handicap parameters, scheme, and distance. Wraps around sigma_t() and multiplies by distance.
- Parameters:
handicap (
ArrayLike) – handicap(s) to calculate sigma_r atdist (
float) – distance to target [metres]
- Returns:
sig_r – standard deviation of group size [metres]
- Return type:
NDArray[np.float64]
Examples
Deviation (in metres) at a distance of 25m and a handicap of 10, using the AGB handicap system (via the HandicapSchemeAGB subclass) can be calculated with:
>>> import archeryutils.handicaps as hc >>> agb_scheme = hc.handicap_scheme("AGB") >>> agb_scheme.sigma_r(10.0, 25.0) 0.023745700245257646
It can also be passed an array of handicaps:
>>> agb_scheme.sigma_r(np.asarray([10.0, 50.0, 100.0]), 25.0) array([0.0237457 , 0.09401539, 0.5250691 ])
- class archeryutils.handicaps.HandicapAGB(datum=6.0, step=3.5, ang_0=0.0005, kd=0.00365)[source]
Bases:
HandicapSchemeClass to represent the Archery GB handicap scheme.
This class represents the 2023 handicap scheme by Jack Atkinson.
- Parameters:
datum (
float) – offset to set scratch point, default = 6.0,step (
float) – percentage change in deviation per handicap step, default = 3.5,ang_0 (
float) – datum angle used in scheme, default = 5.0e-4,kd (
float) – factor controlling excess dispersion scaling with distance, default = 0.00365,
- name
The name of the handicap scheme.
- Type:
str=``”AGB”``
- arw_d_out
diameter of an outdoor arrow: 5.5e-3 [metres]
- Type:
float
- arw_d_in
diameter of an indoor arrow 9.3e-3 [metres]
- Type:
float
Warning
Using non-default values for the kwargs may produce results that do not match the official values for this scheme. Only change if you are experimenting and know what you are doing!
See also
HandicapSchemeThe base class for a handicap scheme from which this is subclassed containing details of additional methods.
- sigma_t(handicap, dist)[source]
Calculate angular deviation for given handicap and distance.
- Parameters:
handicap (
ArrayLike) – handicap(s) to calculate sigma_t atdist (
float) – distance to target [metres]
- Returns:
sig_t – angular deviation [rad]
- Return type:
NDArray[np.float64]
Examples
Angular deviation at a distance of 25m, using the AGB handicap system at a handicap of 10 can be calculated with:
>>> import archeryutils.handicaps as hc >>> agb_scheme = hc.handicap_scheme("AGB") >>> agb_scheme.sigma_t(10.0, 25.0) 0.0009498280098103058
It can also be passed an array of handicaps:
>>> import numpy as np >>> agb_scheme.sigma_t(np.array([10.0, 50.0, 100.0]), 25.0) array([0.00094983, 0.00376062, 0.02100276])
- class archeryutils.handicaps.HandicapAGBold(datum=12.9, step=3.6, ang_0=0.0005, k1=1.429e-06, k2=1.07, k3=4.3, p1=2.0)[source]
Bases:
HandicapSchemeClass to represent the old (pre-2023) Archery GB handicap scheme by D. Lane.
- Parameters:
datum (
float) – offset to set scratch point, default = 12.9,step (
float) – percentage change in deviation per handicap step, default = 3.6,ang_0 (
float) – datum angle used in scheme, default = 5.0e-4,k1 (
float) – constant k1 in the handicap equation, default = 1.429e-6,k2 (
float) – constant k2 in the handicap equation, default = 1.07,k3 (
float) – constant k3 in the handicap equation, default = 4.3,p1 (
float) – exponent of distance scaling, default = 2.0,
- name
The name of the handicap scheme.
- Type:
str=``”AGBold”``
- arw_d_out
diameter of an outdoor arrow: 7.14e-3 [metres]
- Type:
float
- arw_d_in
diameter of an indoor arrow 7.14e-3 [metres]
- Type:
float
Warning
Using non-default values for the kwargs may produce results that do not match the official values for this scheme. Only change if you are experimenting and know what you are doing!
See also
HandicapSchemeThe base class for a handicap scheme from which this is subclassed containing details of additional methods.
- sigma_t(handicap, dist)[source]
Calculate angular deviation for given handicap and distance.
- Parameters:
handicap (
ArrayLike) – handicap(s) to calculate sigma_t atdist (
float) – distance to target [metres]
- Returns:
sig_t – angular deviation [rad]
- Return type:
NDArray[np.float64]
Notes
This is the key part of this scheme. The values are taken from Lane (2013) [1].
References
Examples
Angular deviation at a distance of 25m, using the AGBold handicap system at a handicap of 10 can be calculated with:
>>> import archeryutils.handicaps as hc >>> agbold_scheme = hc.handicap_scheme("AGBold") >>> agbold_scheme.sigma_t(10.0, 25.0) 0.001126491382794861
It can also be passed an array of handicaps:
>>> import numpy as np >>> agbold_scheme.sigma_t(np.array([10.0, 50.0, 100.0]), 25.0) array([0.00112649, 0.00478762, 0.05520862])
- class archeryutils.handicaps.HandicapAA(ang_0=0.001, k0=2.37, ks=0.027, kd=0.004)[source]
Bases:
HandicapSchemeClass to represent the original Archery Australia scheme by J. Park.
- Parameters:
ang_0 (
float) – datum angle used in scheme, default = 1.0e-3,k0 (
float) – handicap offset to set scratch point, default= 2.37,ks (
float) – change with each handicap step as a geometric progression, default= 0.027,kd (
float) – distance scaling factor, default= 0.004,
- name
The name of the handicap scheme.
- Type:
str=``”AA”``
- arw_d_out
diameter of an outdoor arrow: 5.0e-3 [metres]
- Type:
float
- arw_d_in
diameter of an indoor arrow 9.3e-3 [metres]
- Type:
float
Warning
Using non-default values for the kwargs may produce results that do not match the official values for this scheme. Only change if you are experimenting and know what you are doing!
See also
HandicapSchemeThe base class for a handicap scheme from which this is subclassed containing details of additional methods.
- sigma_t(handicap, dist)[source]
Calculate angular deviation for given handicap and distance.
- Parameters:
handicap (
ArrayLike) – handicap(s) to calculate sigma_t atdist (
float) – distance to target [metres]
- Returns:
sig_t – angular deviation [rad]
- Return type:
NDArray[np.float64]
Notes
This is the key part of this scheme. The values are taken from Park (2014) [2].
References
[2] Park, J. L. (2014). “Modelling archers’ scores at different distances to quantify score loss due to equipment selection and technique errors.” Proceedings of the Institution of Mechanical Engineers, Part P: Journal of Sports Engineering and Technology, 228(4), 250-258. DOI: 10.1177/175433711453930
Examples
Angular deviation at a distance of 25m, using the AGBold handicap system at a handicap of 10 can be calculated with:
>>> import archeryutils.handicaps as hc >>> aa_scheme = hc.handicap_scheme("AA") >>> aa_scheme.sigma_t(10.0, 25.0) 0.012763296491500004
It can also be passed an array of handicaps:
>>> import numpy as np >>> aa_scheme.sigma_t(np.array([10.0, 50.0, 100.0]), 25.0) array([0.0127633 , 0.00433436, 0.00112364])
- class archeryutils.handicaps.HandicapAA2(ang_0=0.001, k0=2.57, ks=0.027, f1=0.815, f2=0.185, d0=50.0)[source]
Bases:
HandicapSchemeClass to represent the updated (2014) Archery Australia scheme by J. Park.
- Parameters:
ang_0 (
float) – datum angle used in scheme, default = 1.0e-3,k0 (
float) – handicap offset to set scratch point, default= 2.57,ks (
float) – change with each handicap step as a geometric progression, default= 0.027,f1 (
float) – ‘linear’ scaling factor, default= 0.815,f2 (
float) – ‘quadratic’ scaling factor, default= 0.185,d0 (
float) – normalisation distance, default = 50.0,
- name
The name of the handicap scheme.
- Type:
str=``”AA2”``
- arw_d_out
diameter of an outdoor arrow: 5.0e-3 [metres]
- Type:
float
- arw_d_in
diameter of an indoor arrow 9.3e-3 [metres]
- Type:
float
Warning
Using non-default values for the kwargs may produce results that do not match the official values for this scheme. Only change if you are experimenting and know what you are doing!
See also
HandicapSchemeThe base class for a handicap scheme from which this is subclassed containing details of additional methods.
- sigma_t(handicap, dist)[source]
Calculate angular deviation for given handicap and distance.
- Parameters:
handicap (
ArrayLike) – handicap(s) to calculate sigma_t atdist (
float) – distance to target [metres]
- Returns:
sig_t – angular deviation [rad]
- Return type:
NDArray[np.float64]
Notes
This is the key part of this scheme. The values are taken from Park (2014) [3].
References
[3] Park, J. L. (2014). “Modelling archers’ scores at different distances to quantify score loss due to equipment selection and technique errors.” Proceedings of the Institution of Mechanical Engineers, Part P: Journal of Sports Engineering and Technology, 228(4), 250-258. DOI: 10.1177/175433711453930
Examples
Angular deviation at a distance of 25m, using the AGBold handicap system at a handicap of 10 can be calculated with:
>>> import archeryutils.handicaps as hc >>> aa2_scheme = hc.handicap_scheme("AA2") >>> aa2_scheme.sigma_t(10.0, 25.0) 0.012800853871823342
It can also be passed an array of handicaps:
>>> import numpy as np >>> aa2_scheme.sigma_t(np.array([10.0, 50.0, 100.0]), 25.0) array([0.01280085, 0.00434711, 0.00112695])