$35
Constraints on Extended PBH Mass Functions
Introduction
In this Hands on Session, you will learn how to define extended mass functions and calculate constraints on their abundance using observational data. To achieve this, we will study one example to then let you implement other kind of mass function to the already available code.
Requirements
To start working, you will need to have a version of Python3 installed with the following modules available:
numpy
scipy
pandas
matplotlib
jupyter
If any of these modules is missing, it should suffice to do
pip install "module"
1
and the missing module should be installed.
The next thing you will need is the source code for the mass function calculations available at: github.com/jmsureda/PBH-Workshop.
Exercise 1
Now that you have seen how to implement a mass function is done, consider now the Fixed Conformal Time (FCT) scenario presented in Sureda et al. (2021). In this scenario, the energy density at formation time is given by
, (1)
where afct is the formation scale factor for the PBH population. Using the Press-Schechter formalism presented by Nelson Padilla, one is able to define the FCT mass function as
(2)
where Mpiv is given by
Mpiv ≡ (Cfct/kpiv)3fm,
(3)
and the mass functions for each part of the piecewise function are given by
brk
fct
These expressions use some auxiliary definitions given by
(6)
(7)
, (8)
(9)
For this activity:
Create a FCT Massfunction class (from Eq. (2)) that inherits all properties from the general Massfunction This will allow to immediately calculate fPBH) by using the method
FCT.compute_f()
1
2
where FCT is your instance of a FCT mass function. Plot your resulting mass function for a given choice of parameters.
Use your FCT class to compute fPBH(M∗) for −15 ≤ log10(M∗/M⊙) ≤ 10 for a fixed nb = 3.5 value.
For simplicity, assume that fm = 1 and use a value of kpiv = 10Mpc−1 and afct ∼ 10−26.
Exercise 2
At some point one might be interested in exploring the effects of different constraints on the fraction fPBH. The code is already prepared to achieve this by passing the desired constraint to the compute f() method as a string. In the Exercise notebook you will find a table with the corresponding names and a category for a number of constraints. With
Low Medium High
EGB
Neutron Star
LSS
INTEGRAL
SUBARU
Radio Sources
GRB
MACHOS
Dynamical
White Dwarfs
EROS
Wide Binaries
OGLE
X-ray Binaries
Accretion
GC Disruption
GW
Galaxy Disruption
Disk Heating
CMB-Dip
Table 1: Constraint Names and mass regimes they act on
this, one could, for instance, compute the fPBH for MACHOS, EROS and OGLE by doing
FCT.compute_f(’MACHOS’,’EROS’,’OGLE’)
1
which can be done also by placing them in a list and passing it to the method
Lensing = [’MACHOS’,’EROS’,’OGLE’]
FCT.compute_f(Lensing)
1
2
The idea of this exercise is that you explore how constraints acting different mass regimes will affect the final value for fPBH.
Study what happens in the same M∗ regime as in the previous exercise.
What happens if you change the nb value?
You can also make your own categories, therefore you can explore what happens for each constraint individually or for certain groups of them.
Additional Exercises
Remember that we fixed the values of nb, fm and kpiv. You can explore what happens by changing those parameters.
The code is built in order to be general for any kind of mass function. You can try to create another mass function and implement it.
The data used for each constraint is just tabulated data in the form of (MPBH, f(MPBH)−1). You can add new constraints by including them in data/gM and adding a identifier in the dictionary in the file py. Try creating a new constraint and implementing it!
References
Sureda J., Magan˜a J., Araya I. J., Padilla N. D., 2021, Monthly Notices of the Royal
Astronomical Society, 507, 4804