Multinest

installation

# I ran into errors compiling multinest on my laptop, so I'm installing it on pcdev1 instead.

# Git doesn't seem to work on pcdev1
# Download MultiNest-master.zip
gsiscp Desktop/MultiNest-master.zip $pcdev1:
unzip MultiNest-master.zip
cd MultiNest/build/
cmake .. && make
# I put the following line in my bash_login file
export LD_LIBRARY_PATH=/home/ethrane/MultiNest-master/lib/:$LD_LIBRARY_PATH

# Now, install PyMultiNest
# Download PyMultiNest-master.zip
scp Desktop/PyMultiNest-master.zip $pcdev1
unzip PyMultiNest-master.zip
cd PyMultiNest-master/
python setup.py install --user
# I put the following line in my bash_login file
export PATH=$PATH:$HOME/.local/bin/

# copy over Paul's test script
gsiscp -r lasky/damped_sine $pcdev1:/home/ethrane/collaborators/lasky/spectroscopy/

Testing with multinest_sine_wave.py

Make sure you remember to create a chains/ directory.

location of example code on pcdev2: /home/ethrane/pymultinest/

to run:
-bash-4.2$ python multinest_sine_wave.py

Check out what parameters you are searching over:
-bash-4.2$ more freq_phase_params.json
[
  "freq", 
  "phase", 
  "amplitude", 
  "tau"
]
Look at how the log likelihood varies as chains jump through parameter space:
-bash-4.2$ head freq_phase_post_equal_weights.dat
    % freq                      phase                       amplitude                  tau                         log(likelihood)
    0.172759058707166560E+03    0.287434453021019554E+01    0.451533576771355074E-21    0.699162461618620980E-02   -0.168917918069100352E+02
    0.181388821295190326E+03    0.392644658227630927E+01    0.132520016872680398E-20    0.316401672128300117E-02   -0.107685914738118846E+02
    0.210583475719167041E+03    0.282201083558669374E+01    0.105947879197677693E-20    0.169906545186349449E-01   -0.101789240595431760E+02
Look at global properties including the (mean, sigma) for each parameter, the maximum likelihood parameters, the local log-evidence, and the global evidence:
-bash-4.2$ more freq_phase_stats.dat

Calculating a posterior distribution mid-run (before multinest has finished) using live points:

# This code is from Colm Talbot.
# See: Section 13 of http://aip.scitation.org/doi/abs/10.1063/1.1835238.
past = pd.DataFrame()
live = pd.DataFrame()

filename='/home/xingjiang.zhu/BNStide2a/lalinferencenest/IMRPhenomD_NRTidalpseudoFourPN/engine/lalinferencenest-2-H1L1-1187008882.0-2.hdf5_resume'

with h5py.File(filename, 'r') as f:
    print f['lalinferencenest_checkpoint'].keys()
    past_chain =  f['lalinferencenest_checkpoint']['past_chain']
    print past_chain.attrs.values()[3:30]
    for par in past_chain.attrs.values()[3:30]: past[par] = past_chain[par]
    live_points =  f['lalinferencenest_checkpoint']['live_points']
    print live_points.attrs.values()[-24:]
    for par in live_points.attrs.values()[-24:]: live[par] = live_points[par]
        
total = pd.concat([past, live])

total['logp'] = total['logL']+total['logw']
total['logp'] -= max(total['logp'])

total['random'] = np.log(np.random.uniform(0, 1, len(total)))

keep = total['logp']>total['random']

print len(total)
post = total[keep]
print len(post)



Back to Resources