viewof cresEnergy = Inputs.range([5, 18.6], {
value: 18.0,
step: 0.1,
label: html`
<span class="spectrum-slider-label">
${tex`E_{\mathrm{нач}},\ \text{кэВ}`}
</span>
`
})
cresElectronRestEnergy = 510.99895
cresField = 1
cresNonRelFrequency = 27.99249
cresRadiatedPower = 1.2
cresLossRate = cresRadiatedPower * 6.241509e-6
cresDuration = 120
cresFrequency = energy =>
cresNonRelFrequency / (1 + energy / cresElectronRestEnergy)
cresStartFrequency = cresFrequency(cresEnergy)
cresCurve = Array.from({length: 281}, (_, i) => {
const energy = 20 * i / 280
return {energy, frequency: cresFrequency(energy)}
})
cresTimes = Array.from({length: 401}, (_, i) => cresDuration * i / 400)
cresData = cresTimes.map(time => {
const energy = Math.max(0, cresEnergy - cresLossRate * time)
return {
time,
frequencyShift: 1e6 * (cresFrequency(energy) - cresStartFrequency)
}
})
cresEndShift = cresData[cresData.length - 1].frequencyShift
cresMapPlot = Plot.plot({
width: 500,
height: 300,
marginTop: 20,
marginRight: 20,
marginBottom: 52,
marginLeft: 78,
style: {background: "#ffffff", color: "#111111", fontSize: "17px"},
x: {label: "E, кэВ →", domain: [0, 20], grid: true},
y: {label: "↑ f_c, ГГц", domain: [26.9, 28.05], grid: true,
tickFormat: value => value.toFixed(2)},
marks: [
Plot.line(cresCurve, {x: "energy", y: "frequency", stroke: "#4ea1ff", strokeWidth: 4}),
Plot.ruleY([cresStartFrequency], {stroke: "#ffb347", strokeDasharray: "4 4"}),
Plot.ruleX([cresEnergy], {stroke: "#ffb347", strokeDasharray: "4 4"}),
Plot.dot([{energy: cresEnergy, frequency: cresStartFrequency}],
{x: "energy", y: "frequency", r: 8, fill: "#ffb347"}),
Plot.frame({stroke: "#111111"})
]
})
cresTrackPlot = Plot.plot({
width: 500,
height: 300,
marginTop: 20,
marginRight: 20,
marginBottom: 52,
marginLeft: 78,
style: {background: "#ffffff", color: "#111111", fontSize: "17px"},
x: {label: "t, мкс →", domain: [0, cresDuration], grid: true},
y: {label: "↑ f_c − f_c(0), кГц", domain: [0, 48], grid: true},
marks: [
Plot.line(cresData, {x: "time", y: "frequencyShift", stroke: "#ffb347", strokeWidth: 4}),
Plot.dot([cresData[0]], {x: "time", y: "frequencyShift", r: 7, fill: "#4ea1ff"}),
Plot.frame({stroke: "#111111"})
]
})
html`
<div class="spectrum-panel">
<div class="spectrum-legend">
<span>слева: где электрон садится на кривую</span>
<span>справа: как излучение тянет частоту вверх</span>
<span>${tex`B=1\ \text{Тл}`}</span>
</div>
<div style="display:flex; gap:20px; justify-content:center; flex-wrap:wrap;">
<div>${cresMapPlot}</div>
<div>${cresTrackPlot}</div>
</div>
<div class="spectrum-summary">
<span>${tex`f_c(0)=${cresStartFrequency.toFixed(4)}\ \text{ГГц}`}</span>
<span>${tex`\Delta E=${(1000 * cresLossRate * cresDuration).toFixed(2)}\ \text{эВ}`}</span>
<span>${tex`\Delta f_c=+${cresEndShift.toFixed(1)}\ \text{кГц}`}</span>
</div>
</div>`Частотный трек электрона
Излучение уменьшает энергию электрона и повышает циклотронную частоту
Выберите начальную кинетическую энергию электрона. Проследите, как потеря энергии на излучение меняет его циклотронную частоту.
В модели поле постоянно, \(B=1\) Тл, а мощность излучения принята равной 1,2 фВт при всех начальных энергиях. Рассеяние и движение в неоднородном поле не учитываются. Величина \(\Delta E\) — энергия, потерянная за время наблюдения.