Examples

This page shows example code snippets demonstrating how to use PulsarDT++.

  1. 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
)
  1. 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:

PulsarDT Demo
  1. 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()
PulsarDT Demo

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
             )
PulsarDT Demo
  1. 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
                      )