Examples
This page shows example code snippets demonstrating how to use PulsarDT++.
Hello World Example
Here is a simple example to get started:
import numpy as np
import pulsardtpp.defines as defines
from pulsardtpp import PulsarAnimator, create_pulsar_animation
pulsar_animator = PulsarAnimator(rot_axis=[0,0,1], mag_axis_tilt=45)
create_pulsar_animation(
pulsar_animator=pulsar_animator,
animation_folder_path='./output/anims/',
tag='test_spark',
telescope_direction=(1,0,1),
rot_phases=np.arange(0, 360, 30),
res=60
)
Design a custom spark pattern
Design a custom spark pattern using the SparkPatternGenerator class. The following code creates a pulsar animation with a custom spark pattern:
import numpy as np
from pulsardtpp import PulsarAnimator, SparkPatternGenerator, create_pulsar_animation
pulsar_animator = PulsarAnimator(rot_axis=[0,0,1],mag_axis_tilt=45)
spark_pattern_list = SparkPatternGenerator.create_patterened_spark_pattern(
num_sparks=[2,8,8,2],
conal_latitudes=[0.1,10,170,179.9],
spark_rotation_axis_polar_att0=[45,50],
drift_vel=50/360,
spark_dimension=1.5/180*22/7
)
pulsar_animator.spark_genlist = spark_pattern_list
view_direction = (1,0,1)
create_pulsar_animation(
pulsar_animator=pulsar_animator,
animation_folder_path='./output/anims/',
tag='custom_spark',
telescope_direction=view_direction,
rot_phases=np.arange(0, 360, 30),
res=60
)
The following montage shows the example of spark pattern created by the above code:
Create Payload files and visualize from a single simulation
import numpy as np
from pulsardtpp import PulsarAnimator, create_pulsar_animation, GenData, SparkPatternGenerator, Payload
pulsar_animator = PulsarAnimator(rot_axis=[0,0,1],mag_axis_tilt=45)
spark_pattern_list = SparkPatternGenerator.create_patterened_spark_pattern(
num_sparks=[2,8,8,2],
conal_latitudes=[0.1,10,170,179.9],
spark_rotation_axis_polar_att0=[45,50],
drift_vel=50/360,
spark_dimension=1.5/180*22/7
)
pulsar_animator.spark_genlist = spark_pattern_list
view_direction = (1,0,1)
pulsar_animator = PulsarAnimator(rot_axis=[0,0,1],mag_axis_tilt=45)
gendata_obj = GenData(pulsar_animator=pulsar_animator)
total_noisy_output,total_flux=gendata_obj(tag='test_0',
rot_phases=np.arange(0,360*2,1),
freq_channels=np.arange(0.25,.85,0.01),
param_folder='./params/runtime/',
payload_folder='./params/payloads/',
antenna_sensitivity=0.5,
prob_bbrfi=0,
prob_nbrfi=0,
scale_direction_randomness=0.0,
remove_drift_effect=True,
randomize=False)
#: Multiple payload files are created to capture the different stages of the simulation
payload_obj_raw = Payload.read_payload_from_jsonfile('./params/payloads/test_0_payload_raw.json')
payload_obj_2b_propagated = Payload.read_payload_from_jsonfile('./params/payloads/test_0_payload_tobe_propagated.json')
payload_obj_flux = Payload.read_payload_from_jsonfile('./params/payloads/test_0_payload_flux.json')
payload_obj_detected = Payload.read_payload_from_jsonfile('./params/payloads/test_0_payload_detected.json')
#: Plot the final payload after being detected by antenna
payload_obj_detected.plot()
or the simulation results can be visualized directly
gen_data.plot(tag='test_v0_',
rot_phases=np.arange(0,360*2,1),
freq_channels=np.arange(0.25,.85,0.01),
param_folder='./params/runtime/',
payload_folder='./params/payloads/',
antenna_sensitivity=0.5,
prob_bbrfi=0,
prob_nbrfi=0,
scale_direction_randomness=0.0,
remove_drift_effect=True,
randomize=False
)
Run multiple simulations with randomized instances of pulsar animation
import numpy as np
from pulsardtpp import PulsarAnimator, GenData
from pulsardtpp import run_gen_data_in_parallel, generate_randomized_data_payloads
pulsar_animator = PulsarAnimator(rot_axis=[0,0,1],mag_axis_tilt=45)
gendata_obj = GenData(pulsar_animator=pulsar_animator)
#: Run multiple simulations with randomized instances of pulsar animation with defined tags
run_gen_data_in_parallel(gendata_obj=gendata_obj,
rot_phases=np.arange(0,720*9-180,10).tolist(),
freq_channels=np.arange(0.5,1.6,0.001),
tag_list=['test_1','test_2','test_3','test_4','test_5','test_6'],
param_folder='./params/runtime/',payload_folder='./params/payloads/')
#: Or just by specifying number of payloads to be generated
generate_randomized_data_payloads(gendata_obj=gendata_obj,
rot_phases=np.arange(0,720*9-180,10).tolist(),
freq_channels=np.arange(0.5,1.6,0.001),
tag='test_',
num_payloads=100,
param_folder='./params/runtime/',payload_folder='./params/payloads/',
prob_bbrfi=0.3,
prob_nbrfi=0.3,
antenna_sensitivity=0.5,
tag_index_offset=0,
num_cpus=50
)