def ElectronEblAbsorbedSynIC(pars, data): # Match parameters to ECPL properties, and give them the appropriate units amplitude = 10**pars[0] / u.eV e_break = (10**pars[1]) * u.TeV alpha1 = pars[2] alpha2 = pars[3] B = pars[4] * u.uG # Define the redshift of the source, and absorption model redshift = pars[5] * u.dimensionless_unscaled EBL_transmitance = EblAbsorptionModel(redshift, "Dominguez") # Initialize instances of the particle distribution and radiative models BPL = BrokenPowerLaw(amplitude, 1.0 * u.TeV, e_break, alpha1, alpha2) # Compute IC on a CMB component IC = InverseCompton(BPL, seed_photon_fields=["CMB"], Eemin=10 * u.GeV) SYN = Synchrotron(BPL, B=B) # compute flux at the energies given in data['energy'] model = EBL_transmitance.transmission(data) * IC.flux( data, distance=1.0 * u.kpc) + SYN.flux(data, distance=1.0 * u.kpc) # The first array returned will be compared to the observed spectrum for # fitting. All subsequent objects will be stored in the sampler metadata # blobs. return model, IC.compute_We(Eemin=1 * u.TeV)
def ElectronIC(pars, data): # Match parameters to ECPL properties, and give them the appropriate units amplitude = pars[0] / u.eV alpha = pars[1] e_cutoff = (10 ** pars[2]) * u.TeV # Initialize instances of the particle distribution and radiative model ECPL = ExponentialCutoffPowerLaw(amplitude, 10.0 * u.TeV, alpha, e_cutoff) # Compute IC on CMB and on a FIR component with values from GALPROP for the # position of RXJ1713 IC = InverseCompton( ECPL, seed_photon_fields=[ "CMB", ["FIR", 26.5 * u.K, 0.415 * u.eV / u.cm ** 3], ], Eemin=100 * u.GeV, ) # compute flux at the energies given in data['energy'], and convert to units # of flux data model = IC.flux(data, distance=1.0 * u.kpc).to(data["flux"].unit) # Save this realization of the particle distribution function elec_energy = np.logspace(11, 15, 100) * u.eV nelec = ECPL(elec_energy) # Compute and save total energy in electrons above 1 TeV We = IC.compute_We(Eemin=1 * u.TeV) # The first array returned will be compared to the observed spectrum for # fitting. All subsequent objects will be stores in the sampler metadata # blobs. return model, (elec_energy, nelec), We
def ElectronSynIC(pars, data): # Match parameters to ECPL properties, and give them the appropriate units amplitude = 10 ** pars[0] / u.eV alpha = pars[1] e_cutoff = (10 ** pars[2]) * u.TeV B = pars[3] * u.uG # Initialize instances of the particle distribution and radiative models ECPL = ExponentialCutoffPowerLaw(amplitude, 10.0 * u.TeV, alpha, e_cutoff) # Compute IC on CMB and on a FIR component with values from GALPROP for the # position of RXJ1713 IC = InverseCompton( ECPL, seed_photon_fields=[ "CMB", ["FIR", 26.5 * u.K, 0.415 * u.eV / u.cm ** 3], ], Eemin=100 * u.GeV, ) SYN = Synchrotron(ECPL, B=B) # compute flux at the energies given in data['energy'] model = IC.flux(data, distance=1.0 * u.kpc) + SYN.flux( data, distance=1.0 * u.kpc ) # The first array returned will be compared to the observed spectrum for # fitting. All subsequent objects will be stored in the sampler metadata # blobs. return model, IC.compute_We(Eemin=1 * u.TeV)
def ElectronIC(pars, data): # Match parameters to ECPL properties, and give them the appropriate units amplitude = pars[0] / u.eV alpha = pars[1] e_cutoff = (10**pars[2]) * u.TeV # Initialize instances of the particle distribution and radiative model ECPL = ExponentialCutoffPowerLaw(amplitude, 10. * u.TeV, alpha, e_cutoff) IC = InverseCompton(ECPL, seed_photon_fields=[ 'CMB', ['FIR', 26.5 * u.K, 0.415 * u.eV / u.cm**3] ]) # compute flux at the energies given in data['energy'], and convert to # units of flux data model = IC.flux(data, distance=1.0 * u.kpc) # Save this realization of the particle distribution function elec_energy = np.logspace(11, 15, 100) * u.eV nelec = ECPL(elec_energy) # Compute and save total energy in electrons above 1 TeV We = IC.compute_We(Eemin=1 * u.TeV) # The first array returned will be compared to the observed spectrum for # fitting. All subsequent objects will be stores in the sampler metadata # blobs. return model, (elec_energy, nelec), We
def ElectronSynIC(pars, data): # Match parameters to ECPL properties, and give them the appropriate units amplitude = 10**pars[0] / u.eV alpha = pars[1] e_cutoff = (10**pars[2]) * u.TeV B = pars[3] * u.uG # Initialize instances of the particle distribution and radiative models ECPL = ExponentialCutoffPowerLaw(amplitude, 10. * u.TeV, alpha, e_cutoff) # Compute IC on CMB and on a FIR component with values from GALPROP for the # position of RXJ1713 IC = InverseCompton(ECPL, seed_photon_fields=[ 'CMB', ['FIR', 26.5 * u.K, 0.415 * u.eV / u.cm**3] ], Eemin=100 * u.GeV) SYN = Synchrotron(ECPL, B=B) # compute flux at the energies given in data['energy'] model = (IC.flux(data, distance=1.0 * u.kpc) + SYN.flux(data, distance=1.0 * u.kpc)) # The first array returned will be compared to the observed spectrum for # fitting. All subsequent objects will be stored in the sampler metadata # blobs. return model, IC.compute_We(Eemin=1 * u.TeV)
def ElectronEblAbsorbedSynIC(pars, data): # Match parameters to ECPL properties, and give them the appropriate units amplitude = 10**pars[0] / u.eV e_break = (10**pars[1]) * u.TeV alpha1 = pars[2] alpha2 = pars[3] B = pars[4] * u.uG # Define the redshift of the source, and absorption model redshift = pars[5] * u.dimensionless_unscaled EBL_transmitance = EblAbsorptionModel(redshift, 'Dominguez') # Initialize instances of the particle distribution and radiative models BPL = BrokenPowerLaw(amplitude, 1. * u.TeV, e_break, alpha1, alpha2) # Compute IC on a CMB component IC = InverseCompton( BPL, seed_photon_fields=['CMB'], Eemin=10 * u.GeV) SYN = Synchrotron(BPL, B=B) # compute flux at the energies given in data['energy'] model = (EBL_transmitance.transmission(data) * IC.flux(data, distance=1.0 * u.kpc) + SYN.flux(data, distance=1.0 * u.kpc)) # The first array returned will be compared to the observed spectrum for # fitting. All subsequent objects will be stored in the sampler metadata # blobs. return model, IC.compute_We(Eemin=1 * u.TeV)
def flare_rad(index, LE_cutoff, Ee_syn_max, B_flare, Ecut_0): ECPL = ExponentialCutoffPowerLaw(amplitude=amp0 / u.eV, e_0=1 * u.TeV, alpha=index, e_cutoff=Ecut_0) SYN = Synchrotron(ECPL, B=B_flare, Eemin=LE_cutoff, Eemax=Ee_syn_max) amp_cor = fitfactor(data_flare, SYN) # Fit particle distribution prefactor # Fit particle cutoff, with analytic initial value Ecut_flare = fitcutoff(Ecut_0, data_flare, amp0 * amp_cor, index, B_flare, LE_cutoff, Ee_syn_max) print('Correct ecut: ', Ecut_flare.to(u.PeV)) # Final particle spectrum and synchrotron ECPL = ExponentialCutoffPowerLaw(amplitude=amp0 * amp_cor / u.eV, e_0=1 * u.TeV, alpha=index, e_cutoff=Ecut_flare) SYN = Synchrotron(ECPL, B=B_flare, Eemin=LE_cutoff, Eemax=Ee_syn_max) if flarename == '2011': Rflare = 2.8e-4 * u.pc ## 3.2 * u.pc, 2.8e-4, 1.7e-4 elif flarename == '2013': Rflare = 1.7e-4 * u.pc else: Rflare == 3.2 * u.pc Esy = np.logspace(0.0, 12, 100) * u.eV #np.exp(14) Lsy = SYN.flux(Esy, distance=0 * u.cm) # use distance 0 to get luminosity phn_sy = Lsy / (4 * np.pi * Rflare**2 * c) * 2.24 fields = [ 'CMB', ['FIR', 70 * u.K, 0.5 * u.eV / u.cm**3], ['NIR', 5000 * u.K, 1 * u.eV / u.cm**3], ['SSC', Esy, phn_sy] ] IC = InverseCompton(ECPL, seed_photon_fields=fields, Eemin=LE_cutoff, Eemax=Ee_syn_max) We = IC.compute_We(Eemin=1 * u.TeV) print('Estoy aqui: ', We) return SYN, IC, amp_cor, We, Ecut_flare