Compare commits

..

No commits in common. "master" and "hetept_v9_patches" have entirely different histories.

88 changed files with 3451 additions and 31383 deletions

1
.gitignore vendored
View file

@ -1,5 +1,4 @@
*~ *~
.idea/
__pycache__/ __pycache__/
*.py[cod] *.py[cod]
*.so *.so

View file

@ -70,9 +70,7 @@ class config_table(index_table):
if base_config is None: if base_config is None:
base_config = self.CONFIG(unit=unit, model=model, base_config = self.CONFIG(unit=unit, model=model,
temperature=temperatures[0], env=environments[0], temperature=temperatures[0], env=environments[0], version=version, **kwargs)
version=version, scratch=scratch,
**kwargs)
self.initialize(unit, model, base_config, scratch, version, self.initialize(unit, model, base_config, scratch, version,
enc_base, pha_base, misc_page, dump_page) enc_base, pha_base, misc_page, dump_page)
@ -147,17 +145,12 @@ class config_table(index_table):
bin(i&3), e)) bin(i&3), e))
return {e: cfg.diff(*self.env_configs.values()) for e,cfg in self.env_configs.items()} return {e: cfg.diff(*self.env_configs.values()) for e,cfg in self.env_configs.items()}
def make_temp_config(self, index=None, scratch=None): def make_temp_config(self):
for t in sorted(self.temp_diffs.keys()): for t in sorted(self.temp_diffs.keys()):
if not index: index = self.empty()[0]
idx = self.empty()[0] sys.stderr.write("Creating differential Temperature = %g°C configuration @ index %d\n" % (t, index))
else: self[index] = self.cfg_to_idx(self.temp_diffs[t], partial=True, write_scratch=True, send_scratch=True)
idx = index self.temperatures[t] = index
index = index+1
sys.stderr.write("Creating differential Temperature = %g°C configuration @ index %d\n" % (t, idx))
self[idx] = self.cfg_to_idx(self.temp_diffs[t], partial=True,
scratch=scratch, write_scratch=True, send_scratch=True)
self.temperatures[t] = idx
def make_env_config(self): def make_env_config(self):
for e in sorted(self.env_diffs.keys()): for e in sorted(self.env_diffs.keys()):
@ -170,13 +163,12 @@ class config_table(index_table):
pass pass
def make_scratch(self, temp=None, env=None, scratch=None): def make_scratch(self, temp=None, env=None, scratch=None):
sys.stderr.write("make_scratch(temp=%s, env=%s, scratch=%s)\n" % (repr(temp), repr(env), repr(scratch)))
if temp is None: if temp is None:
temp = self.nominal.temperature temp = self.nominal.temperature
if scratch is None: if scratch is None:
scratch = self.scratch scratch = self.scratch
if env is not None: if env is not None:
scratch = env.scratch() scratch = env.scratch()
return set_index_reg( return set_index_reg(
scratchH2=int((temp+273)*10), scratchH2=int((temp+273)*10),
scratchH1=self.version, scratchH1=self.version,
@ -188,9 +180,8 @@ class config_table(index_table):
def start_seq(self, ppss=None, start_modulus=60): def start_seq(self, ppss=None, start_modulus=60):
return [] return []
def cfg_to_idx(self, cfg, start_modulus=60, abort=1, fill=False, pad=False, def cfg_to_idx(self, cfg, start_modulus=60, abort=1, fill=False, pad=False, write_scratch=False,
scratch=None, write_scratch=False, send_scratch=False, set_index=False, start_seq=False, send_scratch=False, partial=False, restart=False):
set_index=False, start_seq=False, partial=False, restart=False):
m = message_block() m = message_block()
if start_seq: if start_seq:
@ -223,9 +214,7 @@ class config_table(index_table):
m += set_index_reg(dump_page = self.dump_page) m += set_index_reg(dump_page = self.dump_page)
if write_scratch: if write_scratch:
if scratch is None: m += self.make_scratch(temp=cfg.temperature)
scratch = cfg.scratch
m += self.make_scratch(temp=cfg.temperature, scratch=scratch)
if send_scratch: # send scratch register immediately in LL_CONSOLE if send_scratch: # send scratch register immediately in LL_CONSOLE
read_reg(scratch=True, modulus=True, heater=True, tag=0x3c) (self.ppss.arm_insertion_slot(m.msg, flag="SPARE_HK")) read_reg(scratch=True, modulus=True, heater=True, tag=0x3c) (self.ppss.arm_insertion_slot(m.msg, flag="SPARE_HK"))
@ -246,21 +235,15 @@ class config_table(index_table):
return mm return mm
def write_defs(self, f=sys.stdout, configs=None): def write_defs(self, f=sys.stdout):
close_file = False
if isinstance(f, str): if isinstance(f, str):
with open(f, 'w') as ff: f = open(f, 'w')
self.write_defs(ff, dps) close_file = True
return for e,c in self.env_configs.items():
if configs is None: c.dps.write_defs(f, header="# %s# env = %s:\n\n" % (self.description.decode('utf8'),e))
configs = self.env_configs if close_file:
for e, c in self.env_configs.items(): f.close()
dps_tag = (c.scratch>>8) & 0xff if c.scratch else 0
c.dps.write_defs(f, header="\n".join([
"# %s" % self.description.decode('utf8'),
"# env = %s" % e,
"# version/dps: %u/%u\n" % (self.version, dps_tag),
"\n"
]))
def hk(self, start_modulus=60, abort=1): def hk(self, start_modulus=60, abort=1):
hk = message_block() hk = message_block()
@ -293,7 +276,7 @@ class config_table(index_table):
msg = self.connect(msg) msg = self.connect(msg)
self[2](msg) self[2](msg)
def do_temp(self, temperature, msg=None, force=False, scratch=None, **kwargs): def do_temp(self, temperature, msg=None, force=False, **kwargs):
try: try:
cfg = self[self.temperatures[temperature]] cfg = self[self.temperatures[temperature]]
except KeyError as err: except KeyError as err:
@ -302,8 +285,7 @@ class config_table(index_table):
temperature)) temperature))
t = [self.nominal.temperature, temperature] + self.temperatures.keys() t = [self.nominal.temperature, temperature] + self.temperatures.keys()
temp_diffs = make_temp_diffs(t, **kwargs) temp_diffs = make_temp_diffs(t, **kwargs)
cfg = self.cfg_to_idx(temp_diffs[temperature], partial=True, cfg = self.cfg_to_idx(temp_diffs[temperature], partial=True, write_scratch=True)
scratch=scratch, write_scratch=True, send_scratch=True)
msg = self.connect(msg) msg = self.connect(msg)
cfg(msg) cfg(msg)
@ -319,24 +301,6 @@ class config_table(index_table):
insert=self.ppss.arm_insertion_slot(msg, flag="EEPROM_UPLOAD") insert=self.ppss.arm_insertion_slot(msg, flag="EEPROM_UPLOAD")
self.write_eeprom(msg, pad=True, insert=insert) self.write_eeprom(msg, pad=True, insert=insert)
def main(self, name=None, oldtable=None):
if name is None:
name = "%s_config_%s_v%04d" % (
self.unit.lower().replace("/",""),
self.model.lower(),
self.version )
self.write_defs(name+".defs")
with open(name+".txt", "w") as f:
f.write("\n".join(self.dumptable())+"\n")
self.ppss.packet_table(name+".packets")
if oldtable:
patch, idx= self.upload_index_patch(oldtable)
with open(name+"_eeprom_patch.hex", "w") as f:
f.write(patch.hexdump())
with open(name+"_eeprom_patch.xml", "w") as f:
f.write(patch.xml())
def get_bitmasks(ADCvalues): def get_bitmasks(ADCvalues):
# figure out the widest possible bitmask for each ADC value given a list of them # figure out the widest possible bitmask for each ADC value given a list of them
@ -389,5 +353,16 @@ def make_old_table(table):
except Exception as e: except Exception as e:
sys.stderr.write(repr(e)+'\n') sys.stderr.write(repr(e)+'\n')
def main(table, *a, **aa): def main(table, name="unit_config", oldtable=None):
table.main(*a, **aa) import json
table.write_defs(name+".defs")
with open(name+".txt", "w") as f:
f.write("\n".join(table.dumptable())+"\n")
table.ppss.packet_table(name+".packets")
if oldtable:
patch,idx=table.upload_index_patch(oldtable)
with open(name+"_eeprom_patch.hex", "w") as f:
f.write(patch.hexdump())
with open(name+"_eeprom_patch.xml", "w") as f:
f.write(patch.xml())

View file

@ -24,7 +24,7 @@ class appdata(tcobject):
subtype = 0 subtype = 0
size = 0 size = 0
comment = "" comment = ""
delta = 3 delta = 1
def bin(self): def bin(self):
return b"" return b""

View file

@ -1,29 +0,0 @@
#!/usr/bin/python3
"""
This script generates XML telecommands for:
- updating the unit configuration of HET/EPT1&2 to version v0009 in the ICU RAM
- updating the unit configuration of HET/EPT1&2 to version v0009 in the EEPROMs
- sending index tables for switching between CLOSE/FAR mode
- sending index tables for changing the temperature configuration
To reproduce to original set of commands, the git repository should be at the state tagged with 'hetept-v0009':
git checkout hetept-v0009
"""
def main(cf_dir='./solo/configurations/', op_dir='./xml_tcs_hetept_v0010/'):
from solo.hetept.config_update import write_xml_cf_to_icu, write_xml_cf_to_eeprom, write_xml_table_index_execution
fm1_txt = cf_dir + 'hetept1/v0010/hetept_config_fm1.txt'
fm2_txt = cf_dir+ 'hetept2/v0010/hetept_config_fm2.txt'
write_xml_cf_to_icu(fm1_txt, op_dir, 0x20000, eeprom_page=0x0)
write_xml_cf_to_icu(fm2_txt, op_dir, 0x40000, eeprom_page=0x0)
write_xml_cf_to_eeprom(fm1_txt, op_dir, eeprom_page=0x0, pointer_reset=0x30000+0x80)
write_xml_cf_to_eeprom(fm2_txt, op_dir, eeprom_page=0x0, pointer_reset=0x50000+0x80)
write_xml_table_index_execution(op_dir)
if __name__ == "__main__":
import sys, os
sys.path[1:1] = [os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", ".."))]
main(cf_dir='../')

View file

@ -11,5 +11,5 @@ if __name__ == "__main__":
print('writing commands to xml file') print('writing commands to xml file')
telcom.write_xml('step_v0007.xml',tup) telcom.write_xml('step_v0007.xml',tup)
telcom.write_xml('step_v0007_execute.xml',[telcom.send_table_index('STEP',2)]) telcom.write_xml('step_v0007_execute.xml',[telcom.send_table_index('STEP',2),telcom.send_table_index('STEP',6)])

View file

@ -1,4 +0,0 @@
#!/usr/bin/ipython3
from solo.step.config.fs import table as table
table.icumem_upload()

View file

@ -1,7 +0,0 @@
<TCs>
<TC type="128" subtype="103" id="ZID52541" comment="Switch HE1 to calibration for -6.0 deg C" delta="00:00:03">
<parameter name="SensorID" id="PID00083">2</parameter>
<parameter name="IndexTable" id="PID00084">1</parameter>
<parameter name="BlockIndex" id="PID00077">10</parameter>
</TC>
</TCs>

View file

@ -1,7 +0,0 @@
<TCs>
<TC type="128" subtype="103" id="ZID52541" comment="Switch HE1 to calibration for -0.8 deg C" delta="00:00:03">
<parameter name="SensorID" id="PID00083">2</parameter>
<parameter name="IndexTable" id="PID00084">1</parameter>
<parameter name="BlockIndex" id="PID00077">11</parameter>
</TC>
</TCs>

View file

@ -1,7 +0,0 @@
<TCs>
<TC type="128" subtype="103" id="ZID52541" comment="Switch HE1 to nominal mode" delta="00:00:03">
<parameter name="SensorID" id="PID00083">2</parameter>
<parameter name="IndexTable" id="PID00084">1</parameter>
<parameter name="BlockIndex" id="PID00077">2</parameter>
</TC>
</TCs>

View file

@ -1,7 +0,0 @@
<TCs>
<TC type="128" subtype="103" id="ZID52541" comment="Switch HE1 to close mode" delta="00:00:03">
<parameter name="SensorID" id="PID00083">2</parameter>
<parameter name="IndexTable" id="PID00084">1</parameter>
<parameter name="BlockIndex" id="PID00077">4</parameter>
</TC>
</TCs>

View file

@ -1,7 +0,0 @@
<TCs>
<TC type="128" subtype="103" id="ZID52541" comment="Switch HE1 to far mode" delta="00:00:03">
<parameter name="SensorID" id="PID00083">2</parameter>
<parameter name="IndexTable" id="PID00084">1</parameter>
<parameter name="BlockIndex" id="PID00077">8</parameter>
</TC>
</TCs>

View file

@ -1,7 +0,0 @@
<TCs>
<TC type="128" subtype="103" id="ZID52541" comment="Switch HE1 to calibration for -11.6 deg C" delta="00:00:03">
<parameter name="SensorID" id="PID00083">2</parameter>
<parameter name="IndexTable" id="PID00084">1</parameter>
<parameter name="BlockIndex" id="PID00077">9</parameter>
</TC>
</TCs>

View file

@ -1,7 +0,0 @@
<TCs>
<TC type="128" subtype="103" id="ZID52541" comment="Switch HE2 to calibration for -0.8 deg C" delta="00:00:03">
<parameter name="SensorID" id="PID00083">3</parameter>
<parameter name="IndexTable" id="PID00084">2</parameter>
<parameter name="BlockIndex" id="PID00077">10</parameter>
</TC>
</TCs>

View file

@ -1,7 +0,0 @@
<TCs>
<TC type="128" subtype="103" id="ZID52541" comment="Switch HE2 to calibration for +4.4 deg C" delta="00:00:03">
<parameter name="SensorID" id="PID00083">3</parameter>
<parameter name="IndexTable" id="PID00084">2</parameter>
<parameter name="BlockIndex" id="PID00077">11</parameter>
</TC>
</TCs>

View file

@ -1,7 +0,0 @@
<TCs>
<TC type="128" subtype="103" id="ZID52541" comment="Switch HE2 to nominal mode" delta="00:00:03">
<parameter name="SensorID" id="PID00083">3</parameter>
<parameter name="IndexTable" id="PID00084">2</parameter>
<parameter name="BlockIndex" id="PID00077">2</parameter>
</TC>
</TCs>

View file

@ -1,7 +0,0 @@
<TCs>
<TC type="128" subtype="103" id="ZID52541" comment="Switch HE2 to close mode" delta="00:00:03">
<parameter name="SensorID" id="PID00083">3</parameter>
<parameter name="IndexTable" id="PID00084">2</parameter>
<parameter name="BlockIndex" id="PID00077">4</parameter>
</TC>
</TCs>

View file

@ -1,7 +0,0 @@
<TCs>
<TC type="128" subtype="103" id="ZID52541" comment="Switch HE2 to far mode" delta="00:00:03">
<parameter name="SensorID" id="PID00083">3</parameter>
<parameter name="IndexTable" id="PID00084">2</parameter>
<parameter name="BlockIndex" id="PID00077">8</parameter>
</TC>
</TCs>

View file

@ -1,7 +0,0 @@
<TCs>
<TC type="128" subtype="103" id="ZID52541" comment="Switch HE2 to calibration for -6.0 deg C" delta="00:00:03">
<parameter name="SensorID" id="PID00083">3</parameter>
<parameter name="IndexTable" id="PID00084">2</parameter>
<parameter name="BlockIndex" id="PID00077">9</parameter>
</TC>
</TCs>

View file

@ -1,202 +0,0 @@
msg(0x2694, 3, 0x00012c0100000000)
msg(0x2695, 0, 0x0000000000000000)
msg(0x0000, 2, 0x0000000002000000)
msg(0x000f, 3, 0x0000093500090005)
msg(0x2400, 3, 0x09e000e000800000)
msg(0x2401, 3, 0x06f7edfe01000002)
msg(0x2402, 3, 0x06f7d3fc01000004)
msg(0x2403, 3, 0x11050003e0000005)
msg(0x2404, 3, 0x20000003a0000005)
msg(0x2405, 3, 0x0350000009020000)
msg(0x2406, 3, 0x890400000100000c)
msg(0x2407, 3, 0x1c009e0dd90d6a07)
msg(0x2408, 3, 0x99006007840060fe)
msg(0x2409, 3, 0x440060fc9b000112)
msg(0x240a, 3, 0xc3700000c0c03d00)
msg(0x240b, 3, 0x06f7cbff01000016)
msg(0x240c, 3, 0x06f7fdfd01000018)
msg(0x240d, 3, 0x11190017e0000019)
msg(0x240e, 3, 0x091600000100001c)
msg(0x240f, 3, 0x091800000100001e)
msg(0x2410, 3, 0x111f001de000001f)
msg(0x2411, 3, 0x1c009e21d9216a07)
msg(0x2412, 3, 0x9c009e1bd91b6a07)
msg(0x2413, 3, 0xc3700000c0c03d00)
msg(0x2414, 3, 0x19096a07dc009e09)
msg(0x2415, 3, 0x85ff6007a040002a)
msg(0x2416, 3, 0x6001002b8c00002c)
msg(0x2417, 3, 0x80c03d00040060fc)
msg(0x2418, 3, 0x440060fe1b000130)
msg(0x2419, 3, 0x89050003a0004032)
msg(0x241a, 3, 0x857f0033a0c00034)
msg(0x241b, 3, 0x8804000281000036)
msg(0x241c, 3, 0x9900ef37857fef37)
msg(0x241d, 3, 0x8c35193903d00000)
msg(0x241e, 3, 0x03b0000020000000)
msg(0x241f, 3, 0x60000100a0000200)
msg(0x2420, 3, 0x06f7f5f801000040)
msg(0x2421, 3, 0x06f7cffa01000042)
msg(0x2422, 3, 0x11430041e0000043)
msg(0x2423, 3, 0x20000041a0000043)
msg(0x2424, 3, 0x0350000009400000)
msg(0x2425, 3, 0x894200000100004a)
msg(0x2426, 3, 0x1c009e4bd94b6a45)
msg(0x2427, 3, 0x99006045840060f8)
msg(0x2428, 3, 0x440060fa9b000150)
msg(0x2429, 3, 0xc3700000c0c07b00)
msg(0x242a, 3, 0x06f7e9f901000054)
msg(0x242b, 3, 0x06f7ebfb01000056)
msg(0x242c, 3, 0x11570055e0000057)
msg(0x242d, 3, 0x095400000100005a)
msg(0x242e, 3, 0x095600000100005c)
msg(0x242f, 3, 0x115d005be000005d)
msg(0x2430, 3, 0x1c009e5fd95f6a45)
msg(0x2431, 3, 0x9c009e59d9596a45)
msg(0x2432, 3, 0xc3700000c0c07b00)
msg(0x2433, 3, 0x19476a45dc009e47)
msg(0x2434, 3, 0x85ff6045a0430068)
msg(0x2435, 3, 0x7fff00698c00006a)
msg(0x2436, 3, 0x80c07b00040060fa)
msg(0x2437, 3, 0x440060f81b00016e)
msg(0x2438, 3, 0x89410043a0004070)
msg(0x2439, 3, 0x857f0071a0c08072)
msg(0x243a, 3, 0x8842004081000074)
msg(0x243b, 3, 0x9900ef75857fef75)
msg(0x243c, 3, 0x8c73197703d00000)
msg(0x243d, 3, 0x03b0000020000000)
msg(0x243e, 3, 0x60000100a0000200)
msg(0x243f, 3, 0x087d003f1c00017e)
msg(0x2440, 3, 0xe000020014000001)
msg(0x2441, 3, 0x8700008000000000)
msg(0x2480, 3, 0x09e000e02088b800)
msg(0x2481, 3, 0x08000801140200e8)
msg(0x2482, 3, 0xe00000ea86eb4f04)
msg(0x2483, 3, 0xc6aa7405140200f7)
msg(0x2484, 3, 0xe00000eb86eb3308)
msg(0x2485, 3, 0xc6aa5109140a0006)
msg(0x2486, 3, 0xa000000a0100000c)
msg(0x2487, 3, 0xe0000004a0000008)
msg(0x2488, 3, 0x03d00000140200e3)
msg(0x2489, 3, 0xe00000e286eaf012)
msg(0x248a, 3, 0xc6aa2113140200e4)
msg(0x248b, 3, 0xe00000e586eb4016)
msg(0x248c, 3, 0xc6aa681714180014)
msg(0x248d, 3, 0xa00000180100001a)
msg(0x248e, 3, 0xe0000012a0000016)
msg(0x248f, 3, 0x200000006000011e)
msg(0x2490, 3, 0xa000011f06e91be9)
msg(0x2491, 3, 0x010000211c22351b)
msg(0x2492, 3, 0x9900b522c400600f)
msg(0x2493, 3, 0xdc000125c400601d)
msg(0x2494, 3, 0xdc00012780c27700)
msg(0x2495, 3, 0x081a000c0100002a)
msg(0x2496, 3, 0x140200e7e00000e6)
msg(0x2497, 3, 0x86de522dc69bb92e)
msg(0x2498, 3, 0x140200f4e00000f6)
msg(0x2499, 3, 0x86de5231c69bb932)
msg(0x249a, 3, 0x082f113301000034)
msg(0x249b, 3, 0x22000000142b5535)
msg(0x249c, 3, 0xdc00df35c0c23a00)
msg(0x249d, 3, 0x1900df3580c27700)
msg(0x249e, 3, 0x1900022003d00000)
msg(0x249f, 3, 0xd40000202000000c)
msg(0x24a0, 3, 0xc6cfdb3f46cfba40)
msg(0x24a1, 3, 0x010000410942002b)
msg(0x24a2, 3, 0x06cc00420844002b)
msg(0x24a3, 3, 0x3ffdb64511000046)
msg(0x24a4, 3, 0x80c175003ffee145)
msg(0x24a5, 3, 0x11000049c0c27700)
msg(0x24a6, 3, 0x059fd32b1900a049)
msg(0x24a7, 3, 0xe0000036cc4c004e)
msg(0x24a8, 3, 0xc7000f00c0c17f00)
msg(0x24a9, 3, 0x1900d949c0c27700)
msg(0x24aa, 3, 0x1900ee4980c16200)
msg(0x24ab, 3, 0x19000443c0c27700)
msg(0x24ac, 3, 0x3ffee74216000058)
msg(0x24ad, 3, 0x2000a036a001e036)
msg(0x24ae, 3, 0x2000004c9149e000)
msg(0x24af, 3, 0xa000015d0c5e005b)
msg(0x24b0, 3, 0x07000e0000c17f00)
msg(0x24b1, 3, 0x1900044340c16e00)
msg(0x24b2, 3, 0x051f004308000164)
msg(0x24b3, 3, 0x3ffef449051f0066)
msg(0x24b4, 3, 0x2002003608670068)
msg(0x24b5, 3, 0x0c65b069c0c27700)
msg(0x24b6, 3, 0x07000d0000c17f00)
msg(0x24b7, 3, 0x3ffec7429100006e)
msg(0x24b8, 3, 0xc0c2770020014036)
msg(0x24b9, 3, 0x0c4c007107000d00)
msg(0x24ba, 3, 0x00c17f00051f0043)
msg(0x24bb, 3, 0x05ff004620040036)
msg(0x24bc, 3, 0x087590770c761078)
msg(0x24bd, 3, 0x19000443c0c27700)
msg(0x24be, 3, 0x19007046c7000c00)
msg(0x24bf, 3, 0x87000b000400e0e1)
msg(0x24c0, 3, 0x1400007f80000000)
msg(0x24c1, 3, 0x00c0020000000000)
msg(0x2500, 3, 0x09e000e02088b800)
msg(0x2501, 3, 0x08000801140200f2)
msg(0x2502, 3, 0xe00000f386eb3104)
msg(0x2503, 3, 0xc6aa3405140200f1)
msg(0x2504, 3, 0xe00000f086eb8108)
msg(0x2505, 3, 0xc6aaa009140a0006)
msg(0x2506, 3, 0xa000000a0100000c)
msg(0x2507, 3, 0xe0000004a0000008)
msg(0x2508, 3, 0x03d00000140200ed)
msg(0x2509, 3, 0xe00000ec86eb0412)
msg(0x250a, 3, 0xc6aa7913140200ef)
msg(0x250b, 3, 0xe00000ee86eb0616)
msg(0x250c, 3, 0xc6aa291714180014)
msg(0x250d, 3, 0xa00000180100001a)
msg(0x250e, 3, 0xe0000012a0000016)
msg(0x250f, 3, 0x200000006000011e)
msg(0x2510, 3, 0xa000011f06e969f5)
msg(0x2511, 3, 0x010000211c22351b)
msg(0x2512, 3, 0x9900b522c400600f)
msg(0x2513, 3, 0xdc000125c400601d)
msg(0x2514, 3, 0xdc00012780c27700)
msg(0x2515, 3, 0x081a000c0100002a)
msg(0x2516, 3, 0x140200e7e00000e6)
msg(0x2517, 3, 0x86de522dc69bb92e)
msg(0x2518, 3, 0x140200f4e00000f6)
msg(0x2519, 3, 0x86de5231c69bb932)
msg(0x251a, 3, 0x082f113301000034)
msg(0x251b, 3, 0x23000000142b5535)
msg(0x251c, 3, 0xdc00df3580c13a00)
msg(0x251d, 3, 0xc400602ddc00013a)
msg(0x251e, 3, 0xc4006031dc00013c)
msg(0x251f, 3, 0xd41b350d80c27700)
msg(0x2520, 3, 0x141a000ce000001a)
msg(0x2521, 3, 0x1900022003d00000)
msg(0x2522, 3, 0xd400002020000041)
msg(0x2523, 3, 0xc6cfdb4146cfba46)
msg(0x2524, 3, 0x0100004706bc0048)
msg(0x2525, 3, 0x082a31340100004a)
msg(0x2526, 3, 0x084b00493ffe414c)
msg(0x2527, 3, 0x1100004dc0c27700)
msg(0x2528, 3, 0x19009f4dd900ef1b)
msg(0x2529, 3, 0xd900ef0dc57faf4b)
msg(0x252a, 3, 0xe0140036cc530054)
msg(0x252b, 3, 0xc7000a00c0c27300)
msg(0x252c, 3, 0x3fff384d11000058)
msg(0x252d, 3, 0xc0c2770019002158)
msg(0x252e, 3, 0xc57ff84be0148036)
msg(0x252f, 3, 0xcc5c005dc7000900)
msg(0x2530, 3, 0xc0c273000948004b)
msg(0x2531, 3, 0x2000206108000262)
msg(0x2532, 3, 0x051f006319006b58)
msg(0x2533, 3, 0xc51f4b58e0150036)
msg(0x2534, 3, 0xc8660067cc64b068)
msg(0x2535, 3, 0xc7000800c0c27300)
msg(0x2536, 3, 0x05ff776620190036)
msg(0x2537, 3, 0x086c106d0c64906e)
msg(0x2538, 3, 0x1900936cc7000700)
msg(0x2539, 3, 0x870006000400e0e1)
msg(0x253a, 3, 0x1400007380000000)
msg(0x253b, 3, 0x00c002000400e0e1)
msg(0x253c, 3, 0x14000077c0c00000)
msg(0x253d, 3, 0x0700030000000000)
msg(0x2694, 3, 0x00012c0100008000)
msg(0x2695, 2, 0x00000000083f0000)
msg(0x2697, 1, 0x00000000000000ff)
msg(0x2696, 3, 0x0003e8010000413c)

View file

@ -1,62 +0,0 @@
<TCs>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">2</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">22</parameter>
<parameter name="Messages" id="PID00075">e69400012c01000000002695800002000000c00f0000093500090005e40009e000e000800000e40106f7edfe01000002e40206f7d3fc01000004e40311050003e0000005e40420000003a0000005e4050350000009020000e406890400000100000ce4071c009e0dd90d6a07e40899006007840060fee409440060fc9b000112e40ac3700000c0c03d00e40b06f7cbff01000016e40c06f7fdfd01000018e40d11190017e0000019e40e091600000100001ce40f091800000100001ee410111f001de000001fe4111c009e21d9216a07</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">2</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e4129c009e1bd91b6a07e413c3700000c0c03d00e41419096a07dc009e09e41585ff6007a040002ae4166001002b8c00002ce41780c03d00040060fce418440060fe1b000130e41989050003a0004032e41a857f0033a0c00034e41b8804000281000036e41c9900ef37857fef37e41d8c35193903d00000e41e03b0000020000000e41f60000100a0000200e42006f7f5f801000040e42106f7cffa01000042e42211430041e0000043e42320000041a0000043e4240350000009400000e425894200000100004a</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">2</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e4261c009e4bd94b6a45e42799006045840060f8e428440060fa9b000150e429c3700000c0c07b00e42a06f7e9f901000054e42b06f7ebfb01000056e42c11570055e0000057e42d095400000100005ae42e095600000100005ce42f115d005be000005de4301c009e5fd95f6a45e4319c009e59d9596a45e432c3700000c0c07b00e43319476a45dc009e47e43485ff6045a0430068e4357fff00698c00006ae43680c07b00040060fae437440060f81b00016ee43889410043a0004070e439857f0071a0c08072</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">2</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e43a8842004081000074e43b9900ef75857fef75e43c8c73197703d00000e43d03b0000020000000e43e60000100a0000200e43f087d003f1c00017ee440e000020014000001e4418700008000000000e48009e000e02088b800e48108000801140200e8e482e00000ea86eb4f04e483c6aa7405140200f7e484e00000eb86eb3308e485c6aa5109140a0006e486a000000a0100000ce487e0000004a0000008e48803d00000140200e3e489e00000e286eaf012e48ac6aa2113140200e4e48be00000e586eb4016</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">2</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e48cc6aa681714180014e48da00000180100001ae48ee0000012a0000016e48f200000006000011ee490a000011f06e91be9e491010000211c22351be4929900b522c400600fe493dc000125c400601de494dc00012780c27700e495081a000c0100002ae496140200e7e00000e6e49786de522dc69bb92ee498140200f4e00000f6e49986de5231c69bb932e49a082f113301000034e49b22000000142b5535e49cdc00df35c0c23a00e49d1900df3580c27700e49e1900022003d00000e49fd40000202000000c</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">2</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e4a0c6cfdb3f46cfba40e4a1010000410942002be4a206cc00420844002be4a33ffdb64511000046e4a480c175003ffee145e4a511000049c0c27700e4a6059fd32b1900a049e4a7e0000036cc4c004ee4a8c7000f00c0c17f00e4a91900d949c0c27700e4aa1900ee4980c16200e4ab19000443c0c27700e4ac3ffee74216000058e4ad2000a036a001e036e4ae2000004c9149e000e4afa000015d0c5e005be4b007000e0000c17f00e4b11900044340c16e00e4b2051f004308000164e4b33ffef449051f0066</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">2</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e4b42002003608670068e4b50c65b069c0c27700e4b607000d0000c17f00e4b73ffec7429100006ee4b8c0c2770020014036e4b90c4c007107000d00e4ba00c17f00051f0043e4bb05ff004620040036e4bc087590770c761078e4bd19000443c0c27700e4be19007046c7000c00e4bf87000b000400e0e1e4c01400007f80000000e4c100c0020000000000e50009e000e02088b800e50108000801140200f2e502e00000f386eb3104e503c6aa3405140200f1e504e00000f086eb8108e505c6aaa009140a0006</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">2</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e506a000000a0100000ce507e0000004a0000008e50803d00000140200ede509e00000ec86eb0412e50ac6aa7913140200efe50be00000ee86eb0616e50cc6aa291714180014e50da00000180100001ae50ee0000012a0000016e50f200000006000011ee510a000011f06e969f5e511010000211c22351be5129900b522c400600fe513dc000125c400601de514dc00012780c27700e515081a000c0100002ae516140200e7e00000e6e51786de522dc69bb92ee518140200f4e00000f6e51986de5231c69bb932</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">2</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e51a082f113301000034e51b23000000142b5535e51cdc00df3580c13a00e51dc400602ddc00013ae51ec4006031dc00013ce51fd41b350d80c27700e520141a000ce000001ae5211900022003d00000e522d400002020000041e523c6cfdb4146cfba46e5240100004706bc0048e525082a31340100004ae526084b00493ffe414ce5271100004dc0c27700e52819009f4dd900ef1be529d900ef0dc57faf4be52ae0140036cc530054e52bc7000a00c0c27300e52c3fff384d11000058e52dc0c2770019002158</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">2</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e52ec57ff84be0148036e52fcc5c005dc7000900e530c0c273000948004be5312000206108000262e532051f006319006b58e533c51f4b58e0150036e534c8660067cc64b068e535c7000800c0c27300e53605ff776620190036e537086c106d0c64906ee5381900936cc7000700e539870006000400e0e1e53a1400007380000000e53b00c002000400e0e1e53c14000077c0c00000e53d0700030000000000e69400012c0100008000a695083f0000669700ffe6960003e8010000413c</parameter>
</TC>
</TCs>

View file

@ -1,202 +0,0 @@
msg(0x2694, 3, 0x00012c0100000000)
msg(0x2695, 0, 0x0000000000000000)
msg(0x0000, 2, 0x0000000002000000)
msg(0x000f, 3, 0x0000093500090005)
msg(0x2400, 3, 0x09e000e000800000)
msg(0x2401, 3, 0x06f7e8fe01000002)
msg(0x2402, 3, 0x06f808fc01000004)
msg(0x2403, 3, 0x11050003e0000005)
msg(0x2404, 3, 0x20000003a0000005)
msg(0x2405, 3, 0x0350000009020000)
msg(0x2406, 3, 0x890400000100000c)
msg(0x2407, 3, 0x1c009e0dd90d6a07)
msg(0x2408, 3, 0x99006007840060fe)
msg(0x2409, 3, 0x440060fc9b000112)
msg(0x240a, 3, 0xc3700000c0c03d00)
msg(0x240b, 3, 0x06f848ff01000016)
msg(0x240c, 3, 0x06f7f6fd01000018)
msg(0x240d, 3, 0x11190017e0000019)
msg(0x240e, 3, 0x091600000100001c)
msg(0x240f, 3, 0x091800000100001e)
msg(0x2410, 3, 0x111f001de000001f)
msg(0x2411, 3, 0x1c009e21d9216a07)
msg(0x2412, 3, 0x9c009e1bd91b6a07)
msg(0x2413, 3, 0xc3700000c0c03d00)
msg(0x2414, 3, 0x19096a07dc009e09)
msg(0x2415, 3, 0x85ff6007a040002a)
msg(0x2416, 3, 0x6001002b8c00002c)
msg(0x2417, 3, 0x80c03d00040060fc)
msg(0x2418, 3, 0x440060fe1b000130)
msg(0x2419, 3, 0x89050003a0004032)
msg(0x241a, 3, 0x857f0033a0c00034)
msg(0x241b, 3, 0x8804000281000036)
msg(0x241c, 3, 0x9900ef37857fef37)
msg(0x241d, 3, 0x8c35193903d00000)
msg(0x241e, 3, 0x03b0000020000000)
msg(0x241f, 3, 0x60000100a0000200)
msg(0x2420, 3, 0x06f7dbf801000040)
msg(0x2421, 3, 0x06f7cffa01000042)
msg(0x2422, 3, 0x11430041e0000043)
msg(0x2423, 3, 0x20000041a0000043)
msg(0x2424, 3, 0x0350000009400000)
msg(0x2425, 3, 0x894200000100004a)
msg(0x2426, 3, 0x1c009e4bd94b6a45)
msg(0x2427, 3, 0x99006045840060f8)
msg(0x2428, 3, 0x440060fa9b000150)
msg(0x2429, 3, 0xc3700000c0c07b00)
msg(0x242a, 3, 0x06f7f6f901000054)
msg(0x242b, 3, 0x06f7f8fb01000056)
msg(0x242c, 3, 0x11570055e0000057)
msg(0x242d, 3, 0x095400000100005a)
msg(0x242e, 3, 0x095600000100005c)
msg(0x242f, 3, 0x115d005be000005d)
msg(0x2430, 3, 0x1c009e5fd95f6a45)
msg(0x2431, 3, 0x9c009e59d9596a45)
msg(0x2432, 3, 0xc3700000c0c07b00)
msg(0x2433, 3, 0x19476a45dc009e47)
msg(0x2434, 3, 0x85ff6045a0430068)
msg(0x2435, 3, 0x7fff00698c00006a)
msg(0x2436, 3, 0x80c07b00040060fa)
msg(0x2437, 3, 0x440060f81b00016e)
msg(0x2438, 3, 0x89410043a0004070)
msg(0x2439, 3, 0x857f0071a0c08072)
msg(0x243a, 3, 0x8842004081000074)
msg(0x243b, 3, 0x9900ef75857fef75)
msg(0x243c, 3, 0x8c73197703d00000)
msg(0x243d, 3, 0x03b0000020000000)
msg(0x243e, 3, 0x60000100a0000200)
msg(0x243f, 3, 0x087d003f1c00017e)
msg(0x2440, 3, 0xe000020014000001)
msg(0x2441, 3, 0x8700008000000000)
msg(0x2480, 3, 0x09e000e02088b800)
msg(0x2481, 3, 0x08000801140200e8)
msg(0x2482, 3, 0xe00000ea86eb1a04)
msg(0x2483, 3, 0xc6a9e105140200f7)
msg(0x2484, 3, 0xe00000eb86eaf008)
msg(0x2485, 3, 0xc6a9a809140a0006)
msg(0x2486, 3, 0xa000000a0100000c)
msg(0x2487, 3, 0xe0000004a0000008)
msg(0x2488, 3, 0x03d00000140200e3)
msg(0x2489, 3, 0xe00000e286eabb12)
msg(0x248a, 3, 0xc6a9bb13140200e4)
msg(0x248b, 3, 0xe00000e586eb9216)
msg(0x248c, 3, 0xc6a9fb1714180014)
msg(0x248d, 3, 0xa00000180100001a)
msg(0x248e, 3, 0xe0000012a0000016)
msg(0x248f, 3, 0x200000006000011e)
msg(0x2490, 3, 0xa000011f06e909e9)
msg(0x2491, 3, 0x010000211c22351b)
msg(0x2492, 3, 0x9900b522c400600f)
msg(0x2493, 3, 0xdc000125c400601d)
msg(0x2494, 3, 0xdc00012780c27700)
msg(0x2495, 3, 0x081a000c0100002a)
msg(0x2496, 3, 0x140200e7e00000e6)
msg(0x2497, 3, 0x86de202dc69b822e)
msg(0x2498, 3, 0x140200f4e00000f6)
msg(0x2499, 3, 0x86de2031c69b8232)
msg(0x249a, 3, 0x082f113301000034)
msg(0x249b, 3, 0x22000000142b5535)
msg(0x249c, 3, 0xdc00df35c0c23a00)
msg(0x249d, 3, 0x1900df3580c27700)
msg(0x249e, 3, 0x1900022003d00000)
msg(0x249f, 3, 0xd40000202000000c)
msg(0x24a0, 3, 0xc6cfdb3f46cfba40)
msg(0x24a1, 3, 0x010000410942002b)
msg(0x24a2, 3, 0x06cc00420844002b)
msg(0x24a3, 3, 0x3ffdb64511000046)
msg(0x24a4, 3, 0x80c175003ffee145)
msg(0x24a5, 3, 0x11000049c0c27700)
msg(0x24a6, 3, 0x059fd32b1900a049)
msg(0x24a7, 3, 0xe0000036cc4c004e)
msg(0x24a8, 3, 0xc7000f00c0c17f00)
msg(0x24a9, 3, 0x1900d949c0c27700)
msg(0x24aa, 3, 0x1900ee4980c16200)
msg(0x24ab, 3, 0x19000443c0c27700)
msg(0x24ac, 3, 0x3ffee74216000058)
msg(0x24ad, 3, 0x2000a036a001e036)
msg(0x24ae, 3, 0x2000004c9149e000)
msg(0x24af, 3, 0xa000015d0c5e005b)
msg(0x24b0, 3, 0x07000e0000c17f00)
msg(0x24b1, 3, 0x1900044340c16e00)
msg(0x24b2, 3, 0x051f004308000164)
msg(0x24b3, 3, 0x3ffef449051f0066)
msg(0x24b4, 3, 0x2002003608670068)
msg(0x24b5, 3, 0x0c65b069c0c27700)
msg(0x24b6, 3, 0x07000d0000c17f00)
msg(0x24b7, 3, 0x3ffec7429100006e)
msg(0x24b8, 3, 0xc0c2770020014036)
msg(0x24b9, 3, 0x0c4c007107000d00)
msg(0x24ba, 3, 0x00c17f00051f0043)
msg(0x24bb, 3, 0x05ff004620040036)
msg(0x24bc, 3, 0x087590770c761078)
msg(0x24bd, 3, 0x19000443c0c27700)
msg(0x24be, 3, 0x19007046c7000c00)
msg(0x24bf, 3, 0x87000b000400e0e1)
msg(0x24c0, 3, 0x1400007f80000000)
msg(0x24c1, 3, 0x00c0020000000000)
msg(0x2500, 3, 0x09e000e02088b800)
msg(0x2501, 3, 0x08000801140200f2)
msg(0x2502, 3, 0xe00000f386ec4904)
msg(0x2503, 3, 0xc6aa0b05140200f1)
msg(0x2504, 3, 0xe00000f086eb0f08)
msg(0x2505, 3, 0xc6a98e09140a0006)
msg(0x2506, 3, 0xa000000a0100000c)
msg(0x2507, 3, 0xe0000004a0000008)
msg(0x2508, 3, 0x03d00000140200ed)
msg(0x2509, 3, 0xe00000ec86eaf712)
msg(0x250a, 3, 0xc6a9c513140200ef)
msg(0x250b, 3, 0xe00000ee86eafb16)
msg(0x250c, 3, 0xc6a9c31714180014)
msg(0x250d, 3, 0xa00000180100001a)
msg(0x250e, 3, 0xe0000012a0000016)
msg(0x250f, 3, 0x200000006000011e)
msg(0x2510, 3, 0xa000011f06e96bf5)
msg(0x2511, 3, 0x010000211c22351b)
msg(0x2512, 3, 0x9900b522c400600f)
msg(0x2513, 3, 0xdc000125c400601d)
msg(0x2514, 3, 0xdc00012780c27700)
msg(0x2515, 3, 0x081a000c0100002a)
msg(0x2516, 3, 0x140200e7e00000e6)
msg(0x2517, 3, 0x86de202dc69b822e)
msg(0x2518, 3, 0x140200f4e00000f6)
msg(0x2519, 3, 0x86de2031c69b8232)
msg(0x251a, 3, 0x082f113301000034)
msg(0x251b, 3, 0x23000000142b5535)
msg(0x251c, 3, 0xdc00df3580c13a00)
msg(0x251d, 3, 0xc400602ddc00013a)
msg(0x251e, 3, 0xc4006031dc00013c)
msg(0x251f, 3, 0xd41b350d80c27700)
msg(0x2520, 3, 0x141a000ce000001a)
msg(0x2521, 3, 0x1900022003d00000)
msg(0x2522, 3, 0xd400002020000041)
msg(0x2523, 3, 0xc6cfdb4146cfba46)
msg(0x2524, 3, 0x0100004706bc0048)
msg(0x2525, 3, 0x082a31340100004a)
msg(0x2526, 3, 0x084b00493ffe414c)
msg(0x2527, 3, 0x1100004dc0c27700)
msg(0x2528, 3, 0x19009f4dd900ef1b)
msg(0x2529, 3, 0xd900ef0dc57faf4b)
msg(0x252a, 3, 0xe0140036cc530054)
msg(0x252b, 3, 0xc7000a00c0c27300)
msg(0x252c, 3, 0x3fff384d11000058)
msg(0x252d, 3, 0xc0c2770019002158)
msg(0x252e, 3, 0xc57ff84be0148036)
msg(0x252f, 3, 0xcc5c005dc7000900)
msg(0x2530, 3, 0xc0c273000948004b)
msg(0x2531, 3, 0x2000206108000262)
msg(0x2532, 3, 0x051f006319006b58)
msg(0x2533, 3, 0xc51f4b58e0150036)
msg(0x2534, 3, 0xc8660067cc64b068)
msg(0x2535, 3, 0xc7000800c0c27300)
msg(0x2536, 3, 0x05ff776620190036)
msg(0x2537, 3, 0x086c106d0c64906e)
msg(0x2538, 3, 0x1900936cc7000700)
msg(0x2539, 3, 0x870006000400e0e1)
msg(0x253a, 3, 0x1400007380000000)
msg(0x253b, 3, 0x00c002000400e0e1)
msg(0x253c, 3, 0x14000077c0c00000)
msg(0x253d, 3, 0x0700030000000000)
msg(0x2694, 3, 0x00012c0100008000)
msg(0x2695, 2, 0x00000000083f0000)
msg(0x2697, 1, 0x00000000000000ff)
msg(0x2696, 3, 0x0003e8010000413c)

View file

@ -1,62 +0,0 @@
<TCs>
<TC type="128" subtype="102" id="ZID52540" comment="DELAY=1000ms" delta="00:16:40">
<parameter name="SensorID" id="PID00069">3</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">22</parameter>
<parameter name="Messages" id="PID00075">e69400012c01000000002695800002000000c00f0000093500090005e40009e000e000800000e40106f7e8fe01000002e40206f808fc01000004e40311050003e0000005e40420000003a0000005e4050350000009020000e406890400000100000ce4071c009e0dd90d6a07e40899006007840060fee409440060fc9b000112e40ac3700000c0c03d00e40b06f848ff01000016e40c06f7f6fd01000018e40d11190017e0000019e40e091600000100001ce40f091800000100001ee410111f001de000001fe4111c009e21d9216a07</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">3</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e4129c009e1bd91b6a07e413c3700000c0c03d00e41419096a07dc009e09e41585ff6007a040002ae4166001002b8c00002ce41780c03d00040060fce418440060fe1b000130e41989050003a0004032e41a857f0033a0c00034e41b8804000281000036e41c9900ef37857fef37e41d8c35193903d00000e41e03b0000020000000e41f60000100a0000200e42006f7dbf801000040e42106f7cffa01000042e42211430041e0000043e42320000041a0000043e4240350000009400000e425894200000100004a</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">3</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e4261c009e4bd94b6a45e42799006045840060f8e428440060fa9b000150e429c3700000c0c07b00e42a06f7f6f901000054e42b06f7f8fb01000056e42c11570055e0000057e42d095400000100005ae42e095600000100005ce42f115d005be000005de4301c009e5fd95f6a45e4319c009e59d9596a45e432c3700000c0c07b00e43319476a45dc009e47e43485ff6045a0430068e4357fff00698c00006ae43680c07b00040060fae437440060f81b00016ee43889410043a0004070e439857f0071a0c08072</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">3</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e43a8842004081000074e43b9900ef75857fef75e43c8c73197703d00000e43d03b0000020000000e43e60000100a0000200e43f087d003f1c00017ee440e000020014000001e4418700008000000000e48009e000e02088b800e48108000801140200e8e482e00000ea86eb1a04e483c6a9e105140200f7e484e00000eb86eaf008e485c6a9a809140a0006e486a000000a0100000ce487e0000004a0000008e48803d00000140200e3e489e00000e286eabb12e48ac6a9bb13140200e4e48be00000e586eb9216</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">3</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e48cc6a9fb1714180014e48da00000180100001ae48ee0000012a0000016e48f200000006000011ee490a000011f06e909e9e491010000211c22351be4929900b522c400600fe493dc000125c400601de494dc00012780c27700e495081a000c0100002ae496140200e7e00000e6e49786de202dc69b822ee498140200f4e00000f6e49986de2031c69b8232e49a082f113301000034e49b22000000142b5535e49cdc00df35c0c23a00e49d1900df3580c27700e49e1900022003d00000e49fd40000202000000c</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">3</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e4a0c6cfdb3f46cfba40e4a1010000410942002be4a206cc00420844002be4a33ffdb64511000046e4a480c175003ffee145e4a511000049c0c27700e4a6059fd32b1900a049e4a7e0000036cc4c004ee4a8c7000f00c0c17f00e4a91900d949c0c27700e4aa1900ee4980c16200e4ab19000443c0c27700e4ac3ffee74216000058e4ad2000a036a001e036e4ae2000004c9149e000e4afa000015d0c5e005be4b007000e0000c17f00e4b11900044340c16e00e4b2051f004308000164e4b33ffef449051f0066</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">3</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e4b42002003608670068e4b50c65b069c0c27700e4b607000d0000c17f00e4b73ffec7429100006ee4b8c0c2770020014036e4b90c4c007107000d00e4ba00c17f00051f0043e4bb05ff004620040036e4bc087590770c761078e4bd19000443c0c27700e4be19007046c7000c00e4bf87000b000400e0e1e4c01400007f80000000e4c100c0020000000000e50009e000e02088b800e50108000801140200f2e502e00000f386ec4904e503c6aa0b05140200f1e504e00000f086eb0f08e505c6a98e09140a0006</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">3</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e506a000000a0100000ce507e0000004a0000008e50803d00000140200ede509e00000ec86eaf712e50ac6a9c513140200efe50be00000ee86eafb16e50cc6a9c31714180014e50da00000180100001ae50ee0000012a0000016e50f200000006000011ee510a000011f06e96bf5e511010000211c22351be5129900b522c400600fe513dc000125c400601de514dc00012780c27700e515081a000c0100002ae516140200e7e00000e6e51786de202dc69b822ee518140200f4e00000f6e51986de2031c69b8232</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">3</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e51a082f113301000034e51b23000000142b5535e51cdc00df3580c13a00e51dc400602ddc00013ae51ec4006031dc00013ce51fd41b350d80c27700e520141a000ce000001ae5211900022003d00000e522d400002020000041e523c6cfdb4146cfba46e5240100004706bc0048e525082a31340100004ae526084b00493ffe414ce5271100004dc0c27700e52819009f4dd900ef1be529d900ef0dc57faf4be52ae0140036cc530054e52bc7000a00c0c27300e52c3fff384d11000058e52dc0c2770019002158</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">3</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e52ec57ff84be0148036e52fcc5c005dc7000900e530c0c273000948004be5312000206108000262e532051f006319006b58e533c51f4b58e0150036e534c8660067cc64b068e535c7000800c0c27300e53605ff776620190036e537086c106d0c64906ee5381900936cc7000700e539870006000400e0e1e53a1400007380000000e53b00c002000400e0e1e53c14000077c0c00000e53d0700030000000000e69400012c0100008000a695083f0000669700ffe6960003e8010000413c</parameter>
</TC>
</TCs>

View file

@ -1,32 +0,0 @@
#! /usr/bin/python3
from solo.patch import patch
class hetept95(patch):
def assemble(self, **aa):
if self.config is None:
raise ValueError("Please provide a config=")
self.scratch(subversion=5)
self.l3 = self.config.nominal.l3
self.l3_code = [(a,d) for a,d in self.l3.l3_code if a < 0x300]
self.l3.l3_code = self.l3_code
def send(self, msg):
self.send_stop_l3(msg)
self.send_scratch(msg)
self.send_l3(msg, self.l3, init=True, pad=True, fill=False)
self.send_start_l3(msg)
self.send_ping(msg)
def main(self, fmts=["xml", "msg"]):
for fmt in fmts:
fn = "hetept%s_v0009_patch5.%s" % (self.config.unit[-1], fmt)
self.emit(f=fn, fmt=fmt)
import solo.hetept.config
patch1 = hetept95(name="fm1", config=solo.hetept.config.fm1(config_page=0x10000))
patch2 = hetept95(name="fm2", config=solo.hetept.config.fm2(config_page=0x10000))
def main():
patch1.main()

View file

@ -1,66 +0,0 @@
# HET/EPT1 FM1, version 10, rev 0
# env = {CLOSE}
# version/dps: 10/0
# apid/flags, n("section"sum enc/fmt)
# apid: 0x0300 + Tag
# flags: /-separated flags: 0..3 or 'h' or 'r'
# n: dps_items in section
# section: section name; may not contain whitespace
# sum, enc: cadence
# fmt: 0..3: float16, log2, uint24, encoded
# version: 0010
# S20data
0x0320/0x0, 4("S20_e_S" 0/1), 4("S20_e_A" 0/1), 1("S20_p_S" 0/1), 1("S20_p_A" 0/1)
# Low Latency
0x0331/0x0/0x2, 8("LL_EPT_e_S" 3/1), 8("LL_EPT_e_A" 3/1), 18("LL_EPT_i_S" 3/1), 18("LL_EPT_i_A" 3/1), 1("LL_EPT_T_e_S" 1/3), 1("LL_EPT_T_e_A" 1/3), 2("LL_EPT_T_i_S" 1/3), 2("LL_EPT_T_i_A" 1/3), 2("LL_HETB_p_S" 3/1), 2("LL_HETB_p_A" 3/1), 10("LL_HETC_p_S" 3/1), 10("LL_HETC_p_A" 3/1), 2("LL_HETP_p_S" 3/1), 2("LL_HETP_p_A" 3/1), 2("LL_HETP_p_E" 3/1), 1("LL_HETB_e_S" 3/1), 1("LL_HETB_e_A" 3/1), 3("LL_HETC_e_S" 3/1), 3("LL_HETC_e_A" 3/1), 2("LL_HETB_he3_S" 5/1), 2("LL_HETB_he3_A" 5/1), 2("LL_HETB_he4_S" 5/1), 2("LL_HETB_he4_A" 5/1), 4("LL_HETC_he3_S" 5/1), 4("LL_HETC_he3_A" 5/1), 8("LL_HETC_he4_S" 5/1), 8("LL_HETC_he4_A" 5/1), 4("LL_HETB_he_S" 5/1), 4("LL_HETB_he_A" 5/1), 2("LL_HETP_he_S" 5/1), 2("LL_HETP_he_A" 5/1), 2("LL_HETP_he_E" 5/1), 6("LL_HETB_cno_S" 6/1), 6("LL_HETB_cno_A" 6/1), 9("LL_HETC_cno_S" 6/1), 9("LL_HETC_cno_A" 6/1), 2("LL_HETP_cno_S" 7/1), 2("LL_HETP_cno_A" 7/1), 2("LL_HETP_cno_E" 7/1), 2("LL_HETB_fe_S" 6/1), 2("LL_HETB_fe_A" 6/1), 3("LL_HETC_fe_S" 7/1), 3("LL_HETC_fe_A" 7/1), 1("LL_HETP_fe_S" 7/1), 1("LL_HETP_fe_A" 7/1), 3("LL_HETC_T_p_S" 1/3), 3("LL_HETC_T_p_A" 1/3), 1("LL_HETC_T_e_S" 1/3), 1("LL_HETC_T_e_A" 1/3)
# Nominal
0x0351/0x0, 77("NO_EPT_mag_S" 0/3), 77("NO_EPT_mag_A" 0/3), 77("NO_EPT_foil_S" 0/3), 77("NO_EPT_foil_A" 0/3), 2("NO_EPTP_e_S" 1/3), 2("NO_EPTP_e_A" 1/3), 4("NO_EPTP_p_S" 1/3), 4("NO_EPTP_p_A" 1/3), 4("NO_EPTP_p_E" 1/3), 2("NO_EPTP_he3_S" 3/3), 2("NO_EPTP_he3_A" 3/3), 1("NO_EPTP_he3_E" 3/3), 2("NO_EPTP_he4_S" 3/3), 2("NO_EPTP_he4_A" 3/3), 1("NO_EPTP_he4_E" 3/3), 1("NO_EPTP_he_S" 3/3), 1("NO_EPTP_he_A" 3/3), 4("NO_EPTP_he_E" 3/3), 1("NO_HETP_bg_S" 6/3), 1("NO_HETP_bg_A" 6/3), 1("NO_HETB_bg_S" 6/3), 1("NO_HETB_bg_A" 6/3), 5("NO_HETB_p_S" 1/3), 5("NO_HETB_p_A" 1/3), 1("NO_HETB_tail_high_p_S" 1/3), 1("NO_HETB_tail_high_p_A" 1/3), 31("NO_HETC_p_S" 1/3), 31("NO_HETC_p_A" 1/3), 2("NO_HETP_p_S" 1/3), 2("NO_HETP_p_A" 1/3), 3("NO_HETP_p_E" 3/3), 1("NO_HETB_H_p_S" 0/3), 1("NO_HETB_H_p_A" 0/3), 3("NO_HETC_H_p_S" 0/3), 3("NO_HETC_H_p_A" 0/3), 1("NO_HETB_e_S" 0/3), 1("NO_HETB_e_A" 0/3), 3("NO_HETC_e_S" 0/3), 3("NO_HETC_e_A" 0/3), 1("NO_HETC_H_e_S" 3/3), 1("NO_HETC_H_e_A" 3/3), 4("NO_HETB_he3_S" 3/3), 4("NO_HETB_he3_A" 3/3), 4("NO_HETB_he4_S" 3/3), 4("NO_HETB_he4_A" 3/3), 5("NO_HETC_he3_S" 3/3), 5("NO_HETC_he3_A" 3/3), 11("NO_HETC_he4_S" 3/3), 11("NO_HETC_he4_A" 3/3), 6("NO_HETB_he_S" 1/3), 6("NO_HETB_he_A" 1/3), 2("NO_HETP_he_S" 4/3), 2("NO_HETP_he_A" 4/3), 4("NO_HETP_he_E" 4/3), 12("NO_HETC_c_S" 4/3), 12("NO_HETC_c_A" 4/3), 12("NO_HETC_n_S" 4/3), 12("NO_HETC_n_A" 4/3), 12("NO_HETC_o_S" 4/3), 12("NO_HETC_o_A" 4/3), 5("NO_HETB_c_S" 4/3), 5("NO_HETB_c_A" 4/3), 5("NO_HETB_n_S" 4/3), 5("NO_HETB_n_A" 4/3), 5("NO_HETB_o_S" 4/3), 5("NO_HETB_o_A" 4/3), 2("NO_HETP_cno_S" 6/3), 2("NO_HETP_cno_A" 6/3), 6("NO_HETP_cno_E" 6/3), 11("NO_HETC_fe_S" 5/3), 11("NO_HETC_fe_A" 5/3), 5("NO_HETB_fe_S" 5/3), 5("NO_HETB_fe_A" 5/3), 2("NO_HETP_fe_S" 6/3), 2("NO_HETP_fe_A" 6/3), 3("NO_HETP_fe_E" 6/3)
# Burst1n
0x0361/0x0, 48("B1_EPT_mag_S" 2/3), 48("B1_EPT_mag_A" 2/3), 2("B1_EPTP_he3_S" 1/3), 2("B1_EPTP_he3_A" 1/3), 1("B1_EPTP_he3_E" 1/3), 2("B1_EPTP_he4_S" 1/3), 2("B1_EPTP_he4_A" 1/3), 1("B1_EPTP_he4_E" 1/3)
# Unstable
0x0355/0x0, 1("NU_HETB_tail_low_p_S" 5/3), 1("NU_HETB_tail_low_p_A" 5/3), 2("NU_HETB_he34_S" 4/3), 2("NU_HETB_he34_A" 4/3), 5("NU_HETP_lbb_E" 5/3), 1("NU_HETB_cno_S" 5/3), 1("NU_HETB_cno_A" 5/3), 11("NU_HETC_ne_S" 5/3), 11("NU_HETC_ne_A" 5/3), 11("NU_HETC_mg_S" 5/3), 11("NU_HETC_mg_A" 5/3), 11("NU_HETC_si_S" 5/3), 11("NU_HETC_si_A" 5/3), 11("NU_HETC_s_S" 5/3), 11("NU_HETC_s_A" 5/3), 5("NU_HETB_ne_S" 5/3), 5("NU_HETB_ne_A" 5/3), 5("NU_HETB_mg_S" 5/3), 5("NU_HETB_mg_A" 5/3), 5("NU_HETB_si_S" 5/3), 5("NU_HETB_si_A" 5/3), 5("NU_HETB_s_S" 5/3), 5("NU_HETB_s_A" 5/3), 1("NU_HETB_wpen_nemgsis_S" 6/3), 1("NU_HETB_wpen_nemgsis_A" 6/3), 7("NU_HETP_nemgsis_E" 7/3), 11("NU_HETC_ar_S" 5/3), 11("NU_HETC_ar_A" 5/3), 11("NU_HETC_ca_S" 5/3), 11("NU_HETC_ca_A" 5/3), 11("NU_HETC_ni_S" 5/3), 11("NU_HETC_ni_A" 5/3), 5("NU_HETB_ar_S" 5/3), 5("NU_HETB_ar_A" 5/3), 5("NU_HETB_ca_S" 5/3), 5("NU_HETB_ca_A" 5/3), 5("NU_HETB_ni_S" 5/3), 5("NU_HETB_ni_A" 5/3), 1("NU_HETB_wpen_arcafeni_S" 6/3), 1("NU_HETB_wpen_arcafeni_A" 6/3), 2("NU_HETG_p_E" 4/3)
# Burst2n
0x0369/0x0, 6("B2_HETB_p_S" 0/3), 6("B2_HETB_p_A" 0/3), 62("B2_HETC_p_S" 0/3), 62("B2_HETC_p_A" 0/3), 2("B2_HETP_p_S" 0/3), 2("B2_HETP_p_A" 0/3), 3("B2_HETP_p_E" 0/3), 4("B2_HETB_he3_S" 1/3), 4("B2_HETB_he3_A" 1/3), 6("B2_HETB_he4_S" 1/3), 6("B2_HETB_he4_A" 1/3), 5("B2_HETC_he3_S" 1/3), 5("B2_HETC_he3_A" 1/3), 11("B2_HETC_he4_S" 1/3), 11("B2_HETC_he4_A" 1/3), 4("B2_HETB_he_S" 0/3), 4("B2_HETB_he_A" 0/3), 2("B2_HETP_he_S" 1/3), 2("B2_HETP_he_A" 1/3), 3("B2_HETP_he_E" 1/3), 7("B2_HETG_p_E" 1/3)
# HET/EPT1 FM1, version 10, rev 0
# env = {FAR}
# version/dps: 10/0
# apid/flags, n("section"sum enc/fmt)
# apid: 0x0300 + Tag
# flags: /-separated flags: 0..3 or 'h' or 'r'
# n: dps_items in section
# section: section name; may not contain whitespace
# sum, enc: cadence
# fmt: 0..3: float16, log2, uint24, encoded
# version: 0000
# S20data
0x0320/0x0, 4("S20_e_S" 0/1), 4("S20_e_A" 0/1), 1("S20_p_S" 0/1), 1("S20_p_A" 0/1)
# Low Latency
0x0331/0x0/0x2, 8("LL_EPT_e_S" 3/1), 8("LL_EPT_e_A" 3/1), 18("LL_EPT_i_S" 3/1), 18("LL_EPT_i_A" 3/1), 1("LL_EPT_T_e_S" 1/3), 1("LL_EPT_T_e_A" 1/3), 2("LL_EPT_T_i_S" 1/3), 2("LL_EPT_T_i_A" 1/3), 2("LL_HETB_p_S" 3/1), 2("LL_HETB_p_A" 3/1), 10("LL_HETC_p_S" 3/1), 10("LL_HETC_p_A" 3/1), 2("LL_HETP_p_S" 3/1), 2("LL_HETP_p_A" 3/1), 2("LL_HETP_p_E" 3/1), 1("LL_HETB_e_S" 3/1), 1("LL_HETB_e_A" 3/1), 3("LL_HETC_e_S" 3/1), 3("LL_HETC_e_A" 3/1), 2("LL_HETB_he3_S" 5/1), 2("LL_HETB_he3_A" 5/1), 2("LL_HETB_he4_S" 5/1), 2("LL_HETB_he4_A" 5/1), 4("LL_HETC_he3_S" 5/1), 4("LL_HETC_he3_A" 5/1), 8("LL_HETC_he4_S" 5/1), 8("LL_HETC_he4_A" 5/1), 4("LL_HETB_he_S" 5/1), 4("LL_HETB_he_A" 5/1), 2("LL_HETP_he_S" 5/1), 2("LL_HETP_he_A" 5/1), 2("LL_HETP_he_E" 5/1), 6("LL_HETB_cno_S" 6/1), 6("LL_HETB_cno_A" 6/1), 9("LL_HETC_cno_S" 6/1), 9("LL_HETC_cno_A" 6/1), 2("LL_HETP_cno_S" 7/1), 2("LL_HETP_cno_A" 7/1), 2("LL_HETP_cno_E" 7/1), 2("LL_HETB_fe_S" 6/1), 2("LL_HETB_fe_A" 6/1), 3("LL_HETC_fe_S" 7/1), 3("LL_HETC_fe_A" 7/1), 1("LL_HETP_fe_S" 7/1), 1("LL_HETP_fe_A" 7/1), 3("LL_HETC_T_p_S" 1/3), 3("LL_HETC_T_p_A" 1/3), 1("LL_HETC_T_e_S" 1/3), 1("LL_HETC_T_e_A" 1/3)
# Nominal
0x0351/0x1, 77("NO_EPT_mag_S" 1/3), 77("NO_EPT_mag_A" 1/3), 77("NO_EPT_foil_S" 1/3), 77("NO_EPT_foil_A" 1/3), 2("NO_EPTP_e_S" 3/3), 2("NO_EPTP_e_A" 3/3), 4("NO_EPTP_p_S" 3/3), 4("NO_EPTP_p_A" 3/3), 4("NO_EPTP_p_E" 3/3), 2("NO_EPTP_he3_S" 4/3), 2("NO_EPTP_he3_A" 4/3), 1("NO_EPTP_he3_E" 4/3), 2("NO_EPTP_he4_S" 4/3), 2("NO_EPTP_he4_A" 4/3), 1("NO_EPTP_he4_E" 4/3), 1("NO_EPTP_he_S" 4/3), 1("NO_EPTP_he_A" 4/3), 4("NO_EPTP_he_E" 4/3), 1("NO_HETP_bg_S" 6/3), 1("NO_HETP_bg_A" 6/3), 1("NO_HETB_bg_S" 6/3), 1("NO_HETB_bg_A" 6/3), 5("NO_HETB_p_S" 3/3), 5("NO_HETB_p_A" 3/3), 1("NO_HETB_tail_high_p_S" 3/3), 1("NO_HETB_tail_high_p_A" 3/3), 31("NO_HETC_p_S" 3/3), 31("NO_HETC_p_A" 3/3), 2("NO_HETP_p_S" 3/3), 2("NO_HETP_p_A" 3/3), 3("NO_HETP_p_E" 4/3), 1("NO_HETB_H_p_S" 1/3), 1("NO_HETB_H_p_A" 1/3), 3("NO_HETC_H_p_S" 1/3), 3("NO_HETC_H_p_A" 1/3), 1("NO_HETB_e_S" 1/3), 1("NO_HETB_e_A" 1/3), 3("NO_HETC_e_S" 1/3), 3("NO_HETC_e_A" 1/3), 1("NO_HETC_H_e_S" 4/3), 1("NO_HETC_H_e_A" 4/3), 4("NO_HETB_he3_S" 4/3), 4("NO_HETB_he3_A" 4/3), 4("NO_HETB_he4_S" 4/3), 4("NO_HETB_he4_A" 4/3), 5("NO_HETC_he3_S" 4/3), 5("NO_HETC_he3_A" 4/3), 11("NO_HETC_he4_S" 4/3), 11("NO_HETC_he4_A" 4/3), 6("NO_HETB_he_S" 3/3), 6("NO_HETB_he_A" 3/3), 2("NO_HETP_he_S" 5/3), 2("NO_HETP_he_A" 5/3), 4("NO_HETP_he_E" 5/3), 12("NO_HETC_c_S" 5/3), 12("NO_HETC_c_A" 5/3), 12("NO_HETC_n_S" 5/3), 12("NO_HETC_n_A" 5/3), 12("NO_HETC_o_S" 5/3), 12("NO_HETC_o_A" 5/3), 5("NO_HETB_c_S" 5/3), 5("NO_HETB_c_A" 5/3), 5("NO_HETB_n_S" 5/3), 5("NO_HETB_n_A" 5/3), 5("NO_HETB_o_S" 5/3), 5("NO_HETB_o_A" 5/3), 2("NO_HETP_cno_S" 6/3), 2("NO_HETP_cno_A" 6/3), 6("NO_HETP_cno_E" 6/3), 11("NO_HETC_fe_S" 6/3), 11("NO_HETC_fe_A" 6/3), 5("NO_HETB_fe_S" 6/3), 5("NO_HETB_fe_A" 6/3), 2("NO_HETP_fe_S" 6/3), 2("NO_HETP_fe_A" 6/3), 3("NO_HETP_fe_E" 6/3)
# Burst1n
0x0361/0x1, 48("B1_EPT_mag_S" 2/3), 48("B1_EPT_mag_A" 2/3), 2("B1_EPTP_he3_S" 1/3), 2("B1_EPTP_he3_A" 1/3), 1("B1_EPTP_he3_E" 1/3), 2("B1_EPTP_he4_S" 1/3), 2("B1_EPTP_he4_A" 1/3), 1("B1_EPTP_he4_E" 1/3)
# Unstable
0x0355/0x1, 1("NU_HETB_tail_low_p_S" 6/3), 1("NU_HETB_tail_low_p_A" 6/3), 2("NU_HETB_he34_S" 5/3), 2("NU_HETB_he34_A" 5/3), 5("NU_HETP_lbb_E" 6/3), 1("NU_HETB_cno_S" 6/3), 1("NU_HETB_cno_A" 6/3), 11("NU_HETC_ne_S" 6/3), 11("NU_HETC_ne_A" 6/3), 11("NU_HETC_mg_S" 6/3), 11("NU_HETC_mg_A" 6/3), 11("NU_HETC_si_S" 6/3), 11("NU_HETC_si_A" 6/3), 11("NU_HETC_s_S" 6/3), 11("NU_HETC_s_A" 6/3), 5("NU_HETB_ne_S" 6/3), 5("NU_HETB_ne_A" 6/3), 5("NU_HETB_mg_S" 6/3), 5("NU_HETB_mg_A" 6/3), 5("NU_HETB_si_S" 6/3), 5("NU_HETB_si_A" 6/3), 5("NU_HETB_s_S" 6/3), 5("NU_HETB_s_A" 6/3), 1("NU_HETB_wpen_nemgsis_S" 6/3), 1("NU_HETB_wpen_nemgsis_A" 6/3), 7("NU_HETP_nemgsis_E" 7/3), 11("NU_HETC_ar_S" 6/3), 11("NU_HETC_ar_A" 6/3), 11("NU_HETC_ca_S" 6/3), 11("NU_HETC_ca_A" 6/3), 11("NU_HETC_ni_S" 6/3), 11("NU_HETC_ni_A" 6/3), 5("NU_HETB_ar_S" 6/3), 5("NU_HETB_ar_A" 6/3), 5("NU_HETB_ca_S" 6/3), 5("NU_HETB_ca_A" 6/3), 5("NU_HETB_ni_S" 6/3), 5("NU_HETB_ni_A" 6/3), 1("NU_HETB_wpen_arcafeni_S" 6/3), 1("NU_HETB_wpen_arcafeni_A" 6/3), 2("NU_HETG_p_E" 5/3)
# Burst2n
0x0369/0x1, 6("B2_HETB_p_S" 0/3), 6("B2_HETB_p_A" 0/3), 62("B2_HETC_p_S" 0/3), 62("B2_HETC_p_A" 0/3), 2("B2_HETP_p_S" 0/3), 2("B2_HETP_p_A" 0/3), 3("B2_HETP_p_E" 0/3), 4("B2_HETB_he3_S" 1/3), 4("B2_HETB_he3_A" 1/3), 6("B2_HETB_he4_S" 1/3), 6("B2_HETB_he4_A" 1/3), 5("B2_HETC_he3_S" 1/3), 5("B2_HETC_he3_A" 1/3), 11("B2_HETC_he4_S" 1/3), 11("B2_HETC_he4_A" 1/3), 4("B2_HETB_he_S" 0/3), 4("B2_HETB_he_A" 0/3), 2("B2_HETP_he_S" 1/3), 2("B2_HETP_he_A" 1/3), 3("B2_HETP_he_E" 1/3), 1("B2_HETB_e_S" 0/3), 1("B2_HETB_e_A" 0/3), 3("B2_HETC_e_S" 0/3), 3("B2_HETC_e_A" 0/3), 7("B2_HETG_p_E" 1/3)

View file

@ -1,31 +0,0 @@
#<tag>:\n\t<ad> <us> <mod_phase> <mod_cadence> <header>\n...
0x48:
0x0148 6 1 600 0x0000007f
0x0548 9 3 600 0x10040090
0x0548 11 8 3600 0x080400c0
0x0548 12 68 3600 0x0c0400a0
0x0548 13 128 3600 0x100f00000
0x0548 15 188 3600 0x202c2000
0x0548 60 0 600 0x10040030
0x0548 85 0 600 0x10040000
0x0848 170 0 60 0x0000820c
0x0848 171 298 3600 0x000081e7
0x54:
0x0554 21 7 300 0x100a00000
0x0554 23 17 300 0x100a00100
0x0554 24 27 300 0x100a00200
0x0554 25 37 300 0x100a00300
0x0554 27 47 300 0x100a00400
0x0554 28 57 300 0x100a00500
0x0554 29 67 300 0x100a00600
0x0554 31 77 300 0x100a00700
0x0554 32 87 300 0x100a00800
0x0554 33 97 300 0x100a00900
0x0554 35 107 300 0x100a00a00
0x0554 36 117 300 0x100a00b00
0x0554 37 127 300 0x100a00c00
0x0554 39 137 300 0x100a00d00
0x0554 40 147 300 0x100a00e00
0x0554 41 157 300 0x100a00f00

File diff suppressed because it is too large Load diff

View file

@ -1,7 +0,0 @@
#! /usr/bin/python3
from ...hetept1.v0009.hetept_config_hetele_patch5 import patch2
def main():
patch2.main()

View file

@ -1,66 +0,0 @@
# HET/EPT2 FM2, version 10, rev 0
# env = {CLOSE}
# version/dps: 10/0
# apid/flags, n("section"sum enc/fmt)
# apid: 0x0300 + Tag
# flags: /-separated flags: 0..3 or 'h' or 'r'
# n: dps_items in section
# section: section name; may not contain whitespace
# sum, enc: cadence
# fmt: 0..3: float16, log2, uint24, encoded
# version: 0010
# S20data
0x0320/0x0, 4("S20_e_N" 0/1), 4("S20_e_D" 0/1), 1("S20_p_N" 0/1), 1("S20_p_D" 0/1)
# Low Latency
0x0332/0x0/0x2, 8("LL_EPT_e_N" 3/1), 8("LL_EPT_e_D" 3/1), 18("LL_EPT_i_N" 3/1), 18("LL_EPT_i_D" 3/1), 1("LL_EPT_T_e_N" 1/3), 1("LL_EPT_T_e_D" 1/3), 2("LL_EPT_T_i_N" 1/3), 2("LL_EPT_T_i_D" 1/3), 2("LL_HETB_p_N" 3/1), 2("LL_HETB_p_D" 3/1), 10("LL_HETC_p_N" 3/1), 10("LL_HETC_p_D" 3/1), 2("LL_HETP_p_N" 3/1), 2("LL_HETP_p_D" 3/1), 2("LL_HETP_p_P" 3/1), 1("LL_HETB_e_N" 3/1), 1("LL_HETB_e_D" 3/1), 3("LL_HETC_e_N" 3/1), 3("LL_HETC_e_D" 3/1), 2("LL_HETB_he3_N" 5/1), 2("LL_HETB_he3_D" 5/1), 2("LL_HETB_he4_N" 5/1), 2("LL_HETB_he4_D" 5/1), 4("LL_HETC_he3_N" 5/1), 4("LL_HETC_he3_D" 5/1), 8("LL_HETC_he4_N" 5/1), 8("LL_HETC_he4_D" 5/1), 4("LL_HETB_he_N" 5/1), 4("LL_HETB_he_D" 5/1), 2("LL_HETP_he_N" 5/1), 2("LL_HETP_he_D" 5/1), 2("LL_HETP_he_P" 5/1), 6("LL_HETB_cno_N" 6/1), 6("LL_HETB_cno_D" 6/1), 9("LL_HETC_cno_N" 6/1), 9("LL_HETC_cno_D" 6/1), 2("LL_HETP_cno_N" 7/1), 2("LL_HETP_cno_D" 7/1), 2("LL_HETP_cno_P" 7/1), 2("LL_HETB_fe_N" 6/1), 2("LL_HETB_fe_D" 6/1), 3("LL_HETC_fe_N" 7/1), 3("LL_HETC_fe_D" 7/1), 1("LL_HETP_fe_N" 7/1), 1("LL_HETP_fe_D" 7/1), 3("LL_HETC_T_p_N" 1/3), 3("LL_HETC_T_p_D" 1/3), 1("LL_HETC_T_e_N" 1/3), 1("LL_HETC_T_e_D" 1/3)
# Nominal
0x0352/0x0, 77("NO_EPT_mag_N" 0/3), 77("NO_EPT_mag_D" 0/3), 77("NO_EPT_foil_N" 0/3), 77("NO_EPT_foil_D" 0/3), 2("NO_EPTP_e_N" 1/3), 2("NO_EPTP_e_D" 1/3), 4("NO_EPTP_p_N" 1/3), 4("NO_EPTP_p_D" 1/3), 4("NO_EPTP_p_P" 1/3), 2("NO_EPTP_he3_N" 3/3), 2("NO_EPTP_he3_D" 3/3), 1("NO_EPTP_he3_P" 3/3), 2("NO_EPTP_he4_N" 3/3), 2("NO_EPTP_he4_D" 3/3), 1("NO_EPTP_he4_P" 3/3), 1("NO_EPTP_he_N" 3/3), 1("NO_EPTP_he_D" 3/3), 4("NO_EPTP_he_P" 3/3), 1("NO_HETP_bg_N" 6/3), 1("NO_HETP_bg_D" 6/3), 1("NO_HETB_bg_N" 6/3), 1("NO_HETB_bg_D" 6/3), 5("NO_HETB_p_N" 1/3), 5("NO_HETB_p_D" 1/3), 1("NO_HETB_tail_high_p_N" 1/3), 1("NO_HETB_tail_high_p_D" 1/3), 31("NO_HETC_p_N" 1/3), 31("NO_HETC_p_D" 1/3), 2("NO_HETP_p_N" 1/3), 2("NO_HETP_p_D" 1/3), 3("NO_HETP_p_P" 3/3), 1("NO_HETB_H_p_N" 0/3), 1("NO_HETB_H_p_D" 0/3), 3("NO_HETC_H_p_N" 0/3), 3("NO_HETC_H_p_D" 0/3), 1("NO_HETB_e_N" 0/3), 1("NO_HETB_e_D" 0/3), 3("NO_HETC_e_N" 0/3), 3("NO_HETC_e_D" 0/3), 1("NO_HETC_H_e_N" 3/3), 1("NO_HETC_H_e_D" 3/3), 4("NO_HETB_he3_N" 3/3), 4("NO_HETB_he3_D" 3/3), 4("NO_HETB_he4_N" 3/3), 4("NO_HETB_he4_D" 3/3), 5("NO_HETC_he3_N" 3/3), 5("NO_HETC_he3_D" 3/3), 11("NO_HETC_he4_N" 3/3), 11("NO_HETC_he4_D" 3/3), 6("NO_HETB_he_N" 1/3), 6("NO_HETB_he_D" 1/3), 2("NO_HETP_he_N" 4/3), 2("NO_HETP_he_D" 4/3), 4("NO_HETP_he_P" 4/3), 12("NO_HETC_c_N" 4/3), 12("NO_HETC_c_D" 4/3), 12("NO_HETC_n_N" 4/3), 12("NO_HETC_n_D" 4/3), 12("NO_HETC_o_N" 4/3), 12("NO_HETC_o_D" 4/3), 5("NO_HETB_c_N" 4/3), 5("NO_HETB_c_D" 4/3), 5("NO_HETB_n_N" 4/3), 5("NO_HETB_n_D" 4/3), 5("NO_HETB_o_N" 4/3), 5("NO_HETB_o_D" 4/3), 2("NO_HETP_cno_N" 6/3), 2("NO_HETP_cno_D" 6/3), 6("NO_HETP_cno_P" 6/3), 11("NO_HETC_fe_N" 5/3), 11("NO_HETC_fe_D" 5/3), 5("NO_HETB_fe_N" 5/3), 5("NO_HETB_fe_D" 5/3), 2("NO_HETP_fe_N" 6/3), 2("NO_HETP_fe_D" 6/3), 3("NO_HETP_fe_P" 6/3)
# Burst1n
0x0362/0x0, 48("B1_EPT_mag_N" 2/3), 48("B1_EPT_mag_D" 2/3), 2("B1_EPTP_he3_N" 1/3), 2("B1_EPTP_he3_D" 1/3), 1("B1_EPTP_he3_P" 1/3), 2("B1_EPTP_he4_N" 1/3), 2("B1_EPTP_he4_D" 1/3), 1("B1_EPTP_he4_P" 1/3)
# Unstable
0x0356/0x0, 1("NU_HETB_tail_low_p_N" 5/3), 1("NU_HETB_tail_low_p_D" 5/3), 2("NU_HETB_he34_N" 4/3), 2("NU_HETB_he34_D" 4/3), 5("NU_HETP_lbb_P" 5/3), 1("NU_HETB_cno_N" 5/3), 1("NU_HETB_cno_D" 5/3), 11("NU_HETC_ne_N" 5/3), 11("NU_HETC_ne_D" 5/3), 11("NU_HETC_mg_N" 5/3), 11("NU_HETC_mg_D" 5/3), 11("NU_HETC_si_N" 5/3), 11("NU_HETC_si_D" 5/3), 11("NU_HETC_s_N" 5/3), 11("NU_HETC_s_D" 5/3), 5("NU_HETB_ne_N" 5/3), 5("NU_HETB_ne_D" 5/3), 5("NU_HETB_mg_N" 5/3), 5("NU_HETB_mg_D" 5/3), 5("NU_HETB_si_N" 5/3), 5("NU_HETB_si_D" 5/3), 5("NU_HETB_s_N" 5/3), 5("NU_HETB_s_D" 5/3), 1("NU_HETB_wpen_nemgsis_N" 6/3), 1("NU_HETB_wpen_nemgsis_D" 6/3), 7("NU_HETP_nemgsis_P" 7/3), 11("NU_HETC_ar_N" 5/3), 11("NU_HETC_ar_D" 5/3), 11("NU_HETC_ca_N" 5/3), 11("NU_HETC_ca_D" 5/3), 11("NU_HETC_ni_N" 5/3), 11("NU_HETC_ni_D" 5/3), 5("NU_HETB_ar_N" 5/3), 5("NU_HETB_ar_D" 5/3), 5("NU_HETB_ca_N" 5/3), 5("NU_HETB_ca_D" 5/3), 5("NU_HETB_ni_N" 5/3), 5("NU_HETB_ni_D" 5/3), 1("NU_HETB_wpen_arcafeni_N" 6/3), 1("NU_HETB_wpen_arcafeni_D" 6/3), 2("NU_HETG_p_P" 4/3)
# Burst2n
0x036a/0x0, 6("B2_HETB_p_N" 0/3), 6("B2_HETB_p_D" 0/3), 62("B2_HETC_p_N" 0/3), 62("B2_HETC_p_D" 0/3), 2("B2_HETP_p_N" 0/3), 2("B2_HETP_p_D" 0/3), 3("B2_HETP_p_P" 0/3), 4("B2_HETB_he3_N" 1/3), 4("B2_HETB_he3_D" 1/3), 6("B2_HETB_he4_N" 1/3), 6("B2_HETB_he4_D" 1/3), 5("B2_HETC_he3_N" 1/3), 5("B2_HETC_he3_D" 1/3), 11("B2_HETC_he4_N" 1/3), 11("B2_HETC_he4_D" 1/3), 4("B2_HETB_he_N" 0/3), 4("B2_HETB_he_D" 0/3), 2("B2_HETP_he_N" 1/3), 2("B2_HETP_he_D" 1/3), 3("B2_HETP_he_P" 1/3), 7("B2_HETG_p_P" 1/3)
# HET/EPT2 FM2, version 10, rev 0
# env = {FAR}
# version/dps: 10/0
# apid/flags, n("section"sum enc/fmt)
# apid: 0x0300 + Tag
# flags: /-separated flags: 0..3 or 'h' or 'r'
# n: dps_items in section
# section: section name; may not contain whitespace
# sum, enc: cadence
# fmt: 0..3: float16, log2, uint24, encoded
# version: 0000
# S20data
0x0320/0x0, 4("S20_e_N" 0/1), 4("S20_e_D" 0/1), 1("S20_p_N" 0/1), 1("S20_p_D" 0/1)
# Low Latency
0x0332/0x0/0x2, 8("LL_EPT_e_N" 3/1), 8("LL_EPT_e_D" 3/1), 18("LL_EPT_i_N" 3/1), 18("LL_EPT_i_D" 3/1), 1("LL_EPT_T_e_N" 1/3), 1("LL_EPT_T_e_D" 1/3), 2("LL_EPT_T_i_N" 1/3), 2("LL_EPT_T_i_D" 1/3), 2("LL_HETB_p_N" 3/1), 2("LL_HETB_p_D" 3/1), 10("LL_HETC_p_N" 3/1), 10("LL_HETC_p_D" 3/1), 2("LL_HETP_p_N" 3/1), 2("LL_HETP_p_D" 3/1), 2("LL_HETP_p_P" 3/1), 1("LL_HETB_e_N" 3/1), 1("LL_HETB_e_D" 3/1), 3("LL_HETC_e_N" 3/1), 3("LL_HETC_e_D" 3/1), 2("LL_HETB_he3_N" 5/1), 2("LL_HETB_he3_D" 5/1), 2("LL_HETB_he4_N" 5/1), 2("LL_HETB_he4_D" 5/1), 4("LL_HETC_he3_N" 5/1), 4("LL_HETC_he3_D" 5/1), 8("LL_HETC_he4_N" 5/1), 8("LL_HETC_he4_D" 5/1), 4("LL_HETB_he_N" 5/1), 4("LL_HETB_he_D" 5/1), 2("LL_HETP_he_N" 5/1), 2("LL_HETP_he_D" 5/1), 2("LL_HETP_he_P" 5/1), 6("LL_HETB_cno_N" 6/1), 6("LL_HETB_cno_D" 6/1), 9("LL_HETC_cno_N" 6/1), 9("LL_HETC_cno_D" 6/1), 2("LL_HETP_cno_N" 7/1), 2("LL_HETP_cno_D" 7/1), 2("LL_HETP_cno_P" 7/1), 2("LL_HETB_fe_N" 6/1), 2("LL_HETB_fe_D" 6/1), 3("LL_HETC_fe_N" 7/1), 3("LL_HETC_fe_D" 7/1), 1("LL_HETP_fe_N" 7/1), 1("LL_HETP_fe_D" 7/1), 3("LL_HETC_T_p_N" 1/3), 3("LL_HETC_T_p_D" 1/3), 1("LL_HETC_T_e_N" 1/3), 1("LL_HETC_T_e_D" 1/3)
# Nominal
0x0352/0x1, 77("NO_EPT_mag_N" 1/3), 77("NO_EPT_mag_D" 1/3), 77("NO_EPT_foil_N" 1/3), 77("NO_EPT_foil_D" 1/3), 2("NO_EPTP_e_N" 3/3), 2("NO_EPTP_e_D" 3/3), 4("NO_EPTP_p_N" 3/3), 4("NO_EPTP_p_D" 3/3), 4("NO_EPTP_p_P" 3/3), 2("NO_EPTP_he3_N" 4/3), 2("NO_EPTP_he3_D" 4/3), 1("NO_EPTP_he3_P" 4/3), 2("NO_EPTP_he4_N" 4/3), 2("NO_EPTP_he4_D" 4/3), 1("NO_EPTP_he4_P" 4/3), 1("NO_EPTP_he_N" 4/3), 1("NO_EPTP_he_D" 4/3), 4("NO_EPTP_he_P" 4/3), 1("NO_HETP_bg_N" 6/3), 1("NO_HETP_bg_D" 6/3), 1("NO_HETB_bg_N" 6/3), 1("NO_HETB_bg_D" 6/3), 5("NO_HETB_p_N" 3/3), 5("NO_HETB_p_D" 3/3), 1("NO_HETB_tail_high_p_N" 3/3), 1("NO_HETB_tail_high_p_D" 3/3), 31("NO_HETC_p_N" 3/3), 31("NO_HETC_p_D" 3/3), 2("NO_HETP_p_N" 3/3), 2("NO_HETP_p_D" 3/3), 3("NO_HETP_p_P" 4/3), 1("NO_HETB_H_p_N" 1/3), 1("NO_HETB_H_p_D" 1/3), 3("NO_HETC_H_p_N" 1/3), 3("NO_HETC_H_p_D" 1/3), 1("NO_HETB_e_N" 1/3), 1("NO_HETB_e_D" 1/3), 3("NO_HETC_e_N" 1/3), 3("NO_HETC_e_D" 1/3), 1("NO_HETC_H_e_N" 4/3), 1("NO_HETC_H_e_D" 4/3), 4("NO_HETB_he3_N" 4/3), 4("NO_HETB_he3_D" 4/3), 4("NO_HETB_he4_N" 4/3), 4("NO_HETB_he4_D" 4/3), 5("NO_HETC_he3_N" 4/3), 5("NO_HETC_he3_D" 4/3), 11("NO_HETC_he4_N" 4/3), 11("NO_HETC_he4_D" 4/3), 6("NO_HETB_he_N" 3/3), 6("NO_HETB_he_D" 3/3), 2("NO_HETP_he_N" 5/3), 2("NO_HETP_he_D" 5/3), 4("NO_HETP_he_P" 5/3), 12("NO_HETC_c_N" 5/3), 12("NO_HETC_c_D" 5/3), 12("NO_HETC_n_N" 5/3), 12("NO_HETC_n_D" 5/3), 12("NO_HETC_o_N" 5/3), 12("NO_HETC_o_D" 5/3), 5("NO_HETB_c_N" 5/3), 5("NO_HETB_c_D" 5/3), 5("NO_HETB_n_N" 5/3), 5("NO_HETB_n_D" 5/3), 5("NO_HETB_o_N" 5/3), 5("NO_HETB_o_D" 5/3), 2("NO_HETP_cno_N" 6/3), 2("NO_HETP_cno_D" 6/3), 6("NO_HETP_cno_P" 6/3), 11("NO_HETC_fe_N" 6/3), 11("NO_HETC_fe_D" 6/3), 5("NO_HETB_fe_N" 6/3), 5("NO_HETB_fe_D" 6/3), 2("NO_HETP_fe_N" 6/3), 2("NO_HETP_fe_D" 6/3), 3("NO_HETP_fe_P" 6/3)
# Burst1n
0x0362/0x1, 48("B1_EPT_mag_N" 2/3), 48("B1_EPT_mag_D" 2/3), 2("B1_EPTP_he3_N" 1/3), 2("B1_EPTP_he3_D" 1/3), 1("B1_EPTP_he3_P" 1/3), 2("B1_EPTP_he4_N" 1/3), 2("B1_EPTP_he4_D" 1/3), 1("B1_EPTP_he4_P" 1/3)
# Unstable
0x0356/0x1, 1("NU_HETB_tail_low_p_N" 6/3), 1("NU_HETB_tail_low_p_D" 6/3), 2("NU_HETB_he34_N" 5/3), 2("NU_HETB_he34_D" 5/3), 5("NU_HETP_lbb_P" 6/3), 1("NU_HETB_cno_N" 6/3), 1("NU_HETB_cno_D" 6/3), 11("NU_HETC_ne_N" 6/3), 11("NU_HETC_ne_D" 6/3), 11("NU_HETC_mg_N" 6/3), 11("NU_HETC_mg_D" 6/3), 11("NU_HETC_si_N" 6/3), 11("NU_HETC_si_D" 6/3), 11("NU_HETC_s_N" 6/3), 11("NU_HETC_s_D" 6/3), 5("NU_HETB_ne_N" 6/3), 5("NU_HETB_ne_D" 6/3), 5("NU_HETB_mg_N" 6/3), 5("NU_HETB_mg_D" 6/3), 5("NU_HETB_si_N" 6/3), 5("NU_HETB_si_D" 6/3), 5("NU_HETB_s_N" 6/3), 5("NU_HETB_s_D" 6/3), 1("NU_HETB_wpen_nemgsis_N" 6/3), 1("NU_HETB_wpen_nemgsis_D" 6/3), 7("NU_HETP_nemgsis_P" 7/3), 11("NU_HETC_ar_N" 6/3), 11("NU_HETC_ar_D" 6/3), 11("NU_HETC_ca_N" 6/3), 11("NU_HETC_ca_D" 6/3), 11("NU_HETC_ni_N" 6/3), 11("NU_HETC_ni_D" 6/3), 5("NU_HETB_ar_N" 6/3), 5("NU_HETB_ar_D" 6/3), 5("NU_HETB_ca_N" 6/3), 5("NU_HETB_ca_D" 6/3), 5("NU_HETB_ni_N" 6/3), 5("NU_HETB_ni_D" 6/3), 1("NU_HETB_wpen_arcafeni_N" 6/3), 1("NU_HETB_wpen_arcafeni_D" 6/3), 2("NU_HETG_p_P" 5/3)
# Burst2n
0x036a/0x1, 6("B2_HETB_p_N" 0/3), 6("B2_HETB_p_D" 0/3), 62("B2_HETC_p_N" 0/3), 62("B2_HETC_p_D" 0/3), 2("B2_HETP_p_N" 0/3), 2("B2_HETP_p_D" 0/3), 3("B2_HETP_p_P" 0/3), 4("B2_HETB_he3_N" 1/3), 4("B2_HETB_he3_D" 1/3), 6("B2_HETB_he4_N" 1/3), 6("B2_HETB_he4_D" 1/3), 5("B2_HETC_he3_N" 1/3), 5("B2_HETC_he3_D" 1/3), 11("B2_HETC_he4_N" 1/3), 11("B2_HETC_he4_D" 1/3), 4("B2_HETB_he_N" 0/3), 4("B2_HETB_he_D" 0/3), 2("B2_HETP_he_N" 1/3), 2("B2_HETP_he_D" 1/3), 3("B2_HETP_he_P" 1/3), 1("B2_HETB_e_N" 0/3), 1("B2_HETB_e_D" 0/3), 3("B2_HETC_e_N" 0/3), 3("B2_HETC_e_D" 0/3), 7("B2_HETG_p_P" 1/3)

View file

@ -1,31 +0,0 @@
#<tag>:\n\t<ad> <us> <mod_phase> <mod_cadence> <header>\n...
0x48:
0x0148 6 1 600 0x0000007f
0x0548 9 3 600 0x10040090
0x0548 11 8 3600 0x080400c0
0x0548 12 68 3600 0x0c0400a0
0x0548 13 128 3600 0x100f00000
0x0548 15 188 3600 0x202c2000
0x0548 60 0 600 0x10040030
0x0548 85 0 600 0x10040000
0x0848 170 0 60 0x0000820c
0x0848 171 298 3600 0x000081e7
0x54:
0x0554 21 7 300 0x100a00000
0x0554 23 17 300 0x100a00100
0x0554 24 27 300 0x100a00200
0x0554 25 37 300 0x100a00300
0x0554 27 47 300 0x100a00400
0x0554 28 57 300 0x100a00500
0x0554 29 67 300 0x100a00600
0x0554 31 77 300 0x100a00700
0x0554 32 87 300 0x100a00800
0x0554 33 97 300 0x100a00900
0x0554 35 107 300 0x100a00a00
0x0554 36 117 300 0x100a00b00
0x0554 37 127 300 0x100a00c00
0x0554 39 137 300 0x100a00d00
0x0554 40 147 300 0x100a00e00
0x0554 41 157 300 0x100a00f00

File diff suppressed because it is too large Load diff

View file

@ -1,46 +0,0 @@
# b'STEP FS, version 5, rev 0\n'# env = {FAR}:
# apid/flags, n("section"sum enc/fmt)
# apid: 0x0300 + Tag
# flags: /-separated flags: 0..3 or 'h' or 'r'
# n: dps_items in section
# section: section name; may not contain whitespace
# sum, enc: cadence
# fmt: 0..3: float16, log2, uint24, encoded
# version: 0006
# Low Latency
0x0333/0x0/0x2, 24("LL_STEP_energy_res_int" 4), 24("LL_STEP_energy_res_mag" 4), 24("LL_STEP_energy_res_bkgnd_int" 4), 24("LL_STEP_energy_res_bkgnd_mag" 4), 4("LL_STEP_time_res_int" 0/3), 4("LL_STEP_time_res_mag" 0/3), 4("LL_STEP_time_res_bkgnd_int" 0/3), 4("LL_STEP_time_res_bkgnd_mag" 0/3)
# Auxiliary
0x0337/0x0, 1("AUX_STEP_time_res_int" 0/1), 1("AUX_STEP_time_res_mag" 0/1), 1("AUX_STEP_time_res_bkgnd_int" 0/1), 1("AUX_STEP_time_res_bkgnd_mag" 0/1), 32("AUX_STEP_basic_int" 2/3), 32("AUX_STEP_basic_mag" 2/3), 32("AUX_STEP_basic_bkgnd_int" 2/3), 32("AUX_STEP_basic_bkgnd_mag" 2/3)
# Burst1n
0x0363/0x0, 256("B1_STEP_basic_int" 0/3), 256("B1_STEP_basic_mag" 0/3), 48("B1_STEP_eres_int" 0/3), 48("B1_STEP_eres_mag" 0/3)
# Nominal
0x0353/0x0, 128("NO_STEP_basic_int" 4/3), 128("NO_STEP_basic_mag" 4/3), 12("NO_STEP_tres_rows_int" 1/3), 12("NO_STEP_tres_rows_mag" 1/3), 20("NO_STEP_tres_cols_int" 1/3), 20("NO_STEP_tres_cols_mag" 1/3), 4("NO_STEP_tres_bkgnd_int" 1/3), 4("NO_STEP_tres_bkgnd_mag" 1/3), 48("NO_STEP_eres_int" 4/3), 48("NO_STEP_eres_mag" 4/3), 15("NO_STEP_multi_int" 4/3), 15("NO_STEP_multi_mag" 4/3)
# b'STEP FS, version 5, rev 0\n'# env = {CLOSE}:
# apid/flags, n("section"sum enc/fmt)
# apid: 0x0300 + Tag
# flags: /-separated flags: 0..3 or 'h' or 'r'
# n: dps_items in section
# section: section name; may not contain whitespace
# sum, enc: cadence
# fmt: 0..3: float16, log2, uint24, encoded
# version: 0000
# Low Latency
0x0333/0x0/0x2, 24("LL_STEP_energy_res_int" 4), 24("LL_STEP_energy_res_mag" 4), 24("LL_STEP_energy_res_bkgnd_int" 4), 24("LL_STEP_energy_res_bkgnd_mag" 4), 4("LL_STEP_time_res_int" 0/3), 4("LL_STEP_time_res_mag" 0/3), 4("LL_STEP_time_res_bkgnd_int" 0/3), 4("LL_STEP_time_res_bkgnd_mag" 0/3)
# Auxiliary
0x0337/0x1, 1("AUX_STEP_time_res_int" 0/1), 1("AUX_STEP_time_res_mag" 0/1), 1("AUX_STEP_time_res_bkgnd_int" 0/1), 1("AUX_STEP_time_res_bkgnd_mag" 0/1), 32("AUX_STEP_basic_int" 2/3), 32("AUX_STEP_basic_mag" 2/3), 32("AUX_STEP_basic_bkgnd_int" 2/3), 32("AUX_STEP_basic_bkgnd_mag" 2/3)
# Burst1n
0x0363/0x1, 256("B1_STEP_basic_int" 0/3), 256("B1_STEP_basic_mag" 0/3), 48("B1_STEP_eres_int" 0/3), 48("B1_STEP_eres_mag" 0/3)
# Nominal
0x0353/0x1, 128("NO_STEP_basic_int" 2/3), 128("NO_STEP_basic_mag" 2/3), 12("NO_STEP_tres_rows_int" 0/3), 12("NO_STEP_tres_rows_mag" 0/3), 20("NO_STEP_tres_cols_int" 0/3), 20("NO_STEP_tres_cols_mag" 0/3), 4("NO_STEP_tres_bkgnd_int" 0/3), 4("NO_STEP_tres_bkgnd_mag" 0/3), 48("NO_STEP_eres_int" 2/3), 48("NO_STEP_eres_mag" 2/3), 15("NO_STEP_multi_int" 1/3), 15("NO_STEP_multi_mag" 1/3)

View file

@ -1,37 +0,0 @@
#! /usr/bin/python3
import solo.solomsgclass
import sys
msg = solo.solomsgclass.msg_print(sys.stdout)
def emit(): pass
format="print"
if len(sys.argv)>1:
format=sys.argv[1]
if format=="hex":
msg = solo.solomsgclass.msg_hexdump(sys.stdout)
if format=="xml":
import solo.cdpu.telecom
msg = solo.cdpu.telecom.msg_telecommands()
def emit():
print("\n".join([x.xml() for x in msg.tc(unit='STEP')]))
solomsg=solo.solomsgclass.solomsg(msg)
import solo.step.config.fs
from solo.step.config.fs import table as C
C.scratch+=2
C.make_scratch()(msg)
C.ppss.find_flags("ALLACQ")[0].msg = solo.step.config.fs.step_base_config.step_ppss.step_config_all_acq(acq=(6,5))[0]
C.ppss.find_flags("ALLACQ")[0](msg)
ix1_thr = C.nominal.ppss.ix1_thr
ix2_thr = C.nominal.ppss.ix2_thr
nconf = C.CONFIG(unit=C.unit, model=C.model, temperature=107.3, env=C.nominal.env, ix1_thr=ix1_thr, ix2_thr=ix2_thr)
diff = nconf.diff(C.nominal)
diff.l3.load(solomsg.l3_code)
islot = C.ppss.arm_insertion_slot(msg, flag="SPARE_HK")
solo.solomsgclass.solomsg(islot).read_reg(0xff, tag=0x3c)
emit()

View file

@ -1,5 +0,0 @@
msg(0x000f, 3, 0x0000094200070002)
msg(0x265e, 3, 0x000582010000c000)
msg(0x265f, 3, 0x5d00a20000000000)
msg(0x2659, 1, 0x00000000000000ff)
msg(0x2658, 3, 0x0003e8010000413c)

View file

@ -1,27 +0,0 @@
#! /usr/bin/python3
from solo.patch import patch
class step72(patch):
def assemble(self, **aa):
from solo.step.config.fs import table, make, step_base_config
self.table = table
if self.config is None:
self.config = make()
self.scratch(subversion=2)
self.allacq = self.config.ppss.find_flags("ALLACQ")[0]
self.allacq.msg = step_base_config.step_ppss.step_config_all_acq(acq=(1,5))[0]
def send(self, msg):
self.send_scratch(msg)
self.allacq(msg)
self.send_ping(msg)
p72 = step72()
if __name__=="__main__":
p72.main()

View file

@ -1,6 +0,0 @@
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">0</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">5</parameter>
<parameter name="Messages" id="PID00075">c00f0000094200070002e65e000582010000c000e65f5d00a20000000000665900ffe6580003e8010000413c</parameter>
</TC>

View file

@ -1,49 +0,0 @@
msg(0x000f, 3, 0x0000094200070003)
msg(0x265e, 3, 0x000582010000c000)
msg(0x265f, 3, 0x5300ac0000000000)
msg(0x2407, 3, 0x06699a0721a7790e)
msg(0x2408, 3, 0x8669de07a19a4210)
msg(0x240a, 3, 0x86697907a1a40b14)
msg(0x240c, 3, 0x8669c807a1b8a018)
msg(0x240f, 3, 0x1a00040606699207)
msg(0x2410, 3, 0x21a5721f86697e07)
msg(0x2411, 3, 0xa1aaf9219a000506)
msg(0x2412, 3, 0x0800002286698d07)
msg(0x2413, 3, 0xa1a9f2259a000606)
msg(0x2414, 3, 0x0800002686698007)
msg(0x2415, 3, 0xa199e9299a000706)
msg(0x2418, 3, 0x1a00080606697807)
msg(0x2419, 3, 0x21a2d2318669b007)
msg(0x241a, 3, 0xa1be13339a000906)
msg(0x241b, 3, 0x0800003486699707)
msg(0x241c, 3, 0xa1b6f4379a000a06)
msg(0x241d, 3, 0x080000388669a707)
msg(0x241e, 3, 0xa1987a3b9a000b06)
msg(0x2421, 3, 0x0669af0721a6c042)
msg(0x2422, 3, 0x86696307a1904c44)
msg(0x2424, 3, 0x86697b07a1a5c048)
msg(0x2426, 3, 0x8669d207a1b7ae4c)
msg(0x2487, 3, 0x0669ba07219d0d0e)
msg(0x2488, 3, 0x8669aa07a1a47e10)
msg(0x248a, 3, 0x8669f107a1abdb14)
msg(0x248c, 3, 0x8669d707a1c33118)
msg(0x248f, 3, 0x1a0004060669d607)
msg(0x2490, 3, 0x21b5161f8669a907)
msg(0x2491, 3, 0xa1bcbf219a000506)
msg(0x2492, 3, 0x080000228669e507)
msg(0x2493, 3, 0xa1b025259a000606)
msg(0x2494, 3, 0x080000268669bb07)
msg(0x2495, 3, 0xa1b95c299a000706)
msg(0x2498, 3, 0x1a0008060669db07)
msg(0x2499, 3, 0x219d5e318669ac07)
msg(0x249a, 3, 0xa1b585339a000906)
msg(0x249b, 3, 0x080000348669de07)
msg(0x249c, 3, 0xa1a2b0379a000a06)
msg(0x249d, 3, 0x080000388669c707)
msg(0x249e, 3, 0xa1af483b9a000b06)
msg(0x24a1, 3, 0x0669b20721a5c342)
msg(0x24a2, 3, 0x8669d707a1b39c44)
msg(0x24a4, 3, 0x8669eb07a1b45b48)
msg(0x24a6, 3, 0x8669cc07a1a4294c)
msg(0x2659, 1, 0x00000000000000ff)
msg(0x2658, 3, 0x0003e8010000413c)

View file

@ -1,37 +0,0 @@
#! /usr/bin/python3
from solo.patch import patch
class step73(patch):
def assemble(self, **aa):
from solo.step.config.fs import table, make, step_base_config
self.table = table
if self.config is None:
self.config = make()
self.scratch(subversion=3)
self.allacq = self.config.ppss.find_flags("ALLACQ")[0]
self.allacq.msg = step_base_config.step_ppss.step_config_all_acq(acq=(6,5))[0]
C = self.config
ix1_thr = C.nominal.ppss.ix1_thr
ix2_thr = C.nominal.ppss.ix2_thr
self.new_conf = C.CONFIG(
unit=C.unit, model=C.model,
temperature=107.3, env=C.nominal.env,
ix1_thr=ix1_thr, ix2_thr=ix2_thr )
self.diff = self.new_conf.diff(C.nominal)
def send(self, msg):
self.send_scratch(msg)
self.allacq(msg)
self.send_l3(msg, self.diff.l3)
self.send_ping(msg)
p73 = step73()
if __name__=="__main__":
p73.main()

View file

@ -1,18 +0,0 @@
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">0</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">c00f0000094200070003e65e000582010000c000e65f5300ac0000000000e40706699a0721a7790ee4088669de07a19a4210e40a86697907a1a40b14e40c8669c807a1b8a018e40f1a00040606699207e41021a5721f86697e07e411a1aaf9219a000506e4120800002286698d07e413a1a9f2259a000606e4140800002686698007e415a199e9299a000706e4181a00080606697807e41921a2d2318669b007e41aa1be13339a000906e41b0800003486699707e41ca1b6f4379a000a06e41d080000388669a707</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">0</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">20</parameter>
<parameter name="Messages" id="PID00075">e41ea1987a3b9a000b06e4210669af0721a6c042e42286696307a1904c44e42486697b07a1a5c048e4268669d207a1b7ae4ce4870669ba07219d0d0ee4888669aa07a1a47e10e48a8669f107a1abdb14e48c8669d707a1c33118e48f1a0004060669d607e49021b5161f8669a907e491a1bcbf219a000506e492080000228669e507e493a1b025259a000606e494080000268669bb07e495a1b95c299a000706e4981a0008060669db07e499219d5e318669ac07e49aa1b585339a000906e49b080000348669de07</parameter>
</TC>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">0</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">9</parameter>
<parameter name="Messages" id="PID00075">e49ca1a2b0379a000a06e49d080000388669c707e49ea1af483b9a000b06e4a10669b20721a5c342e4a28669d707a1b39c44e4a48669eb07a1b45b48e4a68669cc07a1a4294c665900ffe6580003e8010000413c</parameter>
</TC>

View file

@ -1,28 +0,0 @@
#! /usr/bin/python3
from solo.patch import patch
class step74(patch):
def assemble(self, **aa):
from solo.step.config.fs import make
if self.config is None:
self.config = make()
self.scratch(subversion=4)
self.OH_C = self.config.ppss.OH_SETPOINT_C
self.OH_DC = self.config.ppss.OH_DC_ESTIMATE
self.OH_SH = 1
def send(self, msg):
from solo.solomsgclass import HK_T_to_ADC
self.send_scratch(msg)
self.config.ppss.set_opheater_setpoint(msg,
self.OH_C,
dc_estimate = self.OH_DC * 192//100 * 2**self.OH_SH,
shift=self.OH_SH)
self.send_ping(msg)
p74 = step74()
if __name__=="__main__":
p74.main()

View file

@ -1,66 +0,0 @@
# STEP FS, version 8, rev 0
# env = nominal
# version/dps: 8/0
# apid/flags, n("section"sum enc/fmt)
# apid: 0x0300 + Tag
# flags: /-separated flags: 0..3 or 'h' or 'r'
# n: dps_items in section
# section: section name; may not contain whitespace
# sum, enc: cadence
# fmt: 0..3: float16, log2, uint24, encoded
# version: 0008
# Low Latency
0x0333/0x0/0x2, 24("LL_STEP_energy_res_int" 4), 24("LL_STEP_energy_res_mag" 4), 24("LL_STEP_energy_res_bkgnd_int" 4), 24("LL_STEP_energy_res_bkgnd_mag" 4), 4("LL_STEP_time_res_int" 0/3), 4("LL_STEP_time_res_mag" 0/3), 4("LL_STEP_time_res_bkgnd_int" 0/3), 4("LL_STEP_time_res_bkgnd_mag" 0/3)
# Auxiliary
0x0337/0x0/0x2, 1("AUX_STEP_time_res_int" 0/1), 1("AUX_STEP_time_res_mag" 0/1), 1("AUX_STEP_time_res_bkgnd_int" 0/1), 1("AUX_STEP_time_res_bkgnd_mag" 0/1), 32("AUX_STEP_basic_int" 2/3), 32("AUX_STEP_basic_mag" 2/3), 32("AUX_STEP_basic_bkgnd_int" 2/3), 32("AUX_STEP_basic_bkgnd_mag" 2/3)
# STEP 0 MAIN
0x0353/0x0/0x2, 32("STEP_M_0_00" 2/3), 32("STEP_M_0_01" 2/3), 32("STEP_M_0_02" 2/3), 32("STEP_M_0_03" 2/3), 32("STEP_M_0_04" 2/3), 32("STEP_M_0_05" 2/3), 32("STEP_M_0_06" 2/3), 32("STEP_M_0_07" 2/3), 32("STEP_M_0_08" 2/3), 32("STEP_M_0_09" 2/3), 32("STEP_M_0_10" 2/3), 32("STEP_M_0_11" 2/3), 32("STEP_M_0_12" 2/3), 32("STEP_M_0_13" 2/3), 32("STEP_M_0_14" 2/3), 32("STEP_M_0_15" 2/3)
# STEP 1 MAIN
0x0353/0x1/0x3, 32("STEP_M_1_00" 2/3), 32("STEP_M_1_01" 2/3), 32("STEP_M_1_02" 2/3), 32("STEP_M_1_03" 2/3), 32("STEP_M_1_04" 2/3), 32("STEP_M_1_05" 2/3), 32("STEP_M_1_06" 2/3), 32("STEP_M_1_07" 2/3), 32("STEP_M_1_08" 2/3), 32("STEP_M_1_09" 2/3), 32("STEP_M_1_10" 2/3), 32("STEP_M_1_11" 2/3), 32("STEP_M_1_12" 2/3), 32("STEP_M_1_13" 2/3), 32("STEP_M_1_14" 2/3), 32("STEP_M_1_15" 2/3)
# STEP 0 AUX
0x035f/0x0/0x2, 24("STEP_A_0_00" 4/3), 24("STEP_A_0_01" 4/3), 24("STEP_A_0_02" 4/3), 24("STEP_A_0_03" 4/3), 24("STEP_A_0_04" 4/3), 24("STEP_A_0_05" 4/3), 24("STEP_A_0_06" 4/3), 24("STEP_A_0_07" 4/3), 24("STEP_A_0_08" 4/3), 24("STEP_A_0_09" 4/3), 24("STEP_A_0_10" 4/3), 24("STEP_A_0_11" 4/3), 24("STEP_A_0_12" 4/3), 24("STEP_A_0_13" 4/3), 24("STEP_A_0_14" 4/3), 24("STEP_A_0_15" 4/3)
# STEP 1 AUX
0x035f/0x1/0x3, 24("STEP_A_1_00" 4/3), 24("STEP_A_1_01" 4/3), 24("STEP_A_1_02" 4/3), 24("STEP_A_1_03" 4/3), 24("STEP_A_1_04" 4/3), 24("STEP_A_1_05" 4/3), 24("STEP_A_1_06" 4/3), 24("STEP_A_1_07" 4/3), 24("STEP_A_1_08" 4/3), 24("STEP_A_1_09" 4/3), 24("STEP_A_1_10" 4/3), 24("STEP_A_1_11" 4/3), 24("STEP_A_1_12" 4/3), 24("STEP_A_1_13" 4/3), 24("STEP_A_1_14" 4/3), 24("STEP_A_1_15" 4/3)
# STEP FS, version 8, rev 0
# env = highrate
# version/dps: 8/1
# apid/flags, n("section"sum enc/fmt)
# apid: 0x0300 + Tag
# flags: /-separated flags: 0..3 or 'h' or 'r'
# n: dps_items in section
# section: section name; may not contain whitespace
# sum, enc: cadence
# fmt: 0..3: float16, log2, uint24, encoded
# version: 0008
# Low Latency
0x0333/0x0/0x2, 24("LL_STEP_energy_res_int" 4), 24("LL_STEP_energy_res_mag" 4), 24("LL_STEP_energy_res_bkgnd_int" 4), 24("LL_STEP_energy_res_bkgnd_mag" 4), 4("LL_STEP_time_res_int" 0/3), 4("LL_STEP_time_res_mag" 0/3), 4("LL_STEP_time_res_bkgnd_int" 0/3), 4("LL_STEP_time_res_bkgnd_mag" 0/3)
# Auxiliary
0x0337/0x0/0x2, 1("AUX_STEP_time_res_int" 0/1), 1("AUX_STEP_time_res_mag" 0/1), 1("AUX_STEP_time_res_bkgnd_int" 0/1), 1("AUX_STEP_time_res_bkgnd_mag" 0/1), 32("AUX_STEP_basic_int" 2/3), 32("AUX_STEP_basic_mag" 2/3), 32("AUX_STEP_basic_bkgnd_int" 2/3), 32("AUX_STEP_basic_bkgnd_mag" 2/3)
# STEP 0 MAIN
0x0357/0x0/0x2, 32("STEP_M_0_00" 0/3), 32("STEP_M_0_01" 0/3), 32("STEP_M_0_02" 0/3), 32("STEP_M_0_03" 0/3), 32("STEP_M_0_04" 0/3), 32("STEP_M_0_05" 0/3), 32("STEP_M_0_06" 0/3), 32("STEP_M_0_07" 0/3), 32("STEP_M_0_08" 0/3), 32("STEP_M_0_09" 0/3), 32("STEP_M_0_10" 0/3), 32("STEP_M_0_11" 0/3), 32("STEP_M_0_12" 0/3), 32("STEP_M_0_13" 0/3), 32("STEP_M_0_14" 0/3), 32("STEP_M_0_15" 0/3)
# STEP 1 MAIN
0x0357/0x1/0x3, 32("STEP_M_1_00" 0/3), 32("STEP_M_1_01" 0/3), 32("STEP_M_1_02" 0/3), 32("STEP_M_1_03" 0/3), 32("STEP_M_1_04" 0/3), 32("STEP_M_1_05" 0/3), 32("STEP_M_1_06" 0/3), 32("STEP_M_1_07" 0/3), 32("STEP_M_1_08" 0/3), 32("STEP_M_1_09" 0/3), 32("STEP_M_1_10" 0/3), 32("STEP_M_1_11" 0/3), 32("STEP_M_1_12" 0/3), 32("STEP_M_1_13" 0/3), 32("STEP_M_1_14" 0/3), 32("STEP_M_1_15" 0/3)
# STEP 0 AUX
0x035f/0x0/0x2, 24("STEP_A_0_00" 4/3), 24("STEP_A_0_01" 4/3), 24("STEP_A_0_02" 4/3), 24("STEP_A_0_03" 4/3), 24("STEP_A_0_04" 4/3), 24("STEP_A_0_05" 4/3), 24("STEP_A_0_06" 4/3), 24("STEP_A_0_07" 4/3), 24("STEP_A_0_08" 4/3), 24("STEP_A_0_09" 4/3), 24("STEP_A_0_10" 4/3), 24("STEP_A_0_11" 4/3), 24("STEP_A_0_12" 4/3), 24("STEP_A_0_13" 4/3), 24("STEP_A_0_14" 4/3), 24("STEP_A_0_15" 4/3)
# STEP 1 AUX
0x035f/0x1/0x3, 24("STEP_A_1_00" 4/3), 24("STEP_A_1_01" 4/3), 24("STEP_A_1_02" 4/3), 24("STEP_A_1_03" 4/3), 24("STEP_A_1_04" 4/3), 24("STEP_A_1_05" 4/3), 24("STEP_A_1_06" 4/3), 24("STEP_A_1_07" 4/3), 24("STEP_A_1_08" 4/3), 24("STEP_A_1_09" 4/3), 24("STEP_A_1_10" 4/3), 24("STEP_A_1_11" 4/3), 24("STEP_A_1_12" 4/3), 24("STEP_A_1_13" 4/3), 24("STEP_A_1_14" 4/3), 24("STEP_A_1_15" 4/3)

View file

@ -1,32 +0,0 @@
#<tag>:\n\t<ad> <us> <mod_phase> <mod_cadence> <header>\n...
0x44:
0x0144 4 1 600 0x000000ff
0x0c44 7 15 60 0x00000001
0x0b44 10 20 600 0x000010ff
0x0544 13 8 3600 0x100400c0
0x0544 14 68 3600 0x1c040090
0x0544 15 128 3600 0x100f00000
0x0544 16 188 3600 0x202c2000
0x0144 17 4 60 0x00000200
0x0544 420 0 600 0x10040030
0x0544 445 0 600 0x10040000
0x0544 610 0 600 0x80440080
0x54:
0x0554 21 7 600 0x100a00000
0x0554 22 17 600 0x100a00100
0x0554 23 27 600 0x100a00200
0x0554 24 37 600 0x100a00300
0x0554 25 47 600 0x100a00400
0x0554 26 57 600 0x100a00500
0x0554 27 67 600 0x100a00600
0x0554 28 77 600 0x100a00700
0x0554 29 87 600 0x100a00800
0x0554 30 97 600 0x100a00900
0x0554 31 107 600 0x100a00a00
0x0554 32 117 600 0x100a00b00
0x0554 33 127 600 0x100a00c00
0x0554 34 137 600 0x100a00d00
0x0554 35 147 600 0x100a00e00
0x0554 36 157 600 0x100a00f00

File diff suppressed because it is too large Load diff

View file

@ -1,13 +0,0 @@
c00f0000094200090003
e64e0001a41f00008544
a64f10040030
e6500001bd1f00008544
a65110040000
e6520001d61f00008525
a653100400b0
e6540001f91f00008526
a65510040080
e6200000111f00044144
66210300
665900ff
e6580003e8010000413c

View file

@ -1,36 +0,0 @@
#! /usr/bin/python3
from solo.patch import patch
from solo.solomsgclass import solomsg
class step83(patch):
def assemble(self, **aa):
from solo.step.config.fs import make
if self.config is None:
self.config = make()
self.scratch(subversion=3)
self.items = []
self.items.append(self.config.ppss.find_flags("HKC", 0x30)[0].copy())
self.items.append(self.config.ppss.find_flags("HKC", 0x00)[0].copy())
self.items.append(self.config.ppss.find_flags("ICU", 0x25)[0].copy())
self.items.append(self.config.ppss.find_flags("ICU", 0x26)[0].copy())
self.items.append(self.config.ppss.find_flags("LIFETIME" )[0].copy())
self.items[0].mod = self.items[2].mod
self.items[1].mod = self.items[3].mod
self.items[2].msg.da |= 0x80
self.items[3].msg.da |= 0x80
self.items[4].msg.da |= solomsg.RREG["step_deadtime"]
def send(self, msg):
self.send_scratch(msg)
for m in self.items:
m(msg)
self.send_ping(msg)
p83 = step83(name="counter_clear")
main=p83.main
if __name__=="__main__":
main()

View file

@ -1,8 +0,0 @@
<TCs>
<TC type="128" subtype="102" id="ZID52540" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00069">0</parameter>
<parameter name="Flags" id="PID00085">15</parameter>
<parameter name="NMessages" id="PID00086">13</parameter>
<parameter name="Messages" id="PID00075">c00f0000094200090003e64e0001a41f00008544a64f10040030e6500001bd1f00008544a65110040000e6520001d61f00008525a653100400b0e6540001f91f00008526a65510040080e6200000111f0004414466210300665900ffe6580003e8010000413c</parameter>
</TC>
</TCs>

File diff suppressed because it is too large Load diff

View file

@ -1,56 +0,0 @@
E₁= 0.98 keV, ΔE= 1.16 keV, 60 sec
E₁= 2.14 keV, ΔE= 0.19 keV, 60 sec
E₁= 2.34 keV, ΔE= 0.21 keV, 60 sec
E₁= 2.54 keV, ΔE= 0.24 keV, 60 sec
E₁= 2.78 keV, ΔE= 0.26 keV, 60 sec
E₁= 3.04 keV, ΔE= 0.27 keV, 60 sec
E₁= 3.31 keV, ΔE= 0.29 keV, 60 sec
E₁= 3.60 keV, ΔE= 0.32 keV, 60 sec
E₁= 3.92 keV, ΔE= 0.37 keV, 1 sec
E₁= 4.29 keV, ΔE= 0.38 keV, 1 sec
E₁= 4.67 keV, ΔE= 0.42 keV, 1 sec
E₁= 5.09 keV, ΔE= 0.48 keV, 1 sec
E₁= 5.57 keV, ΔE= 0.51 keV, 1 sec
E₁= 6.08 keV, ΔE= 0.54 keV, 1 sec
E₁= 6.62 keV, ΔE= 0.58 keV, 1 sec
E₁= 7.20 keV, ΔE= 0.64 keV, 1 sec
E₁= 7.84 keV, ΔE= 0.74 keV, 1 sec
E₁= 8.58 keV, ΔE= 0.77 keV, 1 sec
E₁= 9.34 keV, ΔE= 0.83 keV, 1 sec
E₁= 10.18 keV, ΔE= 0.96 keV, 1 sec
E₁= 11.14 keV, ΔE= 1.02 keV, 1 sec
E₁= 12.16 keV, ΔE= 1.09 keV, 1 sec
E₁= 13.25 keV, ΔE= 1.15 keV, 1 sec
E₁= 14.40 keV, ΔE= 1.28 keV, 1 sec
E₁= 15.68 keV, ΔE= 1.47 keV, 1 sec
E₁= 17.15 keV, ΔE= 1.54 keV, 1 sec
E₁= 18.69 keV, ΔE= 1.66 keV, 1 sec
E₁= 20.35 keV, ΔE= 1.92 keV, 1 sec
E₁= 22.27 keV, ΔE= 2.05 keV, 1 sec
E₁= 24.32 keV, ΔE= 2.18 keV, 1 sec
E₁= 26.50 keV, ΔE= 2.30 keV, 1 sec
E₁= 28.80 keV, ΔE= 2.56 keV, 1 sec
E₁= 31.36 keV, ΔE= 2.94 keV, 1 sec
E₁= 34.30 keV, ΔE= 3.07 keV, 1 sec
E₁= 37.38 keV, ΔE= 3.33 keV, 1 sec
E₁= 40.70 keV, ΔE= 3.84 keV, 1 sec
E₁= 44.54 keV, ΔE= 4.10 keV, 1 sec
E₁= 48.64 keV, ΔE= 4.35 keV, 1 sec
E₁= 52.99 keV, ΔE= 4.61 keV, 1 sec
E₁= 57.60 keV, ΔE= 5.12 keV, 1 sec
E₁= 62.72 keV, ΔE= 5.89 keV, 60 sec
E₁= 68.61 keV, ΔE= 6.14 keV, 60 sec
E₁= 74.75 keV, ΔE= 6.66 keV, 60 sec
E₁= 81.41 keV, ΔE= 7.68 keV, 60 sec
E₁= 89.09 keV, ΔE= 8.19 keV, 60 sec
E₁= 97.28 keV, ΔE= 8.70 keV, 60 sec
E₁= 105.98 keV, ΔE= 9.22 keV, 60 sec
E₁= 115.20 keV, ΔE= 10.24 keV, 60 sec
E₁= 125.44 keV, ΔE= 11.78 keV, 60 sec
E₁= 137.22 keV, ΔE= 12.29 keV, 60 sec
E₁= 149.50 keV, ΔE= 13.31 keV, 60 sec
E₁= 162.82 keV, ΔE= 15.36 keV, 60 sec
E₁= 178.18 keV, ΔE= 16.38 keV, 60 sec
E₁= 194.56 keV, ΔE= 17.41 keV, 60 sec
E₁= 211.97 keV, ΔE= 18.43 keV, 60 sec
E₁= 230.40 keV, ΔE= 142.34 keV, 60 sec

View file

@ -1,7 +0,0 @@
<TCs>
<TC type="128" subtype="103" id="ZID52541" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00083">0</parameter>
<parameter name="IndexTable" id="PID00084">3</parameter>
<parameter name="BlockIndex" id="PID00077">6</parameter>
</TC>
</TCs>

View file

@ -1,7 +0,0 @@
<TCs>
<TC type="128" subtype="103" id="ZID52541" comment="" delta="00:00:01">
<parameter name="SensorID" id="PID00083">0</parameter>
<parameter name="IndexTable" id="PID00084">3</parameter>
<parameter name="BlockIndex" id="PID00077">2</parameter>
</TC>
</TCs>

View file

@ -1,72 +0,0 @@
# STEP FS, version 9, rev 0
# env = nominal
# version/dps: 9/0
# apid/flags, n("section"sum enc/fmt)
# apid: 0x0300 + Tag
# flags: /-separated flags: 0..3 or 'h' or 'r'
# n: dps_items in section
# section: section name; may not contain whitespace
# sum, enc: cadence
# fmt: 0..3: float16, log2, uint24, encoded
# version: 0009
# Low Latency
0x0333/0x0/0x2, 24("LL_STEP_energy_res_int" 4), 24("LL_STEP_energy_res_mag" 4), 24("LL_STEP_energy_res_bkgnd_int" 4), 24("LL_STEP_energy_res_bkgnd_mag" 4), 4("LL_STEP_time_res_int" 0/3), 4("LL_STEP_time_res_mag" 0/3), 4("LL_STEP_time_res_bkgnd_int" 0/3), 4("LL_STEP_time_res_bkgnd_mag" 0/3), 15("LL_STEP_multi_int" 4/3), 15("LL_STEP_multi_mag" 4/3)
# STEP 0 MAIN
0x0353/0x0/0x2, 32("STEP_M_0_00" 2/3), 32("STEP_M_0_01" 2/3), 32("STEP_M_0_02" 2/3), 32("STEP_M_0_03" 2/3), 32("STEP_M_0_04" 2/3), 32("STEP_M_0_05" 2/3), 32("STEP_M_0_06" 2/3), 32("STEP_M_0_07" 2/3), 32("STEP_M_0_08" 2/3), 32("STEP_M_0_09" 2/3), 32("STEP_M_0_10" 2/3), 32("STEP_M_0_11" 2/3), 32("STEP_M_0_12" 2/3), 32("STEP_M_0_13" 2/3), 32("STEP_M_0_14" 2/3), 32("STEP_M_0_15" 2/3)
# STEP 1 MAIN
0x0353/0x1/0x3, 32("STEP_M_1_00" 2/3), 32("STEP_M_1_01" 2/3), 32("STEP_M_1_02" 2/3), 32("STEP_M_1_03" 2/3), 32("STEP_M_1_04" 2/3), 32("STEP_M_1_05" 2/3), 32("STEP_M_1_06" 2/3), 32("STEP_M_1_07" 2/3), 32("STEP_M_1_08" 2/3), 32("STEP_M_1_09" 2/3), 32("STEP_M_1_10" 2/3), 32("STEP_M_1_11" 2/3), 32("STEP_M_1_12" 2/3), 32("STEP_M_1_13" 2/3), 32("STEP_M_1_14" 2/3), 32("STEP_M_1_15" 2/3)
# STEP 0 MAIN
0x0357/0x0/0x2, 32("STEP_M_0_00" 0/3), 32("STEP_M_0_01" 0/3), 32("STEP_M_0_02" 0/3), 32("STEP_M_0_03" 0/3), 32("STEP_M_0_04" 0/3), 32("STEP_M_0_05" 0/3), 32("STEP_M_0_06" 0/3), 32("STEP_M_0_07" 0/3), 32("STEP_M_0_08" 0/3), 32("STEP_M_0_09" 0/3), 32("STEP_M_0_10" 0/3), 32("STEP_M_0_11" 0/3), 32("STEP_M_0_12" 0/3), 32("STEP_M_0_13" 0/3), 32("STEP_M_0_14" 0/3), 32("STEP_M_0_15" 0/3)
# STEP 1 MAIN
0x0357/0x1/0x3, 32("STEP_M_1_00" 0/3), 32("STEP_M_1_01" 0/3), 32("STEP_M_1_02" 0/3), 32("STEP_M_1_03" 0/3), 32("STEP_M_1_04" 0/3), 32("STEP_M_1_05" 0/3), 32("STEP_M_1_06" 0/3), 32("STEP_M_1_07" 0/3), 32("STEP_M_1_08" 0/3), 32("STEP_M_1_09" 0/3), 32("STEP_M_1_10" 0/3), 32("STEP_M_1_11" 0/3), 32("STEP_M_1_12" 0/3), 32("STEP_M_1_13" 0/3), 32("STEP_M_1_14" 0/3), 32("STEP_M_1_15" 0/3)
# STEP 0 AUX
0x035f/0x0/0x2, 24("STEP_A_0_00" 4/3), 24("STEP_A_0_01" 4/3), 24("STEP_A_0_02" 4/3), 24("STEP_A_0_03" 4/3), 24("STEP_A_0_04" 4/3), 24("STEP_A_0_05" 4/3), 24("STEP_A_0_06" 4/3), 24("STEP_A_0_07" 4/3), 24("STEP_A_0_08" 4/3), 24("STEP_A_0_09" 4/3), 24("STEP_A_0_10" 4/3), 24("STEP_A_0_11" 4/3), 24("STEP_A_0_12" 4/3), 24("STEP_A_0_13" 4/3), 24("STEP_A_0_14" 4/3), 24("STEP_A_0_15" 4/3)
# STEP 1 AUX
0x035f/0x1/0x3, 24("STEP_A_1_00" 4/3), 24("STEP_A_1_01" 4/3), 24("STEP_A_1_02" 4/3), 24("STEP_A_1_03" 4/3), 24("STEP_A_1_04" 4/3), 24("STEP_A_1_05" 4/3), 24("STEP_A_1_06" 4/3), 24("STEP_A_1_07" 4/3), 24("STEP_A_1_08" 4/3), 24("STEP_A_1_09" 4/3), 24("STEP_A_1_10" 4/3), 24("STEP_A_1_11" 4/3), 24("STEP_A_1_12" 4/3), 24("STEP_A_1_13" 4/3), 24("STEP_A_1_14" 4/3), 24("STEP_A_1_15" 4/3)
# STEP FS, version 9, rev 0
# env = highrate
# version/dps: 9/1
# apid/flags, n("section"sum enc/fmt)
# apid: 0x0300 + Tag
# flags: /-separated flags: 0..3 or 'h' or 'r'
# n: dps_items in section
# section: section name; may not contain whitespace
# sum, enc: cadence
# fmt: 0..3: float16, log2, uint24, encoded
# version: 0009
# Low Latency
0x0333/0x0/0x2, 24("LL_STEP_energy_res_int" 4), 24("LL_STEP_energy_res_mag" 4), 24("LL_STEP_energy_res_bkgnd_int" 4), 24("LL_STEP_energy_res_bkgnd_mag" 4), 4("LL_STEP_time_res_int" 0/3), 4("LL_STEP_time_res_mag" 0/3), 4("LL_STEP_time_res_bkgnd_int" 0/3), 4("LL_STEP_time_res_bkgnd_mag" 0/3), 15("LL_STEP_multi_int" 4/3), 15("LL_STEP_multi_mag" 4/3)
# STEP 0 MAIN
0x0353/0x0/0x2, 32("STEP_M_0_00" 2/3), 32("STEP_M_0_01" 2/3), 32("STEP_M_0_02" 2/3), 32("STEP_M_0_03" 2/3), 32("STEP_M_0_04" 2/3), 32("STEP_M_0_05" 2/3), 32("STEP_M_0_06" 2/3), 32("STEP_M_0_07" 2/3), 32("STEP_M_0_08" 2/3), 32("STEP_M_0_09" 2/3), 32("STEP_M_0_10" 2/3), 32("STEP_M_0_11" 2/3), 32("STEP_M_0_12" 2/3), 32("STEP_M_0_13" 2/3), 32("STEP_M_0_14" 2/3), 32("STEP_M_0_15" 2/3)
# STEP 1 MAIN
0x0353/0x1/0x3, 32("STEP_M_1_00" 2/3), 32("STEP_M_1_01" 2/3), 32("STEP_M_1_02" 2/3), 32("STEP_M_1_03" 2/3), 32("STEP_M_1_04" 2/3), 32("STEP_M_1_05" 2/3), 32("STEP_M_1_06" 2/3), 32("STEP_M_1_07" 2/3), 32("STEP_M_1_08" 2/3), 32("STEP_M_1_09" 2/3), 32("STEP_M_1_10" 2/3), 32("STEP_M_1_11" 2/3), 32("STEP_M_1_12" 2/3), 32("STEP_M_1_13" 2/3), 32("STEP_M_1_14" 2/3), 32("STEP_M_1_15" 2/3)
# STEP 0 MAIN
0x0357/0x0/0x2, 32("STEP_M_0_00" 0/3), 32("STEP_M_0_01" 0/3), 32("STEP_M_0_02" 0/3), 32("STEP_M_0_03" 0/3), 32("STEP_M_0_04" 0/3), 32("STEP_M_0_05" 0/3), 32("STEP_M_0_06" 0/3), 32("STEP_M_0_07" 0/3), 32("STEP_M_0_08" 0/3), 32("STEP_M_0_09" 0/3), 32("STEP_M_0_10" 0/3), 32("STEP_M_0_11" 0/3), 32("STEP_M_0_12" 0/3), 32("STEP_M_0_13" 0/3), 32("STEP_M_0_14" 0/3), 32("STEP_M_0_15" 0/3)
# STEP 1 MAIN
0x0357/0x1/0x3, 32("STEP_M_1_00" 0/3), 32("STEP_M_1_01" 0/3), 32("STEP_M_1_02" 0/3), 32("STEP_M_1_03" 0/3), 32("STEP_M_1_04" 0/3), 32("STEP_M_1_05" 0/3), 32("STEP_M_1_06" 0/3), 32("STEP_M_1_07" 0/3), 32("STEP_M_1_08" 0/3), 32("STEP_M_1_09" 0/3), 32("STEP_M_1_10" 0/3), 32("STEP_M_1_11" 0/3), 32("STEP_M_1_12" 0/3), 32("STEP_M_1_13" 0/3), 32("STEP_M_1_14" 0/3), 32("STEP_M_1_15" 0/3)
# STEP 0 AUX
0x035f/0x0/0x2, 24("STEP_A_0_00" 4/3), 24("STEP_A_0_01" 4/3), 24("STEP_A_0_02" 4/3), 24("STEP_A_0_03" 4/3), 24("STEP_A_0_04" 4/3), 24("STEP_A_0_05" 4/3), 24("STEP_A_0_06" 4/3), 24("STEP_A_0_07" 4/3), 24("STEP_A_0_08" 4/3), 24("STEP_A_0_09" 4/3), 24("STEP_A_0_10" 4/3), 24("STEP_A_0_11" 4/3), 24("STEP_A_0_12" 4/3), 24("STEP_A_0_13" 4/3), 24("STEP_A_0_14" 4/3), 24("STEP_A_0_15" 4/3)
# STEP 1 AUX
0x035f/0x1/0x3, 24("STEP_A_1_00" 4/3), 24("STEP_A_1_01" 4/3), 24("STEP_A_1_02" 4/3), 24("STEP_A_1_03" 4/3), 24("STEP_A_1_04" 4/3), 24("STEP_A_1_05" 4/3), 24("STEP_A_1_06" 4/3), 24("STEP_A_1_07" 4/3), 24("STEP_A_1_08" 4/3), 24("STEP_A_1_09" 4/3), 24("STEP_A_1_10" 4/3), 24("STEP_A_1_11" 4/3), 24("STEP_A_1_12" 4/3), 24("STEP_A_1_13" 4/3), 24("STEP_A_1_14" 4/3), 24("STEP_A_1_15" 4/3)

View file

@ -194,25 +194,6 @@ class dps_item(object):
return {"section": s} return {"section": s}
return {} return {}
def ebin(self, trim=0, scale=1, modulus=256, bpo=16, ybase=None):
"""return the linear bin range of the item
ybase: if present, use the y-dimension, from this base address
bpo: bin per octave, scaling of the LOG output
modulus: length of the x-hist
trim: LOG value of the first x-bin
scale: calibartion of the linear scale.
"""
from .l3sim import invlog2
if ybase is None:
x1 = self.addr % modulus + trim
x2 = x1 + self.nx
else:
x1 = (self.addr-ybase)//self.sy + trim
x2 = x1 + self.ny
x1 *= 16//bpo
x2 *= 16//bpo
return invlog2(x1)*scale, invlog2(x2)*scale
D = 0 D = 0
A = 0 A = 0
L = 0 L = 0
@ -234,7 +215,7 @@ scale: calibartion of the linear scale.
self.normalize() self.normalize()
modu, fini, init = modulus(t) modu, fini, init = modulus(t)
if self.verbosity > 1: if self.verbosity > 1:
sys.stderr.write("(%d %d %d)\n"%(modu, fini, init)) sys.stdout.write("(%d %d %d)\n"%(modu, fini, init))
# mem_window # mem_window
self.D = 0 self.D = 0
@ -374,7 +355,7 @@ scale: calibartion of the linear scale.
state = nstate state = nstate
if self.verbosity > 2: if self.verbosity > 2:
sys.stderr.write("E=%d EE=%d A=%d R=%d L=%d\n"%(E, EE, A, R, L)) sys.stdout.write("E=%d EE=%d A=%d R=%d L=%d\n"%(E, EE, A, R, L))
return E return E
# A dps_product is a named and optionally placed list of dps_item-s # A dps_product is a named and optionally placed list of dps_item-s
@ -476,17 +457,6 @@ class dps_product(list):
s.append(ss) s.append(ss)
return s return s
def ebins(self, section=True, **aa):
ebins = lambda l: [ll.ebin(**aa) for ll in l]
if section is None:
return ebins(self)
sections = {ss[0].section: ss for ss in self.sections()}
if section is True:
return {nn: ebins(ss) for nn,ss in sections.items()}
if section in sections:
return ebins(sections[section])
return []
def lookup_table(self, func=lambda itm:itm, itf=False): def lookup_table(self, func=lambda itm:itm, itf=False):
lt = {} lt = {}
for n,section in enumerate(self.sections()): for n,section in enumerate(self.sections()):
@ -601,7 +571,7 @@ class dps_product(list):
l3mem = next(mem) l3mem = next(mem)
data = self.simulate_second(sec, l3mem, ccsds=ccsds, **args) data = self.simulate_second(sec, l3mem, ccsds=ccsds, **args)
if self.verbosity > 2 and len(data): if self.verbosity > 2 and len(data):
sys.stderr.write("%4ds: %s = %d bytes\n" % (sec, self.name, len(data))) sys.stdout.write("%4ds: %s = %d bytes\n" % (sec, self.name, len(data)))
if not ccsds : # create a stream of itf packets if not ccsds : # create a stream of itf packets
apid = self.args["tag"] | 0x300 apid = self.args["tag"] | 0x300
@ -633,13 +603,13 @@ class dps_product(list):
packet = ccsds_header + secondary_header + epd_header + data packet = ccsds_header + secondary_header + epd_header + data
crc = struct.pack(">H", crc1021(0xffff, packet)) crc = struct.pack(">H", crc1021(0xffff, packet))
if self.verbosity > 1: if self.verbosity > 1:
sys.stderr.write("%4ds: CCSDS %s = %d bytes\n" % (sec, self.name, l+23)) sys.stdout.write("%4ds: CCSDS %s = %d bytes\n" % (sec, self.name, l+23))
yield bytes(packet + crc) yield bytes(packet + crc)
if always and last_ccsds!=sec: if always and last_ccsds!=sec:
yield b"" yield b""
if self.verbosity: if self.verbosity:
amount = self.bytes_sent + 23 * int(math.ceil(self.packets_sent)) amount = self.bytes_sent + 23 * int(math.ceil(self.packets_sent))
sys.stderr.write("%s (APID: 0x%04x): %d bytes in %d s (%.2f bps)\n" % (self.name, apid, amount, len(t), 1.*amount*8/len(t))) sys.stdout.write("%s (APID: 0x%04x): %d bytes in %d s (%.2f bps)\n" % (self.name, apid, amount, len(t), 1.*amount*8/len(t)))
def data_rate(self): def data_rate(self):
@ -933,16 +903,6 @@ class dps_table(object):
f.write(header) f.write(header)
f.write(self.make_defs()) f.write(self.make_defs())
ebin_args = {}
def ebins(self, product=None, section=True, **aa):
args = {}
args.update(self.ebin_args)
args.update(aa)
args.update(dict(section=section)) # positional parameter
if product is None:
return {nn: ss.ebins(**args) for nn,ss in self.products.items()}
return self[product].ebins(**args)
def simulate(self, mem, t=3600, ccsds=False, poisson=True): def simulate(self, mem, t=3600, ccsds=False, poisson=True):
"""for a number of seconds t, with a l3 histogram memory image mem, """for a number of seconds t, with a l3 histogram memory image mem,
simulate the output of the DPS table and return the binary packet simulate the output of the DPS table and return the binary packet
@ -968,8 +928,8 @@ class dps_table(object):
if self.verbosity: if self.verbosity:
bps_nob = self.data_rate(no_burst=True) bps_nob = self.data_rate(no_burst=True)
bps = self.data_rate() bps = self.data_rate()
sys.stderr.write("total data: %d bytes in %d s\ndata rate: %g bps\n" % (bps_nob*t/8,t,bps_nob)) sys.stdout.write("total data: %d bytes in %d s\ndata rate: %g bps\n" % (bps_nob*t/8,t,bps_nob))
sys.stderr.write("total data (incl. burst): %d bytes in %d s\ndata rate (incl. burst): %g bps\n" % (bps*t/8,t,bps)) sys.stdout.write("total data (incl. burst): %d bytes in %d s\ndata rate (incl. burst): %g bps\n" % (bps*t/8,t,bps))
return b"".join(out) return b"".join(out)
def simulate_pha(self, l3, l3sim, files, t=3600, **args): def simulate_pha(self, l3, l3sim, files, t=3600, **args):
@ -1159,8 +1119,6 @@ class empty_item(object):
return "empty_item()\n" return "empty_item()\n"
def __str__(self): def __str__(self):
return "DPS empty_item\n" return "DPS empty_item\n"
def is_tele(self):
return False
class unchanged_item(empty_item): class unchanged_item(empty_item):
def __call__(self, idx, msg): def __call__(self, idx, msg):

View file

@ -12,7 +12,7 @@ class hetept_config(unit_config):
TYPE = "HETEPT" TYPE = "HETEPT"
def __init__(self, ppss=None, l3=None, ana=None, science=None, dps=None, def __init__(self, ppss=None, l3=None, ana=None, science=None, dps=None,
unit='HET/EPT1', model=None, variant=None, temperature=25, env=None, unit='HET/EPT1', model=None, variant=None, temperature=25, env=None,
patch=0, verbose=1, dp_flag=0, version=0, OH_degC=-10, **kwargs): patch=0, verbose=1, dp_flag=0, version=0, **kwargs):
from .ppss import hetept_ppss from .ppss import hetept_ppss
from .dps import hetept_dps from .dps import hetept_dps
from .l3trigger import hetept_l3_trigger from .l3trigger import hetept_l3_trigger
@ -22,7 +22,6 @@ class hetept_config(unit_config):
self.name = unit self.name = unit
self.model = model.upper() self.model = model.upper()
self.variant = variant self.variant = variant
self.scratch = kwargs.get("scratch", None)
env = environment(env) env = environment(env)
if ppss is None: if ppss is None:
@ -37,8 +36,10 @@ class hetept_config(unit_config):
l3 = dps.l3 l3 = dps.l3
if ana is None: if ana is None:
ana = hetept_l1l2(calib=l3.scales()) ana = hetept_l1l2(calib=l3.scales())
if version==9 and patch>=2:
ana.patch92()
ppss = hetept_ppss(ana=ana, dps=dps, dps_us=110000, clear_us=820000, OH_degC=OH_degC, verbose=verbose) ppss = hetept_ppss(ana=ana, dps=dps, dps_us=110000, clear_us=820000, verbose=verbose)
self.ppss = ppss self.ppss = ppss
self.dps = self.ppss.dps self.dps = self.ppss.dps
self.l3 = self.dps.l3 self.l3 = self.dps.l3

View file

@ -9,11 +9,8 @@
from . import base_config from . import base_config
from .base_config import hetept_config, hetept_config_table from .base_config import hetept_config, hetept_config_table
# attempt to reproduce what was flown 2021-2023 VERSION = 9
VERSION = 10 ENV = ["FAR", "CLOSE"]
SUBVERSION = 0
ENV = ["CLOSE", "FAR"]
TEMPERATURE = [25., 15. , 5. , -5.] TEMPERATURE = [25., 15. , 5. , -5.]
@ -87,32 +84,28 @@ def pqm(calib=False, anatest=False, **kwargs):
calib_ppss=calib_ppss, **kwargs) calib_ppss=calib_ppss, **kwargs)
return table return table
def fm1(start_modulus=3600, streamtest=False, OH_degC=-6.0, **kwargs): def fm1(start_modulus=3600, streamtest=False, **kwargs):
UNIT="HET/EPT1" UNIT="HET/EPT1"
MODEL="FM1" MODEL="FM1"
UNIT_ID = 0xF1 UNIT_ID = 0xF1
TEMPERATURE = [-6.0, -11.60, -0.8] TEMPERATURE = base_config.get_temperatures(minT=-40, maxT=20)
table = hetept_config_table( table = hetept_config_table(
unit=UNIT, model=MODEL, env=ENV, temperature=TEMPERATURE, unit=UNIT, model=MODEL, env=ENV, temperature=TEMPERATURE,
scratch=SUBVERSION, version=VERSION, scratch=UNIT_ID, version=VERSION, start_modulus=start_modulus,
start_modulus=start_modulus, streamtest=streamtest, **kwargs )
streamtest=streamtest, OH_degC=OH_degC,
**kwargs )
return table return table
def fm2(start_modulus=3600, streamtest=False, OH_degC=-1.0, **kwargs): def fm2(start_modulus=3600, streamtest=False, **kwargs):
UNIT="HET/EPT2" UNIT="HET/EPT2"
MODEL="FM2" MODEL="FM2"
UNIT_ID = 0xF2 UNIT_ID = 0xF2
TEMPERATURE = [-0.8, -6.0, 4.40] TEMPERATURE = base_config.get_temperatures(minT=-40, maxT=20)
table = hetept_config_table( table = hetept_config_table(
unit=UNIT, model=MODEL, env=ENV, temperature=TEMPERATURE, unit=UNIT, model=MODEL, env=ENV, temperature=TEMPERATURE,
scratch=SUBVERSION, version=VERSION, scratch=UNIT_ID, version=VERSION, start_modulus=start_modulus,
start_modulus=start_modulus, streamtest=streamtest, **kwargs )
streamtest=streamtest, OH_degC=OH_degC,
**kwargs )
return table return table
def fs(start_modulus=60, streamtest=True, minT=-40, maxT=20, **kwargs): def fs(start_modulus=60, streamtest=True, minT=-40, maxT=20, **kwargs):

View file

@ -32,7 +32,7 @@ def write_xml_cf_to_icu(cf_txt, op_dir, conf_mem_addr, eeprom_page=None):
return ct_table return ct_table
def write_xml_cf_to_eeprom(cf_txt, op_dir, eeprom_page=None, pointer_reset=None): def write_xml_cf_to_eeprom(cf_txt, op_dir, eeprom_page=None):
""" """
Loads .txt-format configuration tables and writes XML commands to write the configuration tables to the Loads .txt-format configuration tables and writes XML commands to write the configuration tables to the
unit eeprom. unit eeprom.
@ -51,9 +51,6 @@ def write_xml_cf_to_eeprom(cf_txt, op_dir, eeprom_page=None, pointer_reset=None)
# create xml commands for writing the new config to the EEPROM # create xml commands for writing the new config to the EEPROM
tc_seq_eeprom = ct_table.upload_index_patch() tc_seq_eeprom = ct_table.upload_index_patch()
if pointer_reset:
tc_seq_eeprom[1][-1] = telecom.store_messages_to_config_store(pointer_reset, unit=ct_table.magic.unit, flags=12, delta=300, comment="Reset table pointer to default table location")
write_xml(op_dir + 'hetept%i_v%04d_%s_to_EEPROM.tcs' % (ct_table.magic.unit - 1, ct_table.magic.version, hex(ct_table.crc)), tc_seq_eeprom) write_xml(op_dir + 'hetept%i_v%04d_%s_to_EEPROM.tcs' % (ct_table.magic.unit - 1, ct_table.magic.version, hex(ct_table.crc)), tc_seq_eeprom)
return ct_table return ct_table
@ -69,13 +66,8 @@ def write_xml_table_index_execution(op_dir):
telecom.write_xml(op_dir + 'he2_to_index_2.xml', [telecom.send_table_index('HE2', 2, comment='Switch HE2 to nominal mode')]) telecom.write_xml(op_dir + 'he2_to_index_2.xml', [telecom.send_table_index('HE2', 2, comment='Switch HE2 to nominal mode')])
# create xml commands to change the temperature config # create xml commands to change the temperature config
telecom.write_xml(op_dir + 'he1_to_index_9.xml', [telecom.send_table_index('HE1', 9, comment='Switch HE1 to calibration for -11.6 deg C')]) telecom.write_xml(op_dir + 'he1_to_index_13.xml', [telecom.send_table_index('HE1', 13, comment='Switch HE1 to calibration for -11.6 deg C')])
telecom.write_xml(op_dir + 'he1_to_index_10.xml', [telecom.send_table_index('HE1', 10, comment='Switch HE1 to calibration for -6.0 deg C')]) telecom.write_xml(op_dir + 'he2_to_index_14.xml', [telecom.send_table_index('HE2', 14, comment='Switch HE2 to calibration for -6.0 deg C')])
telecom.write_xml(op_dir + 'he1_to_index_11.xml', [telecom.send_table_index('HE1', 11, comment='Switch HE1 to calibration for -0.8 deg C')])
telecom.write_xml(op_dir + 'he2_to_index_9.xml', [telecom.send_table_index('HE2', 9, comment='Switch HE2 to calibration for -6.0 deg C')])
telecom.write_xml(op_dir + 'he2_to_index_10.xml', [telecom.send_table_index('HE2', 10, comment='Switch HE2 to calibration for -0.8 deg C')])
telecom.write_xml(op_dir + 'he2_to_index_11.xml', [telecom.send_table_index('HE2', 11, comment='Switch HE2 to calibration for +4.4 deg C')])
# create xml commands to change to close/far mode # create xml commands to change to close/far mode
telecom.write_xml(op_dir + 'he1_to_index_4.xml', [telecom.send_table_index('HE1', 4, comment='Switch HE1 to close mode')]) telecom.write_xml(op_dir + 'he1_to_index_4.xml', [telecom.send_table_index('HE1', 4, comment='Switch HE1 to close mode')])

View file

@ -71,12 +71,12 @@ class hetept_l1l2(heteptana):
self.set_thres(self.HET+self.EPT, idx=idx) self.set_thres(self.HET+self.EPT, idx=idx)
def set_default_thresholds(self, idx="low", ept_A_thr=1000): def set_default_thresholds(self, idx="low"):
self.set_thres(self.EPT_C, 45*keV, idx="high") self.set_thres(self.EPT_C, 45*keV, idx="high")
self.set_thres(self.EPT_C, 25*keV, idx="low") self.set_thres(self.EPT_C, 25*keV, idx="low")
# EPT_A threshold must be above all x-talk # EPT_A threshold must be above all x-talk
self.set_thres(self.EPT_A, ept_A_thr*keV) self.set_thres(self.EPT_A, 60*keV)
AH = [a for a in self.HET_A1+self.HET_A2 if a[-1]=='H'] AH = [a for a in self.HET_A1+self.HET_A2 if a[-1]=='H']
AL = [a for a in self.HET_A1+self.HET_A2 if a[-1]=='L'] AL = [a for a in self.HET_A1+self.HET_A2 if a[-1]=='L']
@ -113,12 +113,12 @@ class hetept_l1l2(heteptana):
self.l2[3].disable() self.l2[3].disable()
# EPT # EPT
self.l1bits(0, "C1", "C2", "A1", "A2") self.l1bits(0, "C1", "C2")
self.l1bits(2, "C3", "C4", "A3", "A4")
self.l1bits(1, "A1", "A2") self.l1bits(1, "A1", "A2")
self.l1bits(2, "C3", "C4")
self.l1bits(3, "A3", "A4") self.l1bits(3, "A3", "A4")
self.l2[0].set(any=(0,), mask=self.ch("C1", "A1", "C2", "A2")) self.l2[0].set(any=(0,), none=(1,), mask=self.ch("C1", "A1", "C2", "A2"))
self.l2[1].set(any=(2,), mask=self.ch("C3", "A3", "C4", "A4")) self.l2[1].set(any=(2,), none=(3,), mask=self.ch("C3", "A3", "C4", "A4"))
a1 = 6; A1 = self.HET_A1 a1 = 6; A1 = self.HET_A1
b1 = 7; B1 = self.HET_B1 b1 = 7; B1 = self.HET_B1
@ -145,6 +145,13 @@ class hetept_l1l2(heteptana):
self.l2[6].set(any=(a2,b2i), none=(a1,b1), mask=self.ch( B1+C+B2+A2), cls=2) self.l2[6].set(any=(a2,b2i), none=(a1,b1), mask=self.ch( B1+C+B2+A2), cls=2)
self.l2[7].set(any=(a2,b2i,b1i), mask=self.ch(A1+B1+C+B2+A2), cls=3) self.l2[7].set(any=(a2,b2i,b1i), mask=self.ch(A1+B1+C+B2+A2), cls=3)
def patch92(self, ept_A_thr=1000):
self.l1bits(0, "C1", "C2", "A1", "A2")
self.l1bits(2, "C3", "C4", "A3", "A4")
self.l2[0].set(none=())
self.l2[1].set(none=())
self.set_thres(self.EPT_A, ept_A_thr*keV)
def fix_sparse_mask(self): def fix_sparse_mask(self):
"read all channels following with the first one selected" "read all channels following with the first one selected"
for l2 in self.l2: for l2 in self.l2:

View file

@ -1,6 +1,5 @@
L3 pass 1: -2vv -g dis ept.l3 L3 pass 1: -2vv -g dis ept.l3
opening include file hetept_config.l3 at level 1 opening include file hetept_config.l3 at level 1
patch_level = 0x3
event_base := R[0x0e0] event_base := R[0x0e0]
hetmask := R[0x0e0] hetmask := R[0x0e0]
eptmask := R[0x0e1] eptmask := R[0x0e1]
@ -79,7 +78,7 @@ het_pha_e_AB := 0xf
het_pha_stop_invalid := 0x3 het_pha_stop_invalid := 0x3
define .macro DO_EPT_AFTER_HET define .macro DO_EPT_AFTER_HET
define .macro DO_EPT_INSTEAD_OF_HET define .macro DO_EPT_INSTEAD_OF_HET
closing include file hetept_config.l3, line 154, level 1 closing include file hetept_config.l3, line 150, level 1
opening include file ept_calib.l3 at level 1 opening include file ept_calib.l3 at level 1
ept_gain = 0.94 ept_gain = 0.94
C1_calib = 0.94 C1_calib = 0.94
@ -102,13 +101,12 @@ ept_hist_offset = 0x60
ept_hist_length = 0xff ept_hist_length = 0xff
ept2d_e0 = 0x1 ept2d_e0 = 0x1
ept_2dhist_offset = 0xef ept_2dhist_offset = 0xef
ept_2dhist_cutoff = 0xef ept_2dhist_cutoff = 0xbf
define .macro EPT_TVCAL define .macro EPT_TVCAL
closing include file ept_calib.l3, line 90, level 1 closing include file ept_calib.l3, line 90, level 1
not opening forward file .ept.forward in twopass mode not opening forward file .ept.forward in twopass mode
define .macro EPT define .macro EPT
.=R[0x000] # was R[0x000] .=R[0x000] # was R[0x000]
EPT code start address R[0x000]
@0 :09e000e0 SUB R[224]>>0 - R[224]>>0 @0 :09e000e0 SUB R[224]>>0 - R[224]>>0
@1 :00800000 NOP @1 :00800000 NOP
C1C2_2dhist_offset := 0x0 C1C2_2dhist_offset := 0x0
@ -123,133 +121,107 @@ C4C3_2dhist_offset := 0x40
@8 :20000003 ADDI R[3]+0 @8 :20000003 ADDI R[3]+0
@9 :a0000005 ifN ADDI R[5]+0 @9 :a0000005 ifN ADDI R[5]+0
@10 :03500000 BITS C @10 :03500000 BITS C
@11 :09020000 SUB R[0]>>0 - R[2]>>0 @11 :19006007 CMP R[7] < R[0]+96
@12 :89040000 ifN SUB R[0]>>0 - R[4]>>0 @12 :840060fe ifN BRNG R[254]{3:0}
@13 :0100000c LOG R[12] @13 :440060fc ifS BRNG R[252]{3:0}
@14 :1c009e0d CMP R[13] > R[0]+158 @14 :9b00010d ifN CMP R[13] <= R[0]+1
@15 :d90d6a07 ifC CMP R[7] < R[13]+106 @15 :c3700000 ifC BITS 0
@16 :99006007 ifN CMP R[7] < R[0]+96 @16 :c0c00000 ifC GOTO R[0]
@17 :840060fe ifN BRNG R[254]{3:0} @17 :06f785ff MULI R[255]*1925>>15 # 0.05875
@18 :440060fc ifS BRNG R[252]{3:0} @18 :01000011 LOG R[17]
@19 :9b000112 ifN CMP R[18] <= R[0]+1 @19 :06f785fd MULI R[253]*1925>>15 # 0.05875
@20 :c3700000 ifC BITS 0 @20 :01000013 LOG R[19]
@21 :c0c00000 ifC GOTO R[0] @21 :11140012 CMP R[18]+0 < R[20]
@22 :06f785ff MULI R[255]*1925>>15 # 0.05875 @22 :e0000014 ifC ADDI R[20]+0
@23 :01000016 LOG R[22] @23 :1c009e16 CMP R[22] > R[0]+158
@24 :06f785fd MULI R[253]*1925>>15 # 0.05875 @24 :d9166a07 ifC CMP R[7] < R[22]+106
@25 :01000018 LOG R[24] @25 :c3700000 ifC BITS 0
@26 :11190017 CMP R[23]+0 < R[25] @26 :c0c00000 ifC GOTO R[0]
@27 :e0000019 ifC ADDI R[25]+0 @27 :19096a07 CMP R[7] < R[9]+106
@28 :09160000 SUB R[0]>>0 - R[22]>>0 @28 :dc009e09 ifC CMP R[9] > R[0]+158
@29 :0100001c LOG R[28] @29 :85ff6007 ifN TRIM R[7], 96, 255
@30 :09180000 SUB R[0]>>0 - R[24]>>0 @30 :a040001d ifN ADDI R[29]+16384
@31 :0100001e LOG R[30] @31 :6001001e ifS ADDI R[30]+256
@32 :111f001d CMP R[29]+0 < R[31] @32 :8c00001f ifN HIST R[31]>>0 + R[0]>>0
@33 :e000001f ifC ADDI R[31]+0 @33 :80c00000 ifN GOTO R[0]
@34 :1c009e21 CMP R[33] > R[0]+158 @34 :040060fc BRNG R[252]{3:0}
@35 :d9216a07 ifC CMP R[7] < R[33]+106 @35 :440060fe ifS BRNG R[254]{3:0}
@36 :9c009e1b ifN CMP R[27] > R[0]+158 @36 :1b000123 CMP R[35] <= R[0]+1
@37 :d91b6a07 ifC CMP R[7] < R[27]+106 @37 :89050003 ifN SUB R[3]>>0 - R[5]>>0
@38 :c3700000 ifC BITS 0 @38 :a0004025 ifN ADDI R[37]+64
@39 :c0c00000 ifC GOTO R[0] @39 :857f0026 ifN TRIM R[38], 0, 127
@40 :19096a07 CMP R[7] < R[9]+106 @40 :a0c00027 ifN ADDI R[39]+49152
@41 :dc009e09 ifC CMP R[9] > R[0]+158 @41 :88040002 ifN ADD R[2]>>0 + R[4]>>0
@42 :85ff6007 ifN TRIM R[7], 96, 255 @42 :81000029 ifN LOG R[41]
@43 :a040002a ifN ADDI R[42]+16384 @43 :9900bf2a ifN CMP R[42] < R[0]+191
@44 :6001002b ifS ADDI R[43]+256 @44 :857fef2a ifN TRIM R[42], 239, 127
@45 :8c00002c ifN HIST R[44]>>0 + R[0]>>0 @45 :8c28192c ifN HIST R[44]<<7 + R[40]>>1
@46 :80c00000 ifN GOTO R[0] @46 :03d00000 BITS ~C
@47 :040060fc BRNG R[252]{3:0} @47 :03b00000 BITC 1
@48 :440060fe ifS BRNG R[254]{3:0} C1C2_exit = R[0x030]
@49 :1b000130 CMP R[48] <= R[0]+1 @48 :20000000 ADDI R[0]+0
@50 :89050003 ifN SUB R[3]>>0 - R[5]>>0 @49 :60000100 ifS ADDI R[0]+1
@51 :a0004032 ifN ADDI R[50]+64 @50 :a0000200 ifN ADDI R[0]+2
@52 :857f0033 ifN TRIM R[51], 0, 127 closing include file EPT, line 100, level 1
@53 :a0c00034 ifN ADDI R[52]+49152
@54 :88040002 ifN ADD R[2]>>0 + R[4]>>0
@55 :81000036 ifN LOG R[54]
@56 :9900ef37 ifN CMP R[55] < R[0]+239
@57 :857fef37 ifN TRIM R[55], 239, 127
@58 :8c351939 ifN HIST R[57]<<7 + R[53]>>1
@59 :03d00000 BITS ~C
@60 :03b00000 BITC 1
C1C2_exit = R[0x03d]
@61 :20000000 ADDI R[0]+0
@62 :60000100 ifS ADDI R[0]+1
@63 :a0000200 ifN ADDI R[0]+2
closing include file EPT, line 127, level 1
.call EPT ['4', '3', 'C3E-C4E'] .call EPT ['4', '3', 'C3E-C4E']
@64 :06f785f8 MULI R[248]*1925>>15 # 0.05875 @51 :06f785f8 MULI R[248]*1925>>15 # 0.05875
@65 :01000040 LOG R[64] @52 :01000033 LOG R[51]
@66 :06f785fa MULI R[250]*1925>>15 # 0.05875 @53 :06f785fa MULI R[250]*1925>>15 # 0.05875
@54 :01000035 LOG R[53]
@55 :11360034 CMP R[52]+0 < R[54]
@56 :e0000036 ifC ADDI R[54]+0
@57 :20000034 ADDI R[52]+0
@58 :a0000036 ifN ADDI R[54]+0
@59 :03500000 BITS C
@60 :19006038 CMP R[56] < R[0]+96
@61 :840060f8 ifN BRNG R[248]{3:0}
@62 :440060fa ifS BRNG R[250]{3:0}
@63 :9b00013e ifN CMP R[62] <= R[0]+1
@64 :c3700000 ifC BITS 0
@65 :c0c00000 ifC GOTO R[0]
@66 :06f785f9 MULI R[249]*1925>>15 # 0.05875
@67 :01000042 LOG R[66] @67 :01000042 LOG R[66]
@68 :11430041 CMP R[65]+0 < R[67] @68 :06f785fb MULI R[251]*1925>>15 # 0.05875
@69 :e0000043 ifC ADDI R[67]+0 @69 :01000044 LOG R[68]
@70 :20000041 ADDI R[65]+0 @70 :11450043 CMP R[67]+0 < R[69]
@71 :a0000043 ifN ADDI R[67]+0 @71 :e0000045 ifC ADDI R[69]+0
@72 :03500000 BITS C @72 :1c009e47 CMP R[71] > R[0]+158
@73 :09400000 SUB R[0]>>0 - R[64]>>0 @73 :d9476a38 ifC CMP R[56] < R[71]+106
@74 :89420000 ifN SUB R[0]>>0 - R[66]>>0 @74 :c3700000 ifC BITS 0
@75 :0100004a LOG R[74] @75 :c0c00000 ifC GOTO R[0]
@76 :1c009e4b CMP R[75] > R[0]+158 @76 :193a6a38 CMP R[56] < R[58]+106
@77 :d94b6a45 ifC CMP R[69] < R[75]+106 @77 :dc009e3a ifC CMP R[58] > R[0]+158
@78 :99006045 ifN CMP R[69] < R[0]+96 @78 :85ff6038 ifN TRIM R[56], 96, 255
@79 :840060f8 ifN BRNG R[248]{3:0} @79 :a043004e ifN ADDI R[78]+17152
@80 :440060fa ifS BRNG R[250]{3:0} @80 :7fff004f ifS ADDI R[79]-256
@81 :9b000150 ifN CMP R[80] <= R[0]+1 @81 :8c000050 ifN HIST R[80]>>0 + R[0]>>0
@82 :c3700000 ifC BITS 0 @82 :80c00000 ifN GOTO R[0]
@83 :c0c00000 ifC GOTO R[0] @83 :040060fa BRNG R[250]{3:0}
@84 :06f785f9 MULI R[249]*1925>>15 # 0.05875 @84 :440060f8 ifS BRNG R[248]{3:0}
@85 :01000054 LOG R[84] @85 :1b000154 CMP R[84] <= R[0]+1
@86 :06f785fb MULI R[251]*1925>>15 # 0.05875 @86 :89340036 ifN SUB R[54]>>0 - R[52]>>0
@87 :01000056 LOG R[86] @87 :a0004056 ifN ADDI R[86]+64
@88 :11570055 CMP R[85]+0 < R[87] @88 :857f0057 ifN TRIM R[87], 0, 127
@89 :e0000057 ifC ADDI R[87]+0 @89 :a0c08058 ifN ADDI R[88]+49280
@90 :09540000 SUB R[0]>>0 - R[84]>>0 @90 :88350033 ifN ADD R[51]>>0 + R[53]>>0
@91 :0100005a LOG R[90] @91 :8100005a ifN LOG R[90]
@92 :09560000 SUB R[0]>>0 - R[86]>>0 @92 :9900bf5b ifN CMP R[91] < R[0]+191
@93 :0100005c LOG R[92] @93 :857fef5b ifN TRIM R[91], 239, 127
@94 :115d005b CMP R[91]+0 < R[93] @94 :8c59195d ifN HIST R[93]<<7 + R[89]>>1
@95 :e000005d ifC ADDI R[93]+0 @95 :03d00000 BITS ~C
@96 :1c009e5f CMP R[95] > R[0]+158 @96 :03b00000 BITC 1
@97 :d95f6a45 ifC CMP R[69] < R[95]+106 C4C3_exit = R[0x061]
@98 :9c009e59 ifN CMP R[89] > R[0]+158 @97 :20000000 ADDI R[0]+0
@99 :d9596a45 ifC CMP R[69] < R[89]+106 @98 :60000100 ifS ADDI R[0]+1
@100:c3700000 ifC BITS 0 @99 :a0000200 ifN ADDI R[0]+2
@101:c0c00000 ifC GOTO R[0] closing include file EPT, line 100, level 1
@102:19476a45 CMP R[69] < R[71]+106 @100:08630032 ADD R[50]>>0 + R[99]>>0
@103:dc009e47 ifC CMP R[71] > R[0]+158 @101:1c000164 CMP R[100] > R[0]+1
@104:85ff6045 ifN TRIM R[69], 96, 255 @102:e0000200 ifC ADDI R[0]+2
@105:a0430068 ifN ADDI R[104]+17152 @103:14000001 CMP R[1]+0 > R[0]
@106:7fff0069 ifS ADDI R[105]-256 @104:87000066 ifN PHA R[102]+0
@107:8c00006a ifN HIST R[106]>>0 + R[0]>>0 @105:00000000 STOP
@108:80c00000 ifN GOTO R[0] EPT code end address R[0x06a]
@109:040060fa BRNG R[250]{3:0}
@110:440060f8 ifS BRNG R[248]{3:0}
@111:1b00016e CMP R[110] <= R[0]+1
@112:89410043 ifN SUB R[67]>>0 - R[65]>>0
@113:a0004070 ifN ADDI R[112]+64
@114:857f0071 ifN TRIM R[113], 0, 127
@115:a0c08072 ifN ADDI R[114]+49280
@116:88420040 ifN ADD R[64]>>0 + R[66]>>0
@117:81000074 ifN LOG R[116]
@118:9900ef75 ifN CMP R[117] < R[0]+239
@119:857fef75 ifN TRIM R[117], 239, 127
@120:8c731977 ifN HIST R[119]<<7 + R[115]>>1
@121:03d00000 BITS ~C
@122:03b00000 BITC 1
C4C3_exit = R[0x07b]
@123:20000000 ADDI R[0]+0
@124:60000100 ifS ADDI R[0]+1
@125:a0000200 ifN ADDI R[0]+2
closing include file EPT, line 127, level 1
@126:087d003f ADD R[63]>>0 + R[125]>>0
@127:1c00017e CMP R[126] > R[0]+1
@128:e0000200 ifC ADDI R[0]+2
@129:14000001 CMP R[1]+0 > R[0]
@130:87000080 ifN PHA R[128]+0
@131:00000000 STOP
EPT code end address R[0x084]
L3 pass 2: 2 forward conflicts L3 pass 2: 2 forward conflicts
opening include file hetept_config.l3 at level 1 opening include file hetept_config.l3 at level 1
event_base := R[0x0e0] event_base := R[0x0e0]
@ -330,7 +302,7 @@ het_pha_e_AB := 0xf
het_pha_stop_invalid := 0x3 het_pha_stop_invalid := 0x3
define .macro DO_EPT_AFTER_HET define .macro DO_EPT_AFTER_HET
define .macro DO_EPT_INSTEAD_OF_HET define .macro DO_EPT_INSTEAD_OF_HET
closing include file hetept_config.l3, line 154, level 1 closing include file hetept_config.l3, line 150, level 1
opening include file ept_calib.l3 at level 1 opening include file ept_calib.l3 at level 1
ept_gain = 0.94 ept_gain = 0.94
C1_calib = 0.94 C1_calib = 0.94
@ -353,13 +325,12 @@ ept_hist_offset = 0x60
ept_hist_length = 0xff ept_hist_length = 0xff
ept2d_e0 = 0x1 ept2d_e0 = 0x1
ept_2dhist_offset = 0xef ept_2dhist_offset = 0xef
ept_2dhist_cutoff = 0xef ept_2dhist_cutoff = 0xbf
define .macro EPT_TVCAL define .macro EPT_TVCAL
closing include file ept_calib.l3, line 90, level 1 closing include file ept_calib.l3, line 90, level 1
not opening forward file .ept.forward in twopass mode not opening forward file .ept.forward in twopass mode
define .macro EPT define .macro EPT
.=R[0x000] # was R[0x084] .=R[0x000] # was R[0x06a]
EPT code start address R[0x000]
@0 :09e000e0 SUB R[224]>>0 - R[224]>>0 @0 :09e000e0 SUB R[224]>>0 - R[224]>>0
@1 :00800000 NOP @1 :00800000 NOP
C1C2_2dhist_offset := 0x0 C1C2_2dhist_offset := 0x0
@ -374,133 +345,107 @@ C4C3_2dhist_offset := 0x40
@8 :20000003 ADDI R[3]+0 @8 :20000003 ADDI R[3]+0
@9 :a0000005 ifN ADDI R[5]+0 @9 :a0000005 ifN ADDI R[5]+0
@10 :03500000 BITS C @10 :03500000 BITS C
@11 :09020000 SUB R[0]>>0 - R[2]>>0 @11 :19006007 CMP R[7] < R[0]+96
@12 :89040000 ifN SUB R[0]>>0 - R[4]>>0 @12 :840060fe ifN BRNG R[254]{3:0}
@13 :0100000c LOG R[12] @13 :440060fc ifS BRNG R[252]{3:0}
@14 :1c009e0d CMP R[13] > R[0]+158 @14 :9b00010d ifN CMP R[13] <= R[0]+1
@15 :d90d6a07 ifC CMP R[7] < R[13]+106 @15 :c3700000 ifC BITS 0
@16 :99006007 ifN CMP R[7] < R[0]+96 @16 :c0c03000 ifC GOTO R[48]
@17 :840060fe ifN BRNG R[254]{3:0} @17 :06f785ff MULI R[255]*1925>>15 # 0.05875
@18 :440060fc ifS BRNG R[252]{3:0} @18 :01000011 LOG R[17]
@19 :9b000112 ifN CMP R[18] <= R[0]+1 @19 :06f785fd MULI R[253]*1925>>15 # 0.05875
@20 :c3700000 ifC BITS 0 @20 :01000013 LOG R[19]
@21 :c0c03d00 ifC GOTO R[61] @21 :11140012 CMP R[18]+0 < R[20]
@22 :06f785ff MULI R[255]*1925>>15 # 0.05875 @22 :e0000014 ifC ADDI R[20]+0
@23 :01000016 LOG R[22] @23 :1c009e16 CMP R[22] > R[0]+158
@24 :06f785fd MULI R[253]*1925>>15 # 0.05875 @24 :d9166a07 ifC CMP R[7] < R[22]+106
@25 :01000018 LOG R[24] @25 :c3700000 ifC BITS 0
@26 :11190017 CMP R[23]+0 < R[25] @26 :c0c03000 ifC GOTO R[48]
@27 :e0000019 ifC ADDI R[25]+0 @27 :19096a07 CMP R[7] < R[9]+106
@28 :09160000 SUB R[0]>>0 - R[22]>>0 @28 :dc009e09 ifC CMP R[9] > R[0]+158
@29 :0100001c LOG R[28] @29 :85ff6007 ifN TRIM R[7], 96, 255
@30 :09180000 SUB R[0]>>0 - R[24]>>0 @30 :a040001d ifN ADDI R[29]+16384
@31 :0100001e LOG R[30] @31 :6001001e ifS ADDI R[30]+256
@32 :111f001d CMP R[29]+0 < R[31] @32 :8c00001f ifN HIST R[31]>>0 + R[0]>>0
@33 :e000001f ifC ADDI R[31]+0 @33 :80c03000 ifN GOTO R[48]
@34 :1c009e21 CMP R[33] > R[0]+158 @34 :040060fc BRNG R[252]{3:0}
@35 :d9216a07 ifC CMP R[7] < R[33]+106 @35 :440060fe ifS BRNG R[254]{3:0}
@36 :9c009e1b ifN CMP R[27] > R[0]+158 @36 :1b000123 CMP R[35] <= R[0]+1
@37 :d91b6a07 ifC CMP R[7] < R[27]+106 @37 :89050003 ifN SUB R[3]>>0 - R[5]>>0
@38 :c3700000 ifC BITS 0 @38 :a0004025 ifN ADDI R[37]+64
@39 :c0c03d00 ifC GOTO R[61] @39 :857f0026 ifN TRIM R[38], 0, 127
@40 :19096a07 CMP R[7] < R[9]+106 @40 :a0c00027 ifN ADDI R[39]+49152
@41 :dc009e09 ifC CMP R[9] > R[0]+158 @41 :88040002 ifN ADD R[2]>>0 + R[4]>>0
@42 :85ff6007 ifN TRIM R[7], 96, 255 @42 :81000029 ifN LOG R[41]
@43 :a040002a ifN ADDI R[42]+16384 @43 :9900bf2a ifN CMP R[42] < R[0]+191
@44 :6001002b ifS ADDI R[43]+256 @44 :857fef2a ifN TRIM R[42], 239, 127
@45 :8c00002c ifN HIST R[44]>>0 + R[0]>>0 @45 :8c28192c ifN HIST R[44]<<7 + R[40]>>1
@46 :80c03d00 ifN GOTO R[61] @46 :03d00000 BITS ~C
@47 :040060fc BRNG R[252]{3:0} @47 :03b00000 BITC 1
@48 :440060fe ifS BRNG R[254]{3:0} C1C2_exit = R[0x030]
@49 :1b000130 CMP R[48] <= R[0]+1 @48 :20000000 ADDI R[0]+0
@50 :89050003 ifN SUB R[3]>>0 - R[5]>>0 @49 :60000100 ifS ADDI R[0]+1
@51 :a0004032 ifN ADDI R[50]+64 @50 :a0000200 ifN ADDI R[0]+2
@52 :857f0033 ifN TRIM R[51], 0, 127 closing include file EPT, line 100, level 1
@53 :a0c00034 ifN ADDI R[52]+49152
@54 :88040002 ifN ADD R[2]>>0 + R[4]>>0
@55 :81000036 ifN LOG R[54]
@56 :9900ef37 ifN CMP R[55] < R[0]+239
@57 :857fef37 ifN TRIM R[55], 239, 127
@58 :8c351939 ifN HIST R[57]<<7 + R[53]>>1
@59 :03d00000 BITS ~C
@60 :03b00000 BITC 1
C1C2_exit = R[0x03d]
@61 :20000000 ADDI R[0]+0
@62 :60000100 ifS ADDI R[0]+1
@63 :a0000200 ifN ADDI R[0]+2
closing include file EPT, line 127, level 1
.call EPT ['4', '3', 'C3E-C4E'] .call EPT ['4', '3', 'C3E-C4E']
@64 :06f785f8 MULI R[248]*1925>>15 # 0.05875 @51 :06f785f8 MULI R[248]*1925>>15 # 0.05875
@65 :01000040 LOG R[64] @52 :01000033 LOG R[51]
@66 :06f785fa MULI R[250]*1925>>15 # 0.05875 @53 :06f785fa MULI R[250]*1925>>15 # 0.05875
@54 :01000035 LOG R[53]
@55 :11360034 CMP R[52]+0 < R[54]
@56 :e0000036 ifC ADDI R[54]+0
@57 :20000034 ADDI R[52]+0
@58 :a0000036 ifN ADDI R[54]+0
@59 :03500000 BITS C
@60 :19006038 CMP R[56] < R[0]+96
@61 :840060f8 ifN BRNG R[248]{3:0}
@62 :440060fa ifS BRNG R[250]{3:0}
@63 :9b00013e ifN CMP R[62] <= R[0]+1
@64 :c3700000 ifC BITS 0
@65 :c0c06100 ifC GOTO R[97]
@66 :06f785f9 MULI R[249]*1925>>15 # 0.05875
@67 :01000042 LOG R[66] @67 :01000042 LOG R[66]
@68 :11430041 CMP R[65]+0 < R[67] @68 :06f785fb MULI R[251]*1925>>15 # 0.05875
@69 :e0000043 ifC ADDI R[67]+0 @69 :01000044 LOG R[68]
@70 :20000041 ADDI R[65]+0 @70 :11450043 CMP R[67]+0 < R[69]
@71 :a0000043 ifN ADDI R[67]+0 @71 :e0000045 ifC ADDI R[69]+0
@72 :03500000 BITS C @72 :1c009e47 CMP R[71] > R[0]+158
@73 :09400000 SUB R[0]>>0 - R[64]>>0 @73 :d9476a38 ifC CMP R[56] < R[71]+106
@74 :89420000 ifN SUB R[0]>>0 - R[66]>>0 @74 :c3700000 ifC BITS 0
@75 :0100004a LOG R[74] @75 :c0c06100 ifC GOTO R[97]
@76 :1c009e4b CMP R[75] > R[0]+158 @76 :193a6a38 CMP R[56] < R[58]+106
@77 :d94b6a45 ifC CMP R[69] < R[75]+106 @77 :dc009e3a ifC CMP R[58] > R[0]+158
@78 :99006045 ifN CMP R[69] < R[0]+96 @78 :85ff6038 ifN TRIM R[56], 96, 255
@79 :840060f8 ifN BRNG R[248]{3:0} @79 :a043004e ifN ADDI R[78]+17152
@80 :440060fa ifS BRNG R[250]{3:0} @80 :7fff004f ifS ADDI R[79]-256
@81 :9b000150 ifN CMP R[80] <= R[0]+1 @81 :8c000050 ifN HIST R[80]>>0 + R[0]>>0
@82 :c3700000 ifC BITS 0 @82 :80c06100 ifN GOTO R[97]
@83 :c0c07b00 ifC GOTO R[123] @83 :040060fa BRNG R[250]{3:0}
@84 :06f785f9 MULI R[249]*1925>>15 # 0.05875 @84 :440060f8 ifS BRNG R[248]{3:0}
@85 :01000054 LOG R[84] @85 :1b000154 CMP R[84] <= R[0]+1
@86 :06f785fb MULI R[251]*1925>>15 # 0.05875 @86 :89340036 ifN SUB R[54]>>0 - R[52]>>0
@87 :01000056 LOG R[86] @87 :a0004056 ifN ADDI R[86]+64
@88 :11570055 CMP R[85]+0 < R[87] @88 :857f0057 ifN TRIM R[87], 0, 127
@89 :e0000057 ifC ADDI R[87]+0 @89 :a0c08058 ifN ADDI R[88]+49280
@90 :09540000 SUB R[0]>>0 - R[84]>>0 @90 :88350033 ifN ADD R[51]>>0 + R[53]>>0
@91 :0100005a LOG R[90] @91 :8100005a ifN LOG R[90]
@92 :09560000 SUB R[0]>>0 - R[86]>>0 @92 :9900bf5b ifN CMP R[91] < R[0]+191
@93 :0100005c LOG R[92] @93 :857fef5b ifN TRIM R[91], 239, 127
@94 :115d005b CMP R[91]+0 < R[93] @94 :8c59195d ifN HIST R[93]<<7 + R[89]>>1
@95 :e000005d ifC ADDI R[93]+0 @95 :03d00000 BITS ~C
@96 :1c009e5f CMP R[95] > R[0]+158 @96 :03b00000 BITC 1
@97 :d95f6a45 ifC CMP R[69] < R[95]+106 C4C3_exit = R[0x061]
@98 :9c009e59 ifN CMP R[89] > R[0]+158 @97 :20000000 ADDI R[0]+0
@99 :d9596a45 ifC CMP R[69] < R[89]+106 @98 :60000100 ifS ADDI R[0]+1
@100:c3700000 ifC BITS 0 @99 :a0000200 ifN ADDI R[0]+2
@101:c0c07b00 ifC GOTO R[123] closing include file EPT, line 100, level 1
@102:19476a45 CMP R[69] < R[71]+106 @100:08630032 ADD R[50]>>0 + R[99]>>0
@103:dc009e47 ifC CMP R[71] > R[0]+158 @101:1c000164 CMP R[100] > R[0]+1
@104:85ff6045 ifN TRIM R[69], 96, 255 @102:e0000200 ifC ADDI R[0]+2
@105:a0430068 ifN ADDI R[104]+17152 @103:14000001 CMP R[1]+0 > R[0]
@106:7fff0069 ifS ADDI R[105]-256 @104:87000066 ifN PHA R[102]+0
@107:8c00006a ifN HIST R[106]>>0 + R[0]>>0 @105:00000000 STOP
@108:80c07b00 ifN GOTO R[123] EPT code end address R[0x06a]
@109:040060fa BRNG R[250]{3:0}
@110:440060f8 ifS BRNG R[248]{3:0}
@111:1b00016e CMP R[110] <= R[0]+1
@112:89410043 ifN SUB R[67]>>0 - R[65]>>0
@113:a0004070 ifN ADDI R[112]+64
@114:857f0071 ifN TRIM R[113], 0, 127
@115:a0c08072 ifN ADDI R[114]+49280
@116:88420040 ifN ADD R[64]>>0 + R[66]>>0
@117:81000074 ifN LOG R[116]
@118:9900ef75 ifN CMP R[117] < R[0]+239
@119:857fef75 ifN TRIM R[117], 239, 127
@120:8c731977 ifN HIST R[119]<<7 + R[115]>>1
@121:03d00000 BITS ~C
@122:03b00000 BITC 1
C4C3_exit = R[0x07b]
@123:20000000 ADDI R[0]+0
@124:60000100 ifS ADDI R[0]+1
@125:a0000200 ifN ADDI R[0]+2
closing include file EPT, line 127, level 1
@126:087d003f ADD R[63]>>0 + R[125]>>0
@127:1c00017e CMP R[126] > R[0]+1
@128:e0000200 ifC ADDI R[0]+2
@129:14000001 CMP R[1]+0 > R[0]
@130:87000080 ifN PHA R[128]+0
@131:00000000 STOP
EPT code end address R[0x084]
@0 :09e000e0 SUB R[224]>>0 - R[224]>>0 @0 :09e000e0 SUB R[224]>>0 - R[224]>>0
@1 :00800000 NOP @1 :00800000 NOP
@2 :06f785fe MULI R[254]*1925>>15 # 0.05875 @2 :06f785fe MULI R[254]*1925>>15 # 0.05875
@ -512,124 +457,98 @@ EPT code end address R[0x084]
@8 :20000003 ADDI R[3]+0 @8 :20000003 ADDI R[3]+0
@9 :a0000005 ifN ADDI R[5]+0 @9 :a0000005 ifN ADDI R[5]+0
@10 :03500000 BITS C @10 :03500000 BITS C
@11 :09020000 SUB R[0]>>0 - R[2]>>0 @11 :19006007 CMP R[7] < R[0]+96
@12 :89040000 ifN SUB R[0]>>0 - R[4]>>0 @12 :840060fe ifN BRNG R[254]{3:0}
@13 :0100000c LOG R[12] @13 :440060fc ifS BRNG R[252]{3:0}
@14 :1c009e0d CMP R[13] > R[0]+158 @14 :9b00010d ifN CMP R[13] <= R[0]+1
@15 :d90d6a07 ifC CMP R[7] < R[13]+106 @15 :c3700000 ifC BITS 0
@16 :99006007 ifN CMP R[7] < R[0]+96 @16 :c0c03000 ifC GOTO R[48]
@17 :840060fe ifN BRNG R[254]{3:0} @17 :06f785ff MULI R[255]*1925>>15 # 0.05875
@18 :440060fc ifS BRNG R[252]{3:0} @18 :01000011 LOG R[17]
@19 :9b000112 ifN CMP R[18] <= R[0]+1 @19 :06f785fd MULI R[253]*1925>>15 # 0.05875
@20 :c3700000 ifC BITS 0 @20 :01000013 LOG R[19]
@21 :c0c03d00 ifC GOTO R[61] @21 :11140012 CMP R[18]+0 < R[20]
@22 :06f785ff MULI R[255]*1925>>15 # 0.05875 @22 :e0000014 ifC ADDI R[20]+0
@23 :01000016 LOG R[22] @23 :1c009e16 CMP R[22] > R[0]+158
@24 :06f785fd MULI R[253]*1925>>15 # 0.05875 @24 :d9166a07 ifC CMP R[7] < R[22]+106
@25 :01000018 LOG R[24] @25 :c3700000 ifC BITS 0
@26 :11190017 CMP R[23]+0 < R[25] @26 :c0c03000 ifC GOTO R[48]
@27 :e0000019 ifC ADDI R[25]+0 @27 :19096a07 CMP R[7] < R[9]+106
@28 :09160000 SUB R[0]>>0 - R[22]>>0 @28 :dc009e09 ifC CMP R[9] > R[0]+158
@29 :0100001c LOG R[28] @29 :85ff6007 ifN TRIM R[7], 96, 255
@30 :09180000 SUB R[0]>>0 - R[24]>>0 @30 :a040001d ifN ADDI R[29]+16384
@31 :0100001e LOG R[30] @31 :6001001e ifS ADDI R[30]+256
@32 :111f001d CMP R[29]+0 < R[31] @32 :8c00001f ifN HIST R[31]>>0 + R[0]>>0
@33 :e000001f ifC ADDI R[31]+0 @33 :80c03000 ifN GOTO R[48]
@34 :1c009e21 CMP R[33] > R[0]+158 @34 :040060fc BRNG R[252]{3:0}
@35 :d9216a07 ifC CMP R[7] < R[33]+106 @35 :440060fe ifS BRNG R[254]{3:0}
@36 :9c009e1b ifN CMP R[27] > R[0]+158 @36 :1b000123 CMP R[35] <= R[0]+1
@37 :d91b6a07 ifC CMP R[7] < R[27]+106 @37 :89050003 ifN SUB R[3]>>0 - R[5]>>0
@38 :c3700000 ifC BITS 0 @38 :a0004025 ifN ADDI R[37]+64
@39 :c0c03d00 ifC GOTO R[61] @39 :857f0026 ifN TRIM R[38], 0, 127
@40 :19096a07 CMP R[7] < R[9]+106 @40 :a0c00027 ifN ADDI R[39]+49152
@41 :dc009e09 ifC CMP R[9] > R[0]+158 @41 :88040002 ifN ADD R[2]>>0 + R[4]>>0
@42 :85ff6007 ifN TRIM R[7], 96, 255 @42 :81000029 ifN LOG R[41]
@43 :a040002a ifN ADDI R[42]+16384 @43 :9900bf2a ifN CMP R[42] < R[0]+191
@44 :6001002b ifS ADDI R[43]+256 @44 :857fef2a ifN TRIM R[42], 239, 127
@45 :8c00002c ifN HIST R[44]>>0 + R[0]>>0 @45 :8c28192c ifN HIST R[44]<<7 + R[40]>>1
@46 :80c03d00 ifN GOTO R[61] @46 :03d00000 BITS ~C
@47 :040060fc BRNG R[252]{3:0} @47 :03b00000 BITC 1
@48 :440060fe ifS BRNG R[254]{3:0} @48 :20000000 ADDI R[0]+0
@49 :1b000130 CMP R[48] <= R[0]+1 @49 :60000100 ifS ADDI R[0]+1
@50 :89050003 ifN SUB R[3]>>0 - R[5]>>0 @50 :a0000200 ifN ADDI R[0]+2
@51 :a0004032 ifN ADDI R[50]+64 @51 :06f785f8 MULI R[248]*1925>>15 # 0.05875
@52 :857f0033 ifN TRIM R[51], 0, 127 @52 :01000033 LOG R[51]
@53 :a0c00034 ifN ADDI R[52]+49152 @53 :06f785fa MULI R[250]*1925>>15 # 0.05875
@54 :88040002 ifN ADD R[2]>>0 + R[4]>>0 @54 :01000035 LOG R[53]
@55 :81000036 ifN LOG R[54] @55 :11360034 CMP R[52]+0 < R[54]
@56 :9900ef37 ifN CMP R[55] < R[0]+239 @56 :e0000036 ifC ADDI R[54]+0
@57 :857fef37 ifN TRIM R[55], 239, 127 @57 :20000034 ADDI R[52]+0
@58 :8c351939 ifN HIST R[57]<<7 + R[53]>>1 @58 :a0000036 ifN ADDI R[54]+0
@59 :03d00000 BITS ~C @59 :03500000 BITS C
@60 :03b00000 BITC 1 @60 :19006038 CMP R[56] < R[0]+96
@61 :20000000 ADDI R[0]+0 @61 :840060f8 ifN BRNG R[248]{3:0}
@62 :60000100 ifS ADDI R[0]+1 @62 :440060fa ifS BRNG R[250]{3:0}
@63 :a0000200 ifN ADDI R[0]+2 @63 :9b00013e ifN CMP R[62] <= R[0]+1
@64 :06f785f8 MULI R[248]*1925>>15 # 0.05875 @64 :c3700000 ifC BITS 0
@65 :01000040 LOG R[64] @65 :c0c06100 ifC GOTO R[97]
@66 :06f785fa MULI R[250]*1925>>15 # 0.05875 @66 :06f785f9 MULI R[249]*1925>>15 # 0.05875
@67 :01000042 LOG R[66] @67 :01000042 LOG R[66]
@68 :11430041 CMP R[65]+0 < R[67] @68 :06f785fb MULI R[251]*1925>>15 # 0.05875
@69 :e0000043 ifC ADDI R[67]+0 @69 :01000044 LOG R[68]
@70 :20000041 ADDI R[65]+0 @70 :11450043 CMP R[67]+0 < R[69]
@71 :a0000043 ifN ADDI R[67]+0 @71 :e0000045 ifC ADDI R[69]+0
@72 :03500000 BITS C @72 :1c009e47 CMP R[71] > R[0]+158
@73 :09400000 SUB R[0]>>0 - R[64]>>0 @73 :d9476a38 ifC CMP R[56] < R[71]+106
@74 :89420000 ifN SUB R[0]>>0 - R[66]>>0 @74 :c3700000 ifC BITS 0
@75 :0100004a LOG R[74] @75 :c0c06100 ifC GOTO R[97]
@76 :1c009e4b CMP R[75] > R[0]+158 @76 :193a6a38 CMP R[56] < R[58]+106
@77 :d94b6a45 ifC CMP R[69] < R[75]+106 @77 :dc009e3a ifC CMP R[58] > R[0]+158
@78 :99006045 ifN CMP R[69] < R[0]+96 @78 :85ff6038 ifN TRIM R[56], 96, 255
@79 :840060f8 ifN BRNG R[248]{3:0} @79 :a043004e ifN ADDI R[78]+17152
@80 :440060fa ifS BRNG R[250]{3:0} @80 :7fff004f ifS ADDI R[79]-256
@81 :9b000150 ifN CMP R[80] <= R[0]+1 @81 :8c000050 ifN HIST R[80]>>0 + R[0]>>0
@82 :c3700000 ifC BITS 0 @82 :80c06100 ifN GOTO R[97]
@83 :c0c07b00 ifC GOTO R[123] @83 :040060fa BRNG R[250]{3:0}
@84 :06f785f9 MULI R[249]*1925>>15 # 0.05875 @84 :440060f8 ifS BRNG R[248]{3:0}
@85 :01000054 LOG R[84] @85 :1b000154 CMP R[84] <= R[0]+1
@86 :06f785fb MULI R[251]*1925>>15 # 0.05875 @86 :89340036 ifN SUB R[54]>>0 - R[52]>>0
@87 :01000056 LOG R[86] @87 :a0004056 ifN ADDI R[86]+64
@88 :11570055 CMP R[85]+0 < R[87] @88 :857f0057 ifN TRIM R[87], 0, 127
@89 :e0000057 ifC ADDI R[87]+0 @89 :a0c08058 ifN ADDI R[88]+49280
@90 :09540000 SUB R[0]>>0 - R[84]>>0 @90 :88350033 ifN ADD R[51]>>0 + R[53]>>0
@91 :0100005a LOG R[90] @91 :8100005a ifN LOG R[90]
@92 :09560000 SUB R[0]>>0 - R[86]>>0 @92 :9900bf5b ifN CMP R[91] < R[0]+191
@93 :0100005c LOG R[92] @93 :857fef5b ifN TRIM R[91], 239, 127
@94 :115d005b CMP R[91]+0 < R[93] @94 :8c59195d ifN HIST R[93]<<7 + R[89]>>1
@95 :e000005d ifC ADDI R[93]+0 @95 :03d00000 BITS ~C
@96 :1c009e5f CMP R[95] > R[0]+158 @96 :03b00000 BITC 1
@97 :d95f6a45 ifC CMP R[69] < R[95]+106 @97 :20000000 ADDI R[0]+0
@98 :9c009e59 ifN CMP R[89] > R[0]+158 @98 :60000100 ifS ADDI R[0]+1
@99 :d9596a45 ifC CMP R[69] < R[89]+106 @99 :a0000200 ifN ADDI R[0]+2
@100:c3700000 ifC BITS 0 @100:08630032 ADD R[50]>>0 + R[99]>>0
@101:c0c07b00 ifC GOTO R[123] @101:1c000164 CMP R[100] > R[0]+1
@102:19476a45 CMP R[69] < R[71]+106 @102:e0000200 ifC ADDI R[0]+2
@103:dc009e47 ifC CMP R[71] > R[0]+158 @103:14000001 CMP R[1]+0 > R[0]
@104:85ff6045 ifN TRIM R[69], 96, 255 @104:87000066 ifN PHA R[102]+0
@105:a0430068 ifN ADDI R[104]+17152 @105:00000000 STOP
@106:7fff0069 ifS ADDI R[105]-256
@107:8c00006a ifN HIST R[106]>>0 + R[0]>>0
@108:80c07b00 ifN GOTO R[123]
@109:040060fa BRNG R[250]{3:0}
@110:440060f8 ifS BRNG R[248]{3:0}
@111:1b00016e CMP R[110] <= R[0]+1
@112:89410043 ifN SUB R[67]>>0 - R[65]>>0
@113:a0004070 ifN ADDI R[112]+64
@114:857f0071 ifN TRIM R[113], 0, 127
@115:a0c08072 ifN ADDI R[114]+49280
@116:88420040 ifN ADD R[64]>>0 + R[66]>>0
@117:81000074 ifN LOG R[116]
@118:9900ef75 ifN CMP R[117] < R[0]+239
@119:857fef75 ifN TRIM R[117], 239, 127
@120:8c731977 ifN HIST R[119]<<7 + R[115]>>1
@121:03d00000 BITS ~C
@122:03b00000 BITC 1
@123:20000000 ADDI R[0]+0
@124:60000100 ifS ADDI R[0]+1
@125:a0000200 ifN ADDI R[0]+2
@126:087d003f ADD R[63]>>0 + R[125]>>0
@127:1c00017e CMP R[126] > R[0]+1
@128:e0000200 ifC ADDI R[0]+2
@129:14000001 CMP R[1]+0 > R[0]
@130:87000080 ifN PHA R[128]+0
@131:00000000 STOP

View file

@ -42,6 +42,7 @@ MinE = ifN ADDI C$2E
BITS C BITS C
.if patch_level >= 3
# Test if the other segment has significant negative signal. # Test if the other segment has significant negative signal.
SUB Z - C$1K SUB Z - C$1K
@ -50,9 +51,12 @@ mMinE = LOG mMinK
CMP mMinE > Z+cut_ept_ac_thres CMP mMinE > Z+cut_ept_ac_thres
ifC CMP MaxE < mMinE + cut_ept_ac_ratio ifC CMP MaxE < mMinE + cut_ept_ac_ratio
ifN CMP MaxE < Z+ept_hist_offset
.else
# Check if we are above the minimum energy limit, otherwise abort (S=0 for PHA buffer selection) # Check if we are above the minimum energy limit, otherwise abort (S=0 for PHA buffer selection)
ifN CMP MaxE < Z+ept_hist_offset CMP MaxE < Z+ept_hist_offset
.endif
# test if the central channel has seen a peak, T>1 # test if the central channel has seen a peak, T>1
@ -74,9 +78,8 @@ A$2E = LOG A$2K
CMP A$1E < A$2E CMP A$1E < A$2E
ANTI = ifC ADDI A$2E ANTI = ifC ADDI A$2E
# Test the anticoincidence channels sees signifivant negative or .if patch_level >= 3
# positive signal and exceed the crosstalk limit vs the hit central # Test the anticoincidence channels for signifivant negative signal
# pixel.
mA$1K = SUB Z - A$1K mA$1K = SUB Z - A$1K
mA$1E = LOG mA$1K mA$1E = LOG mA$1K
@ -84,11 +87,18 @@ mA$2K = SUB Z - A$2K
mA$2E = LOG mA$2K mA$2E = LOG mA$2K
CMP mA$1E < mA$2E CMP mA$1E < mA$2E
mANTI = ifC ADDI mA$2E mANTI = ifC ADDI mA$2E
CMP mANTI < ANTI
mANTI = ifC ADDI ANTI
CMP mANTI > Z+cut_ept_ac_thres CMP mANTI > Z+cut_ept_ac_thres
ifC CMP MaxE < mANTI + cut_ept_ac_ratio ifC CMP MaxE < mANTI + cut_ept_ac_ratio
# Test if the anticoicidence is above noise
# and exceed the crosstalk limit vs the hit central pixel
ifN CMP ANTI > Z+cut_ept_ac_thres
.else
CMP ANTI > Z+cut_ept_ac_thres
.endif
ifC CMP MaxE < ANTI+cut_ept_ac_ratio
# C=1 S=0 for invalid event PHA # C=1 S=0 for invalid event PHA
ifC BITS 0 ifC BITS 0

View file

@ -161,8 +161,11 @@ het_gcr_C_min = $LOG(het_gcr_e0*1e6/eV_BGO)
cut_het_b3_max = $LOG(40e3/eV_Si) cut_het_b3_max = $LOG(40e3/eV_Si)
cut_C_AB_ratio = $LOGR(10.*BGO_Si) #TESTING! -> this is original $LOGR(10./BGO_Si) # C [125eV], AB [31.25eV] cut_C_AB_ratio = $LOGR(10.*BGO_Si) #TESTING! -> this is original $LOGR(10./BGO_Si) # C [125eV], AB [31.25eV]
cut_AB_leak_thres = $LOG(800e3/eV_Si) cut_AB_leak_thres = $LOG(800e3/eV_Si)
cut_C_ABC_electron_maxSSD = $LOG(500e3/eV_Si) .if patch_level >= 1
cut_C_thres = $LOG(1000e3/eV_BGO) cut_C_thres = $LOG(1000e3/eV_BGO)
.else
cut_C_thres = $LOG(500e3/eV_BGO)
.endif
het_path_length_IO = 0.991 # 2016-12-02 Robert E. geant4 het_path_length_IO = 0.991 # 2016-12-02 Robert E. geant4
het_path_length_OO = 0.983 # 2016-12-02 Robert E. geant4 het_path_length_OO = 0.983 # 2016-12-02 Robert E. geant4

View file

@ -1,6 +1,5 @@
L3 pass 1: -2vv -g dis het_pen.l3 L3 pass 1: -2vv -g dis het_pen.l3
opening include file hetept_config.l3 at level 1 opening include file hetept_config.l3 at level 1
patch_level = 0x3
event_base := R[0x0e0] event_base := R[0x0e0]
hetmask := R[0x0e0] hetmask := R[0x0e0]
eptmask := R[0x0e1] eptmask := R[0x0e1]
@ -79,7 +78,7 @@ het_pha_e_AB := 0xf
het_pha_stop_invalid := 0x3 het_pha_stop_invalid := 0x3
define .macro DO_EPT_AFTER_HET define .macro DO_EPT_AFTER_HET
define .macro DO_EPT_INSTEAD_OF_HET define .macro DO_EPT_INSTEAD_OF_HET
closing include file hetept_config.l3, line 154, level 1 closing include file hetept_config.l3, line 150, level 1
opening include file het_calib.l3 at level 1 opening include file het_calib.l3 at level 1
het_high_gain = 1.9 het_high_gain = 1.9
het_high_low = 13.5 het_high_low = 13.5
@ -142,21 +141,19 @@ het_gcr_C_min = 0xff
cut_het_b3_max = 0xb5 cut_het_b3_max = 0xb5
cut_C_AB_ratio = 0x55 cut_C_AB_ratio = 0x55
cut_AB_leak_thres = 0xfa cut_AB_leak_thres = 0xfa
cut_C_thres = 0xdf cut_C_thres = 0xcf
het_path_length_IO = 0.991 het_path_length_IO = 0.991
het_path_length_OO = 0.983 het_path_length_OO = 0.983
HET_AB_gamma = -0.25 HET_AB_gamma = -0.25
HET_AB_LET_rotation = 0.75 HET_AB_LET_rotation = 0.75
HET_AB_TOT_min = 0.15 HET_AB_TOT_min = 0.15
cut_HET_AB_TOT_min = 0xd3 cut_HET_AB_TOT_min = 0xd3
HET_AB_p_1d_A_min = 3.1 HET_AB_p_1d_A_min = 3
cut_HET_AB_p_1d_A_min = 0x119 cut_HET_AB_p_1d_A_min = 0x118
HET_AB_he_1d_A_min = 12.3 HET_AB_he_1d_A_min = 12.3
cut_HET_AB_he_1d_A_min = 0x139 cut_HET_AB_he_1d_A_min = 0x139
HET_AB_ratio_min = 1 HET_AB_ratio_min = 1
HET_AB_X_offset := 0x0 HET_AB_X_offset := 0x0
HET_AB_1D_PHA = 1.2
HET_AB_1D_PHA_l := 0x4
HET_AB_e_min = 0.001 HET_AB_e_min = 0.001
HET_AB_e_max = 0x1 HET_AB_e_max = 0x1
HET_AB_p_min = 0xc HET_AB_p_min = 0xc
@ -224,10 +221,9 @@ HET_ABC_TOT_p_min = 6
cut_HET_ABC_TOT_e_min := 0xaf cut_HET_ABC_TOT_e_min := 0xaf
cut_HET_ABC_TOT_p_min := 0xf8 cut_HET_ABC_TOT_p_min := 0xf8
define .macro HET_TVCAL define .macro HET_TVCAL
closing include file het_calib.l3, line 352, level 1 closing include file het_calib.l3, line 346, level 1
not opening forward file .het_pen.forward in twopass mode not opening forward file .het_pen.forward in twopass mode
.=R[0x300] # was R[0x000] .=R[0x300] # was R[0x000]
HET pen code start address R[0x300]
.call HET_INIT [] .call HET_INIT []
@768:09e000e0 SUB R[224]>>0 - R[224]>>0 @768:09e000e0 SUB R[224]>>0 - R[224]>>0
@769:2088b800 ADDI R[0]+35000 @769:2088b800 ADDI R[0]+35000
@ -434,7 +430,6 @@ closing include file GAIN_SEL_C, line 4, level 1
@916:00800000 NOP @916:00800000 NOP
@917:00800000 NOP @917:00800000 NOP
reject_pen = R[0x396] reject_pen = R[0x396]
reject_pen code address R[0x396]
.call GAIN_SEL_C [] .call GAIN_SEL_C []
.call GAIN_SEL ['C1', 'BGO'] .call GAIN_SEL ['C1', 'BGO']
@918:140200e7 CMP R[231]+0 > R[2] @918:140200e7 CMP R[231]+0 > R[2]
@ -568,7 +563,7 @@ het_pha_e_AB := 0xf
het_pha_stop_invalid := 0x3 het_pha_stop_invalid := 0x3
define .macro DO_EPT_AFTER_HET define .macro DO_EPT_AFTER_HET
define .macro DO_EPT_INSTEAD_OF_HET define .macro DO_EPT_INSTEAD_OF_HET
closing include file hetept_config.l3, line 154, level 1 closing include file hetept_config.l3, line 150, level 1
opening include file het_calib.l3 at level 1 opening include file het_calib.l3 at level 1
het_high_gain = 1.9 het_high_gain = 1.9
het_high_low = 13.5 het_high_low = 13.5
@ -631,21 +626,19 @@ het_gcr_C_min = 0xff
cut_het_b3_max = 0xb5 cut_het_b3_max = 0xb5
cut_C_AB_ratio = 0x55 cut_C_AB_ratio = 0x55
cut_AB_leak_thres = 0xfa cut_AB_leak_thres = 0xfa
cut_C_thres = 0xdf cut_C_thres = 0xcf
het_path_length_IO = 0.991 het_path_length_IO = 0.991
het_path_length_OO = 0.983 het_path_length_OO = 0.983
HET_AB_gamma = -0.25 HET_AB_gamma = -0.25
HET_AB_LET_rotation = 0.75 HET_AB_LET_rotation = 0.75
HET_AB_TOT_min = 0.15 HET_AB_TOT_min = 0.15
cut_HET_AB_TOT_min = 0xd3 cut_HET_AB_TOT_min = 0xd3
HET_AB_p_1d_A_min = 3.1 HET_AB_p_1d_A_min = 3
cut_HET_AB_p_1d_A_min = 0x119 cut_HET_AB_p_1d_A_min = 0x118
HET_AB_he_1d_A_min = 12.3 HET_AB_he_1d_A_min = 12.3
cut_HET_AB_he_1d_A_min = 0x139 cut_HET_AB_he_1d_A_min = 0x139
HET_AB_ratio_min = 1 HET_AB_ratio_min = 1
HET_AB_X_offset := 0x0 HET_AB_X_offset := 0x0
HET_AB_1D_PHA = 1.2
HET_AB_1D_PHA_l := 0x4
HET_AB_e_min = 0.001 HET_AB_e_min = 0.001
HET_AB_e_max = 0x1 HET_AB_e_max = 0x1
HET_AB_p_min = 0xc HET_AB_p_min = 0xc
@ -713,10 +706,9 @@ HET_ABC_TOT_p_min = 6
cut_HET_ABC_TOT_e_min := 0xaf cut_HET_ABC_TOT_e_min := 0xaf
cut_HET_ABC_TOT_p_min := 0xf8 cut_HET_ABC_TOT_p_min := 0xf8
define .macro HET_TVCAL define .macro HET_TVCAL
closing include file het_calib.l3, line 352, level 1 closing include file het_calib.l3, line 346, level 1
not opening forward file .het_pen.forward in twopass mode not opening forward file .het_pen.forward in twopass mode
.=R[0x300] # was R[0x3bb] .=R[0x300] # was R[0x3bb]
HET pen code start address R[0x300]
.call HET_INIT [] .call HET_INIT []
@768:09e000e0 SUB R[224]>>0 - R[224]>>0 @768:09e000e0 SUB R[224]>>0 - R[224]>>0
@769:2088b800 ADDI R[0]+35000 @769:2088b800 ADDI R[0]+35000
@ -923,7 +915,6 @@ closing include file GAIN_SEL_C, line 4, level 1
@916:00800000 NOP @916:00800000 NOP
@917:00800000 NOP @917:00800000 NOP
reject_pen = R[0x396] reject_pen = R[0x396]
reject_pen code address R[0x396]
.call GAIN_SEL_C [] .call GAIN_SEL_C []
.call GAIN_SEL ['C1', 'BGO'] .call GAIN_SEL ['C1', 'BGO']
@918:140200e7 CMP R[231]+0 > R[2] @918:140200e7 CMP R[231]+0 > R[2]

File diff suppressed because it is too large Load diff

View file

@ -63,7 +63,9 @@ hist_base = ADDI Z + het_hist_stop_$1
# choose ABC or ABnC # choose ABC or ABnC
CMP CS+cut_C_AB_ratio > AB #CS*BGO_Si*10>AB #ifC = ABC, ifN = ABnC CMP CS+cut_C_AB_ratio > AB #CS*BGO_Si*10>AB #ifC = ABC, ifN = ABnC
.if patch_level >= 1
ifC CMP CS > Z + cut_C_thres ifC CMP CS > Z + cut_C_thres
.endif
.endmacro .endmacro
. = 0x100 #This is from direction 1 , memory mapped to ABnC trigger, starting at 0x100 . = 0x100 #This is from direction 1 , memory mapped to ABnC trigger, starting at 0x100
@ -75,7 +77,14 @@ het_stop_ABnC=.
.print het_stop_ABnC address $. .print het_stop_ABnC address $.
# C must be less than cut_C_thres # C must be less than cut_C_thres
CMP CS < Z+cut_C_thres # and when AB has little energy, either C age must be invalid
CMP AB > Z+cut_AB_leak_thres
C1T = ifN BRNG C1U{3:0}
ifN CMP C1T <= Z+1
C2T = ifN BRNG C2U{3:0}
ifN CMP C2T <= Z+1
ifC CMP CS < Z+cut_C_thres
ifN GOTO reject_stop ifN GOTO reject_stop
.ifdef V_NO_PLC .ifdef V_NO_PLC
@ -237,8 +246,6 @@ Y = ADDI Y - cut_HET_ABC_e_min
# electrons: histogram 128 x 1 using total energy # electrons: histogram 128 x 1 using total energy
CMP Y < Z + cut_HET_ABC_e_max - cut_HET_ABC_e_min CMP Y < Z + cut_HET_ABC_e_max - cut_HET_ABC_e_min
ifC CMP B < Z + cut_C_ABC_electron_maxSSD
ifC CMP A < Z + cut_C_ABC_electron_maxSSD
TOTE = ifC TRIM TOT, cut_HET_ABC_TOT_e_min, 127 TOTE = ifC TRIM TOT, cut_HET_ABC_TOT_e_min, 127
H = ifC ADDI hist_base + hist_HET_ABC_e H = ifC ADDI hist_base + hist_HET_ABC_e

View file

@ -75,3 +75,12 @@ class hetept_l3_trigger(l3.l3):
def __str__(self): def __str__(self):
return str(self.scales()) return str(self.scales())
class l3_config_names(object):
def __init__(self, l3):
self.__dict__.update(l3.names)
def __getitem__(self, n):
return self.__dict__[n]
def config(self):
return self.l3_config_names(self)

View file

@ -22,18 +22,16 @@ class hetept_ppss(ppss_table):
HK_SLOW_cadence = 3600 HK_SLOW_cadence = 3600
DRIBBLE_cadence = 3600 DRIBBLE_cadence = 3600
TEMP_IDX = 4 TEMP_IDX = 4
OH_DC_ESTIMATE = 60 OH_SETPOINT_C = -50
OH_SHIFT = 0 OH_SETPOINT = HK_T_to_ADC(OH_SETPOINT_C)
OH_DCMAX = 70
def __init__(self, ana, dps=None, dps_us=100000, clear_us=810000, OH_degC=-50, verbose=1): def __init__(self, ana, dps=None, dps_us=100000, clear_us=810000, verbose=1):
ppss_table.__init__(self, verbose=verbose) ppss_table.__init__(self, verbose=verbose)
self.ana = ana self.ana = ana
self.dps = dps self.dps = dps
self.dps_us = dps_us self.dps_us = dps_us
self.clear_us = clear_us self.clear_us = clear_us
self.OH_SETPOINT = HK_T_to_ADC(OH_degC, dc_estimate=self.OH_DC_ESTIMATE, shift=self.OH_SHIFT)
self.assemble() self.assemble()
def assemble(self): def assemble(self):
@ -111,10 +109,7 @@ class hetept_ppss(ppss_table):
self.add(ppss_item( 170, ppss_modulus(self.HK_ANA_cadence, 0), read_ana(tag=self.TAG_HK, counter=2, HK=1, clock=1)), search=True, HK=True, ANA=True) # ANA counters and temperatures self.add(ppss_item( 170, ppss_modulus(self.HK_ANA_cadence, 0), read_ana(tag=self.TAG_HK, counter=2, HK=1, clock=1)), search=True, HK=True, ANA=True) # ANA counters and temperatures
# set op-heater # set op-heater
self.add(ppss_item( 175, ppss_modulus( 60, 0), opheater(setpoint=self.OH_SETPOINT, self.add(ppss_item( 175, ppss_modulus( 60, 0), opheater(setpoint=self.OH_SETPOINT)), search=True, OPHEATER=True)
dcmax=self.OH_DCMAX *192//100,
shift = self.OH_SHIFT )
), search=True, OPHEATER=True)
# ICU HK packet parameters, L3 trigger classes, msgs received # ICU HK packet parameters, L3 trigger classes, msgs received
self.add(ppss_item( 4, ppss_modulus( 60, 2), read_counters(tag=0x27, a=0x36, n=4, wsize=1)), search=True, ICU=0x27) self.add(ppss_item( 4, ppss_modulus( 60, 2), read_counters(tag=0x27, a=0x36, n=4, wsize=1)), search=True, ICU=0x27)

View file

@ -11,13 +11,15 @@ class pha(object):
def __init__(self, s=None): def __init__(self, s=None):
if s==None: if s==None:
self.clear() self.clear()
else: elif isinstance(s, str):
self.parse_string(s) self.parse_string(s)
else:
raise TypeError("pha object constructor needs a string")
def clear(self): def clear(self):
self.num = 0 self.num = 0
def parse_string(self, s): def parse_string(self,s):
self.num = int(s,0) self.num = int(s,0)
def __str__(self): def __str__(self):
@ -30,9 +32,9 @@ class pha(object):
r = self.raw_astream() r = self.raw_astream()
p = r p = r
l3 = r l3 = r
return (l3, p) return (l3,p)
def l3_class(self, tclass=0): def l3_class(self,tclass=0):
return 0 return 0
class pha_hetept(pha): class pha_hetept(pha):
@ -49,9 +51,7 @@ class pha_hetept(pha):
self.B = [0]*30 self.B = [0]*30
def parse_string(self, s): def parse_string(self, s):
ss = s.split(None, 94) ss = [int(sss,0) for sss in s.split()]
self.comment = ll[94] if len(ll>94) else None
ss = [int(sss,0) for sss in ss[:94]]
self.mask = ss[0] self.mask = ss[0]
self.trig = ss[1] self.trig = ss[1]
self.lost = ss[2] self.lost = ss[2]
@ -62,8 +62,7 @@ class pha_hetept(pha):
def __str__(self): def __str__(self):
return ("0x%08x 0x%02x %u %u"+3*(" "+30*" %d")) % ( return ("0x%08x 0x%02x %u %u"+3*(" "+30*" %d")) % (
(self.mask, self.trig, self.lost, self.dtime) (self.mask, self.trig, self.lost, self.dtime) + tuple(self.A+self.T+self.B))
+ tuple(self.A+self.T+self.B))
def raw_astream(self): def raw_astream(self):
r = [0xbeef, 0xa128, r = [0xbeef, 0xa128,
@ -78,9 +77,7 @@ class pha_hetept(pha):
while a & 0x3f800: while a & 0x3f800:
a >>= 1 a >>= 1
b >>= 1 b >>= 1
w= ((self.A[i] << 14) w= ((self.A[i] << 14) | ((b & 0x3ff)<<4) | (self.T[i] & 15)) & 0xffffffff
| ((b & 0x3ff)<<4)
| (self.T[i] & 15)) & 0xffffffff
r += [int(w>>16), int(w&0xffff)] r += [int(w>>16), int(w&0xffff)]
return r return r
@ -91,9 +88,7 @@ class pha_hetept(pha):
r[0] |= 0x3fffffff r[0] |= 0x3fffffff
if r[1] & 0xe000: if r[1] & 0xe000:
r[1] |= 0xffff r[1] |= 0xffff
l3 = [ l3 = [ r[0] & 0x3fffff, (r[1]<<16)&0xffff0000 | (r[1]>>16)&0xff00 | (r[0]>>22)&0xff ]
r[0] & 0x3fffff,
(r[1]<<16)&0xffff0000 | (r[1]>>16)&0xff00 | (r[0]>>22)&0xff ]
p = r[0:2] p = r[0:2]
j = 2 j = 2
for i in range(30): for i in range(30):
@ -120,7 +115,6 @@ class pha_tarena(pha):
""" """
STEP TARENA PHA event class STEP TARENA PHA event class
""" """
def clear(self): def clear(self):
self.mask = 0 self.mask = 0
self.time = 0 self.time = 0
@ -136,211 +130,187 @@ class pha_tarena(pha):
self.small_bg = 0 self.small_bg = 0
self.all = 0 self.all = 0
def parse_adc(self, ss):
self.adc = [None if a in 'nx' else int(a,0) for a in ss]
mapping = None
def remap(self, m=None):
if not m:
m=self.mapping
if not m:
return
self.adc = [self.adc[i] for i in m]
def remask(self):
return sum([1<<i for i,a in enumerate(self.adc) if a is not None])
def parse_string(self, s): def parse_string(self, s):
ss = s.split() ss = s.split()
self.time = int(ss[0],0) self.time = int(ss[0],0)
self.fmask = int(ss[1],0) self.mask = int(ss[1],0)
self.parse_adc(ss[2:]) self.adc = ['x' if a == 'x' else int(a,0) for a in ss[2:]]
self.remap() self.large_bg = int(format(self.mask,'#034b')[0+2] == "1")
self.recount() self.small_bg = int(format(self.mask,'#034b')[16+2] == "1")
if self.mask != self.fmask: self.large_hits = format(self.mask,'#034b')[1+2:16+2].count("1")
sys.stderr.write("mask mismatch 0x%08x: %s\n" % (self.mask, s)) self.small_hits = format(self.mask,'#034b')[17+2:].count("1")
def recount(self):
self.mask = self.remask()
self.large_bg = self.adc[0] is not None
self.small_bg = self.adc[16] is not None
self.large_hits = 15 - self.adc[1:16].count(None)
self.small_hits = 15 - self.adc[17:32].count(None)
self.hits = self.large_hits + self.small_hits + self.large_bg + self.small_bg self.hits = self.large_hits + self.small_hits + self.large_bg + self.small_bg
self.ix = 0 self.ix = 0
self.valid = 1 self.valid = 1
self.all = not self.adc.count(None) self.all = 1 if self.adc.count('x') == 0 else 0
def __str__(self): def __str__(self):
return ("%u 0x%08x"+32*" %s") % ( return ("%u 0x%08x"+32*" %s") % (
(self.time, self.mask) + tuple(self.adc)) (self.time, self.mask,) + tuple(self.adc))
def raw_astream(self): def raw_astream(self):
r = [] r = []
for i, a in enumerate(self.adc): for i, a in enumerate(self.adc):
if self.mask & (1<<i) and a is not None: if self.mask & (1<<i):
aa = a | (0xff << 14) if a & 0x2000 else a aa = a | (0xff << 14) if a & 0x2000 else a
r.append( (aa & 0x3fffff) << 10 r += [ (aa & 0x3fffff) << 10 | (self.valid & 0x1) << 6 | (self.ix & 0x1) << 5 | i & 0x1f ]
| (self.valid & 0x1) << 6
| (self.ix & 0x1) << 5
| i & 0x1f )
return r return r
def l3input(self):
l3 = self.raw_astream()
pha = [0]*32
if self.hits == 1:
for i, a in enumerate(self.adc):
if self.mask & (1<<i):
pha[0] = (
((self.dtime & 0x7ff) << 20)
| ((i & 0x1f) << 15)
| ((self.ix & 0x1) << 14)
| (a & 0x3fff)
)
elif self.large_hits + self.large_bg and self.small_hits + self.small_bg:
pha[0] = (
(0b110 << 29)
| ((self.dtime & 0x7ff) << 18)
| ((self.ix & 0x1) << 17)
| (0b0 << 16)
| ((self.all & 0x1) << 15)
| ((self.large_bg & 0x1) << 14)
| ((self.small_bg & 0x1) << 13)
| ((self.large_hits & 0xf) << 9)
| ((self.small_hits & 0xf) << 5)
| (self.hits & 0x1f)
)
pha[2] = self.mask & 0xffffffff
if self.all:
for i in range(16):
pha[i*2+1] = (
((self.valid & 0x1) << 31)
| ((self.ix & 0x1) << 30)
| ((self.adc[i*2] & 0x3fff) << 16)
| ((self.valid & 0x1) << 15)
| ((self.ix & 0x1) << 14)
| ((self.adc[i*2+1] & 0x3fff))
)
else:
index = 1
offset = 0
raise ValueError("this code is broken!")
for i, a0 in enumerate(self.adc[offset:]):
if self.mask & (1<<i):
for j, a1 in enumerate(self.adc[i+1:]):
if self.mask & (1<<(j+i+1)):
pha[index] = (
((self.valid & 0x1) << 31)
| ((self.ix & 0x1) << 30)
| ((a0 & 0x3fff) << 16)
| ((self.valid & 0x1) << 15)
| ((self.ix & 0x1) << 14)
| (a1 & 0x3fff)
)
else:
pha[index] = (
((self.valid & 0x1) << 31)
| ((self.ix & 0x1) << 30)
| ((a0 & 0x3fff) << 16)
| 0x0000
)
index += 2
offset = j+i+2
break
else:
m = self.mask >> 16
if self.small_hits or self.small_bg:
m = self.mask & 0xffff
pha[0] = (
(0b100 << 29)
| ((self.dtime & 0x7ff) << 18)
| ((self.ix & 0x1) << 17)
| ((self.small_hits & 0xffff) << 16)
| (m & 0xffff)
)
index = 1
i = 0
m = self.mask
while m:
while not m&1:
i += 1
m >>= 1
pha[index] = (
((self.valid & 0x1) << 31)
| ((self.ix & 0x1) << 30)
| ((self.adc[i] & 0x3fff) << 16)
)
while m and not m&1:
i += 1
m >>= 1
if m:
pha[index] |= (
((self.valid & 0x1) << 15)
| ((self.ix & 0x1) << 14)
| (self.adc[i] & 0x3fff)
)
i += 1
m >>= 1
index += 2
return (l3,pha)
def l3_class(self):
return self.ix | (int(self.hits > 1) << 1)
class pha_step(pha_tarena): class pha_step(pha_tarena):
""" """
STEP EM PHA event class STEP EM PHA event class
""" """
from solo.step.ixmsg import ixmsg
mapping = ixmsg.LARGE_PIXELS + ixmsg.SMALL_PIXELS
def parse_string(self,s): def parse_string(self,s):
ss = s.split() ss = s.split()
self.ix = int(ss[1],16) & 1 self.ix = int(ss[1],16) & 1
self.time = int(ss[7],0) self.time = int(ss[7],0)
self.dtime = int(ss[9],0) self.dtime = int(ss[9],0)
self.base = int(ss[13],0) self.base = int(ss[13],0)
self.parse_adc(ss[14:]) self.adc = ['x' if a == 'x' else np.clip(int(a,0), -4096, 4095) for a in ss[14:]]
self.remap() self.mask = 0
self.recount() for i in range(32):
if self.adc[i] != 'x':
self.mask += 1 << i
self.valid = 1
self.large_bg = int(format(self.mask,'#034b')[0+2] == "1")
self.small_bg = int(format(self.mask,'#034b')[16+2] == "1")
self.large_hits = format(self.mask,'#034b')[1+2:16+2].count("1")
self.small_hits = format(self.mask,'#034b')[17+2:].count("1")
self.hits = self.large_hits + self.small_hits + self.large_bg + self.small_bg
self.all = 1 if self.adc.count('x') == 0 else 0
def l3input(self):
# l3 (same as astream for now)
l3 = []
for i, a in enumerate(self.adc):
if self.mask & (1<<i):
aa = a | (0xff << 14) if a & 0x2000 else a
l3 += [ (aa & 0x3fffff) << 10 | (self.valid & 0x1) << 6 | (self.ix & 0x1) << 5 | i & 0x1f ]
class pha_step_pha(pha_step): # pha
""" p = [0]*32
STEP TM PHA event class if self.hits == 1:
""" # single hit
def parse_string(self,s): for i, a in enumerate(self.adc):
ss = s.split() if self.mask & (1<<i):
self.ix = int(ss[1],0) & 1 p[0] = ((self.dtime & 0x7ff) << 20) | ((i & 0x1f) << 15) | ((self.ix & 0x1) << 14) | (a & 0x3fff)
self.fmask = int(ss[2],0) elif self.hits > 1:
self.dtime = int(ss[3],0) # multi hits
self.parse_adc(ss[4:]) if self.large_hits and self.small_hits:
self.remap() # multi hits mixed, small AND large
self.recount() # header
p[0] = (0b110 << 29) | ((self.dtime & 0x7ff) << 18) | ((self.ix & 0x1) << 17) | (0b0 << 16) | ((self.all & 0x1) << 15) | ((self.large_bg & 0x1) << 14) | ((self.small_bg & 0x1) << 13) | ((self.large_hits & 0xf) << 9) | ((self.small_hits & 0xf) << 5) | (self.hits & 0x1f)
p[2] = self.mask & 0xffffffff
# adc words
if self.all:
# all bit set, all adc words
for i in range(16):
p[i*2+1] = ((self.valid & 0x1) << 31) | ((self.ix & 0x1) << 30) | ((self.adc[i*2] & 0x3fff) << 16) | ((self.valid & 0x1) << 15) | ((self.ix & 0x1) << 14) | ((self.adc[i*2+1] & 0x3fff))
else:
# all bit not set, only hit pixels
index = 1
offset = 0
for i, a0 in enumerate(self.adc[offset:]):
if self.mask & (1<<i):
for j, a1 in enumerate(self.adc[i+1:]):
if self.mask & (1<<(j+i+1)):
p[index] = ((self.valid & 0x1) << 31) | ((self.ix & 0x1) << 30) | ((a0 & 0x3fff) << 16) | ((self.valid & 0x1) << 15) | ((self.ix & 0x1) << 14) | (a1 & 0x3fff)
else:
p[index] = ((self.valid & 0x1) << 31) | ((self.ix & 0x1) << 30) | ((a0 & 0x3fff) << 16) | 0x0000
index += 2
offset = j+i+2
break
else:
# multi hits, small OR large
# header
m = ((self.mask & 0xffff0000) >> 16) if (self.small_hits or self.small_bg) else self.mask & 0xffff
p[0] = (0b100 << 29) | ((self.dtime & 0x7ff) << 18) | ((self.ix & 0x1) << 17) | ((self.small_hits & 0xffff) << 16) | (m & 0xffff)
# all bit not set, only hit pixels
index = 1
offset = 0
for i, a0 in enumerate(self.adc[offset:]):
if self.mask & (1<<i):
for j, a1 in enumerate(self.adc[i+1:]):
if self.mask & (1<<(j+i+1)):
p[index] = ((self.valid & 0x1) << 31) | ((self.ix & 0x1) << 30) | ((a0 & 0x3fff) << 16) | ((self.valid & 0x1) << 15) | ((self.ix & 0x1) << 14) | (a1 & 0x3fff)
else:
p[index] = ((self.valid & 0x1) << 31) | ((self.ix & 0x1) << 30) | ((a0 & 0x3fff) << 16) | 0x0000
index += 2
offset = j+i+2
break
else:
p = []
# throw away unused words
for i,item in enumerate(p[::-1]):
if item != 0:
p = p[0:-i]
break
return (l3,p)
def l3_class(self):
return self.ix | (int(self.hits > 1) << 1)
def parse_stream(s): def parse_stream(s):
ss=None
pha=None
if s[:4]=="ITF ": if s[:4]=="ITF ":
sss = s.split(None,3) sss = s.split(None,3)
if sss[2] == "0x57ea": if sss[2] == "0x57ea":
return pha_hetept(sss[3]) ss=sss[3]
kind = 'hetept'
if sss[2] == "0x58ea": if sss[2] == "0x58ea":
return pha_step(sss[3]) ss=sss[3]
kind = 'step'
if s[:8]=="EHETEPT ": if s[:8]=="EHETEPT ":
return pha_hetept(s[8:]) ss = s[8:]
kind = 'hetept'
if s[:2]=="0x":
ss = s
kind = 'hetept'
if s[:3] == "IT ": if s[:3] == "IT ":
return pha_tarena(s[3:]) ss = s[3:]
kind = "tarena"
if s[:4] == "GEN ":
ss = s[4:]
kind = "generic"
def read_phas_from_file(files=None, n=1, mod=None): if ss:
phas = [] if kind == 'hetept':
i = 0 pha = pha_hetept(ss)
for s in fileinput.input(files): if kind == 'step':
if mod or not i%mod: if not ss.split()[0] == 'TRUNCATED':
phas.append(parse_stream(s)) pha = pha_step(ss)
i += 1 if kind == 'tarena':
if n and i>=n: pha = pha_tarena(ss)
break if kind == 'generic':
pha = pha(ss)
return pha
def read_phas_from_file(fn, n=None, mod=None):
with open(fn,'r') as f:
phas = []
if n is None:
# read all lines
n = 1000000000000
i = 0
while i < n:
l = f.readline()
if not l:
break
p = parse_stream(l)
if p:
if not mod or not i%mod:
phas.append(p)
i += 1
return phas return phas
def main(argv): def main(argv):
@ -349,7 +319,7 @@ def main(argv):
F = None F = None
for o,v in opt: for o,v in opt:
if o=='-F': if o=='-F':
F = v F = v #here F is changed to arguments from command line
import fileinput import fileinput
for s in fileinput.input(files): for s in fileinput.input(files):
p = parse_stream(s) p = parse_stream(s)

View file

@ -228,7 +228,7 @@ class l3(object):
def set_name(self, n, a, is_define=False): def set_name(self, n, a, is_define=False):
if n in self.defines and self.names[n] != a and verbose>=1 and not self.passtwo: if n in self.defines and self.names[n] != a and verbose>=1 and not self.passtwo:
log_write("Warning: redefining %s := %s, was %s\n" % log_write("Warning: redefining %s := 0x%03x, was 0x%03x\n" %
(n, a, self.names[n])) (n, a, self.names[n]))
if n in self.forwards: if n in self.forwards:
if self.names[n] != a: if self.names[n] != a:
@ -250,15 +250,6 @@ class l3(object):
for n in self.forwards: for n in self.forwards:
f.write("%s = %s\n" % (n,self.names[n])) f.write("%s = %s\n" % (n,self.names[n]))
class l3_config_names(object):
def __init__(self, l3):
self.__dict__.update(l3.names)
def __getitem__(self, n):
return self.__dict__[n]
def config(self):
return self.l3_config_names(self)
def reset_names(self, names=None, forwards=False): def reset_names(self, names=None, forwards=False):
if names is None: if names is None:
names = self.names.keys() names = self.names.keys()
@ -591,7 +582,7 @@ class l3(object):
ny = 0 ny = 0
self.issue_cmd(cc, self.mnems[m][0], x=x, i=nx, y=y, ii=ny) self.issue_cmd(cc, self.mnems[m][0], x=x, i=nx, y=y, ii=ny)
return s return s
def parse_MULI(self, s, m, cc): def parse_MULI(self, s, m, cc):
import numbers import numbers
s, x =self.E.parse_RSPEC(s) s, x =self.E.parse_RSPEC(s)
@ -606,7 +597,16 @@ class l3(object):
if not isinstance(n, numbers.Integral) or not isinstance(ns, numbers.Integral): if not isinstance(n, numbers.Integral) or not isinstance(ns, numbers.Integral):
raise ValueError("Error: not integers: %s >> %s\n" % (n, ns)) raise ValueError("Error: not integers: %s >> %s\n" % (n, ns))
elif isinstance(n, float): elif isinstance(n, float):
n, ns = muli_float(n) f = n
ff = n
n = int(ff)
while n < 0x7ff and ns < 15:
ff *= 2
ns += 1
n = int(ff)
if f>0 and not n:
raise ValueError("Error: float underlow: %g\n" % f)
if not (0 <= ns < 16): if not (0 <= ns < 16):
raise ValueError("Error: MULI SHIFT constant out of range [0..15] %d\n" % ns) raise ValueError("Error: MULI SHIFT constant out of range [0..15] %d\n" % ns)
if not (0 <= n < 0x1000): if not (0 <= n < 0x1000):
@ -1382,7 +1382,7 @@ class expression_parser(object):
return s, n return s, n
raise ValueError("Error: Unknown special name '%s'\n" % t) raise ValueError("Error: Unknown special name '%s'\n" % t)
functions = ["log2", "power", "floor", "ceil", "LOG", "LOGR", "def", "MRND"] functions = ["log2", "power", "floor", "ceil", "LOG", "LOGR", "def"]
def parse_FUNC(self, s, t=None): def parse_FUNC(self, s, t=None):
"""parses the compiler functions starting with a $ sign""" """parses the compiler functions starting with a $ sign"""
@ -1416,10 +1416,6 @@ class expression_parser(object):
if not tt.id_p(): if not tt.id_p():
raise ValueError("Syntax Error: Identifier expected: %s\n" % tt) raise ValueError("Syntax Error: Identifier expected: %s\n" % tt)
n = int(tt.isin(self.names)) n = int(tt.isin(self.names))
elif t=="MRND":
s,n = self.parse_EXPR(s)
n,ns = muli_float(n)
n /= 2.0**ns
else: else:
raise ValueError("Error: Unknown function '%s'\n" % t) raise ValueError("Error: Unknown function '%s'\n" % t)
s = s.parse_char(')') s = s.parse_char(')')
@ -1586,19 +1582,6 @@ class macro(object):
r += '$'+rrr r += '$'+rrr
return r return r
def muli_float(n):
f = n
ff = n
n = int(ff)
ns = 0
while n < 0x7ff and ns < 15:
ff *= 2
ns += 1
n = int(ff)
if f>0 and not n:
raise ValueError("Error: float underlow: %g\n" % f)
return (n, ns)
class for_loop(object): class for_loop(object):
def __init__(self, var, start, end, step=None): def __init__(self, var, start, end, step=None):
self.var = var self.var = var

200
solo/l3sim.py Executable file → Normal file
View file

@ -1,7 +1,9 @@
#! /usr/bin/python3 #! /usr/bin/python3
# encoding: utf-8 # encoding: utf-8
import sys, math, numpy, os # completely untested
import sys, numpy, os
if __name__=="__main__": if __name__=="__main__":
sys.path[1:1] = [os.path.abspath(os.path.join(os.path.dirname(__file__),".."))] sys.path[1:1] = [os.path.abspath(os.path.join(os.path.dirname(__file__),".."))]
@ -168,8 +170,6 @@ def log2(i):
c = (b<<4) | logtable[x&0x7f] c = (b<<4) | logtable[x&0x7f]
return c return c
def invlog2(x):
return ((128 + logtable.index(x&15)) << (x>>4)) / 256
class l3trigger(object): class l3trigger(object):
@ -457,7 +457,6 @@ class l3pipe(l3trigger):
def __init__(self, *a, **aa): def __init__(self, *a, **aa):
l3trigger.__init__(self, *a, **aa) l3trigger.__init__(self, *a, **aa)
self.verbose = 0 self.verbose = 0
self.tc_extract = False
self.reset() self.reset()
def reset(self): def reset(self):
@ -474,11 +473,10 @@ class l3pipe(l3trigger):
b = self.buffers[p&0xf] b = self.buffers[p&0xf]
e = b[0] >> 8 e = b[0] >> 8
w = b[0] & 0xff w = b[0] & 0xff
b.extend(self.last_pha) while w<255 and self.last_pha:
e += len(self.last_pha) b.append(self.last_pha.pop(0))
b[256:]=[] w += 1
w=len(b)-1 b[0] = (max(e+1, 0xffffff) << 8) | w
b[0] = (max(e, 0xffffff) << 8) | w
if self.verbose > 0: if self.verbose > 0:
l3trigger.pha(self, p) l3trigger.pha(self, p)
@ -496,7 +494,7 @@ class l3pipe(l3trigger):
import struct import struct
return struct.pack(">"+"I"*0x40000, *self.memory) return struct.pack(">"+"I"*0x40000, *self.memory)
def save_data(self, outname): def save_data(self, outname="l3sim.npy"):
numpy.save(outname, self.memory) numpy.save(outname, self.memory)
def compile(self, src): def compile(self, src):
@ -504,197 +502,33 @@ class l3pipe(l3trigger):
if isinstance(src, str): if isinstance(src, str):
src = [src] src = [src]
self.asm = l3asm() self.asm = l3asm()
args = ["-2qd"] + src args = ["-2qd"] + ["-I "+p for p in sys.path if "/python/l3" in p] + src
sys.stderr.write("l3.compile(%s)\n" % str(args)) sys.stderr.write("l3.compile(%s)\n" % str(args))
self.asm.compile(args) self.asm.compile(args)
self.asm.load(self.l3code) self.asm.load(self.l3code)
self.debug_regs = self.asm.debug_regs self.debug_regs = self.asm.debug_regs
def event(self, l): def main(argv):
if self.verbose > 4:
sys.stderr.write("INPUT: %s\n" % l.strip())
import solo.i128event
ll=l.split()
if ll[0]=="CCSDS":
l = " ".join(ll[10:])
ll[:10]=[]
if ll[0]=="PHA":
if len(ll) >= 94:
return self.hetept_event(l[6:], solo.i128event.pha_hetept)
else:
return self.step_event(l[6:], solo.i128event.pha_step_pha)
elif ll[0]=="ITF":
if len(ll) <= 3:
return
if ll[3]=="PHA":
self.PHA_scale=ll[5:]
return
# print this?
elif ll[2]=="0x57ea":
return self.hetept_event(l[16:], solo.i128event.pha_hetept)
elif ll[2]=="0x58ea" and "TRUNC" not in l:
return self.step_event(l[16:], solo.i128event.pha_step)
return
elif ll[0]=="EHETEPT":
return self.hetept_event(l[8:], solo.i128event.pha_hetept)
elif ll[0]=="IT":
return self.step_event(l[3:], solo.i128event.pha_tarena)
elif l[:11]=="REG STATUS " and self.tc_extract:
try:
self.trigger_class = int(l.split()[6], 0)
except (IndexError, ValueError):
if self.verbose > 3:
sys.stderr.write("? "+l)
return
else:
try:
tt = [int(ttt,0) for ttt in l.split()]
except ValueError:
if self.verbose > 3:
sys.stderr.write("? "+l)
return
if 2 <= len(tt) <= 33:
self.run(tt[0], tt[1:])
return True
def het_event(self, l, pha_class):
if 2 < self.verbose < 4:
sys.stderr.write("HETEPT: %s\n" % t.strip())
try:
pha = pha_class(l)
except Exception as e:
if self.verbose > 3:
sys.stderr.write("%s\n" % repr(e))
return
if self.MC_clip_A:
pha.A = map(self.clip, pha.A)
pha.trig = self.hetept_L2(pha)
c = pha.l3_class(self.trigger_class)
l3, self.last_pha = pha.l3input()
self.run(c, l3)
return True
def step_event(self, l, pha_class):
if 2 < self.verbose < 4:
sys.stderr.write("STEP: %s\n" % l.strip())
try:
pha = pha_class(l)
except Exception as e:
if self.verbose > 3:
sys.stderr.write("%s\n" % repr(e))
return
c = pha.l3_class()
l3, self.last_pha = pha.l3input()
self.run(c, l3)
return True
# solo hetept coefficients A clipping model
MC_clip_A = False
clip_c = 35000.
clip_a = 47000.
clip_b = (clip_a - clip_c)*math.log((clip_a - clip_c)/clip_a) + clip_c
def clip(self, a):
if a < self.clip_c:
return a
r = (self.clip_b - a) / (self.clip_a - self.clip_c)
if r<-20:
return int(self.clip_a)
return int(self.clip_a*(1-math.exp(r)))
def hetept_L2(self, pha):
return pha.trig
def main(argv, l3class=l3pipe, src=[], T="TEMP", path=[]):
from getopt import getopt from getopt import getopt
import fileinput import fileinput
opts,files = getopt(argv[1:], "f:c:e:vqD:O:M:V:T:C:U:") opts,files = getopt(argv[1:], "f:e:vq")
defines = [] l3 = l3trigger()
events = []
loaded = False
unit = None
for o,v in opts:
if o=="-U":
if v.upper()=="STEP":
unit = "STEP"
T="T_STEP"
src=["step.l3"]
path = [
os.path.abspath(os.path.join(
os.path.dirname(__file__),
"step/l3" ))
]
elif v.upper() in "HETEPTHET":
unit = "HETEPT"
T="T_HET1"
src=["ept.l3", "het_stopping.l3", "het_pen.l3"]
path = [
os.path.abspath(os.path.join(
os.path.dirname(__file__),
"hetept/l3"))
]
else:
raise ValueError("unknown %s %s" % (o,v))
l3 = l3class()
for p in path:
defines.append("-I%s" % p)
if unit=="HETEPT":
l3.tc_extract = True
for o,v in opts: for o,v in opts:
if o=='-f': if o=='-f':
f = open(v) f = open(v)
l3.load(f) l3.load(f)
f.close() f.close()
loaded = True
if o=='-c':
l3.compile(defines + [v])
loaded = True
if o=='-e': if o=='-e':
events.append(v) tt = [int(ttt,0) for ttt in v.split()]
l3.run(tt[0], tt[1:])
if o=='-v': if o=='-v':
l3.verbose = l3.verbose+1 l3.verbose = l3.verbose+1
if o=='-q': if o=='-q':
l3.verbose = l3.verbose-1 l3.verbose = l3.verbose-1
if o=="-O":
defines.append(v)
if o=="-D":
defines.append("-D"+v)
if o=='-M':
defines.append("-DM_"+v)
if o=='-V':
defines.append("-DV_"+v)
if o=='-T':
defines.append("-D%s=%s" % (T, v))
if o=="-C": for t in fileinput.input(files):
if v=="test" or v=="ana": tt = [int(ttt,0) for ttt in t.split()]
from solo.hetept.l1l2 import hetept_l1l2 l3.run(tt[0], tt[1:])
ana = hetept_l1l2(v=="test")
l3.trigger_class = ana.trigger_class()
else:
l3.trigger_class = int(v,0)
l3.tc_extract = False
if o=="-A":
l3.MC_clip_A = True
if not loaded and src:
l3.compile(defines + src)
for e in events:
l3.event(e)
if not events:
import fileinput
for t in fileinput.input(files):
l3.event(t)
return l3
if __name__ == '__main__': if __name__ == '__main__':
main(sys.argv) main(sys.argv)

View file

@ -81,14 +81,9 @@ class patch:
def send_msg0(self, msg, **aa): def send_msg0(self, msg, **aa):
solo.solomsgclass.solomsg(msg).msg0(**aa) solo.solomsgclass.solomsg(msg).msg0(**aa)
def send_l3(self, msg, l3, pad=True, init=True, **flags): def send_l3(self, msg, l3):
smsg = solo.solomsgclass.solomsg(msg) l3.load(solo.solomsgclass.solomsg(msg).l3_code)
if init:
smsg.l3_init(**flags)
l3.load(smsg.l3_code)
if pad:
smsg.l3_pad()
def assert_unit(self, unit): def assert_unit(self, unit):
if not unit in self.config.unit: if not unit in self.config.unit:
raise ValueError("This unit is not %s, but %s" % (unit, self.config.unit)) raise ValueError("This unit is not %s, but %s" % (unit, self.config.unit))

View file

@ -523,26 +523,18 @@ class ppss_table(more_items):
if not isinstance(dps, list): if not isinstance(dps, list):
dps = [d for d in dps.list() if not d.is_drop()] dps = [d for d in dps.list() if not d.is_drop()]
for d in dps: for d in dps:
if not d.is_drop() and modes and (d.name in modes or "*" in modes): if modes and d.name in modes:
d.args["flg_bits"] = 2 d.args["flg_bits"] = 2
if d.name in modes: (flg0_name,flg0_mod), (flg1_name,flg1_mod) = modes[d.name]
(flg0_name,flg0_mod), (flg1_name,flg1_mod) = modes[d.name] flg = d.args.get("flg",0)
else: d.args["flg"] = 2 | flg
(flg0_name,flg0_mod), (flg1_name,flg1_mod) = modes["*"] flg1_item = ppss_item(dp_us+1, modulus_always if flg1_mod else modulus_never, d(msg),
if flg1_mod is not None: DPS=True, dps_name=d.name, MODE=flg1_name)
flg = d.args.get("flg",0) self.add(flg1_item)
d.args["flg"] = 2 | flg r.append(flg1_item)
flg1_item = ppss_item(dp_us+1, modulus_always if flg1_mod else modulus_never, d(msg), d.args["flg"] = 1 & flg
DPS=True, dps_name=d.name, MODE=flg1_name) ii = ppss_item(dp_us, modulus_always if flg0_mod else modulus_never, d(msg),
if flg0_mod is not None: DPS=True, dps_name=d.name, MODE=flg0_name)
self.add(flg1_item)
r.append(flg1_item)
d.args["flg"] = 1 & flg
if flg0_mod is not None:
ii = ppss_item(dp_us, modulus_always if flg0_mod else modulus_never, d(msg),
DPS=True, dps_name=d.name, MODE=flg0_name)
else:
ii = flg1_item
else: else:
ii = ppss_item(dp_us, modulus_always, d(msg), DPS=True, dps_name=d.name) ii = ppss_item(dp_us, modulus_always, d(msg), DPS=True, dps_name=d.name)
self.add(ii, **args) self.add(ii, **args)
@ -708,7 +700,7 @@ class ppss_table(more_items):
tag = m.msg.ad & 0xff tag = m.msg.ad & 0xff
msg_type = m.msg.ad >> 8 msg_type = m.msg.ad >> 8
if tag in tm_tags and msg_type in msg_types and m.mod.cadence(): if tag in tm_tags and msg_type in msg_types and m.mod.cadence():
if not(tag & 0x20 == 0x20) or icu: if not ((tag & 0x20 == 0x20) or icu):
msg_timing = m.msg.ad, m.us, m.mod.phase(), m.mod.cadence(), m.msg.da msg_timing = m.msg.ad, m.us, m.mod.phase(), m.mod.cadence(), m.msg.da
tags[tag].append(msg_timing) tags[tag].append(msg_timing)
elif msg_type == 0x03 and self.dps is not None and sci: # sci packet elif msg_type == 0x03 and self.dps is not None and sci: # sci packet

View file

@ -7,7 +7,7 @@ def acq_time_scan(conf, msg, t=86400, acq_times=range(8), filters=(2,)):
solomsg=solo.solomsgclass.solomsg(islot) solomsg=solo.solomsgclass.solomsg(islot)
for filter in filters: for filter in filters:
for acq_time in acq_times: for acq_time in acq_times:
aa.msg = conf.step_base_config.step_ppss.step_config_all_acq(acq=(acq_time,5))[0] aa.msg = conf.step_base_config.step_ppss.step_config_all_acq(acq=(1,5))[0]
ff.msg = conf.step_base_config.step_ppss.ix_selfilter(filter, ix=3)[0] ff.msg = conf.step_base_config.step_ppss.ix_selfilter(filter, ix=3)[0]
C.scratch = (acq_time<<48) | (filter<<52) | 0xfa00 | C.scratch & 0xff C.scratch = (acq_time<<48) | (filter<<52) | 0xfa00 | C.scratch & 0xff
aa(msg) aa(msg)

View file

@ -3,8 +3,8 @@
"Message table for STEP" "Message table for STEP"
VERSION=9 VERSION=7
SUBVERSION=2 SUBVERSION=1
import sys, os, json import sys, os, json
@ -24,34 +24,29 @@ from . import data as step_data
class step_config(unit_config): class step_config(unit_config):
TYPE = "STEP" TYPE = "STEP"
unit = 'STEP'
IX_THR = [62]*32
def __init__(self, ppss=None, science=None, dps=None, l3=None, def __init__(self, ppss=None, science=None, dps=None, l3=None,
model=None, env="FAR", variant=None, scratch=0, unit='STEP', model=None, variant=None,
small=False, ix1_thr=None, ix2_thr=None,
**kwargs): temperature=-40, env='FAR',
name = "", dp_flag=0, version=0,
**kwargs):
self.args = {} if ix1_thr is None:
self.args.update(kwargs) ix1_thr = [62] * 32
self.args["model"] = model if ix2_thr is None:
self.args["variant"] = variant ix2_thr = [62] * 32
self.args["env"] = env
self.name = self.args.get("name","")
self.env = environment(env) self.env = environment(env)
self.temperature = self.args.get("temperature", -36) self.temperature = temperature
self.name = name
self.model = model.upper() self.model = model.upper()
self.variant = variant self.variant = variant
self.small = variant and variant.lower() == "small"
self.scratch = scratch
if l3 is None: if l3 is None:
self.l3 = step_l3_trigger.step_l3_trigger( self.l3 = step_l3_trigger.step_l3_trigger(
model=self.model, model=self.model,
variant=variant, variant=variant,
temperature=self.temperature) temperature=temperature)
else: else:
self.l3 = l3 self.l3 = l3
@ -61,30 +56,33 @@ class step_config(unit_config):
self.science = science self.science = science
if dps is None: if dps is None:
self.dps = step_dps.step_dps(self.l3, self.science, env, self.dps = step_dps.step_dps(self.l3, self.science, env, flg=dp_flag, version=version)
main_cadence = self.args.get("main_cadence", 10),
nominal_tag = self.args.get("nominal_tag", None),
version=self.args.get("version", 0))
else: else:
self.dps = dps self.dps = dps
if ppss is None: if ppss is None:
if self.small: try:
# This is variant=="small" v = variant.lower()
small=True if v == 'small':
large=False small=True
else: large=False
else:
large=True
small=False
except:
large=True large=True
# we may pass a tuple in the small= argument for interleaved pixel mode. small=False
self.small = small
if "CLOSE" in env or "close" in env:
close = True
else:
close = False
self.ppss = step_ppss.step_ppss( self.ppss = step_ppss.step_ppss(
large=large, small=small, large=large, small=small,
dps = self.dps, dps = self.dps,
ix1_thr=self.args.get("ix1_thr", self.IX_THR), ix1_thr=ix1_thr, ix2_thr=ix2_thr, acq_time=6,
ix2_thr=self.args.get("ix2_thr", self.IX_THR), close=close, model=self.model)
acq_time=self.args.get("acq_time", 6),
model=self.model )
else: else:
self.ppss = ppss self.ppss = ppss
@ -94,31 +92,22 @@ class step_config_table(config_table):
CONFIG = step_config CONFIG = step_config
SUBVERSION_HIGHRATE= 0x100 def assemble(self, start_modulus=60, hk_start_modulus=60, start_seq=True,
SUBVERSION_LOWRATE = 0x000 ix1_thr=None, ix2_thr=None, **kwargs):
SCRATCH_LARGE = (0x0100 << 48)
SCRATCH_SMALL = (0x0200 << 48)
SCRATCH_HIGHRATE = (0x0400 << 48) | SUBVERSION_HIGHRATE
SCRATCH_LOWRATE = (0x0800 << 48) | SUBVERSION_LOWRATE
SCRATCH_TEMP = (0x1000 << 48)
# scratch layout
# [ 7: 0] subversion, patches uploaded on to of this config.
# [15: 8] dps version, mode switches that change DPS .defs
# [31:16] version, increment for each new config
# [47:32] calibration, 10×T [K]
# [63:48] modes, markers for modes set by idx entries.
def assemble(self, start_modulus=60, hk_start_modulus=60, start_seq=True, **kwargs):
if "uploadtest" in kwargs and kwargs["uploadtest"]==True: if "uploadtest" in kwargs and kwargs["uploadtest"]==True:
self[1] = self.hk(start_modulus=start_modulus) self[1] = self.hk(start_modulus=start_modulus)
self[2] = self.hk(start_modulus=start_modulus) self[2] = self.hk(start_modulus=start_modulus)
return return
sys.stderr.write("Creating HK configuration @ index 1\n") if ix1_thr is None:
ix1_thr = [62] * 32
if ix2_thr is None:
ix2_thr = [62] * 32
sys.stdout.write("Creating HK configuration @ index 1\n")
self[1] = self.hk(start_modulus=hk_start_modulus) self[1] = self.hk(start_modulus=hk_start_modulus)
sys.stderr.write("Creating Nominal configuration @ index 2\n") sys.stdout.write("Creating Nominal configuration @ index 2\n")
self[2] = self.cfg_to_idx(self.nominal, fill=True, pad=True, set_index=True, self[2] = self.cfg_to_idx(self.nominal, fill=True, pad=True, set_index=True,
start_modulus=start_modulus, start_seq=start_seq, write_scratch=True) start_modulus=start_modulus, start_seq=start_seq, write_scratch=True)
self[3] = self[1] self[3] = self[1]
@ -126,83 +115,30 @@ class step_config_table(config_table):
self.configs = [None for i in range(21)] self.configs = [None for i in range(21)]
self.configs[2] = self.nominal self.configs[2] = self.nominal
self.make_mode_config(index=4, large=True) self.make_mode_config(ix1_thr=ix1_thr, ix2_thr=ix2_thr, **kwargs)
if len(self.env_diffs)>1:
self.make_hightelemetry(index=6, start_modulus=start_modulus, nominal_tag="NOM_UNSTABLE") self.make_env_config()
self[7] = self[2]
self.env_configs = {
"nominal": self.nominal,
"highrate": self.configs[6],
}
if len(self.temp_diffs)>1: if len(self.temp_diffs)>1:
self.make_temp_config(index=8, scratch=self.scratch | self.SCRATCH_TEMP) self.make_temp_config()
for t in self.temperatures:
self.configs[self.temperatures[t]] = self.temp_diffs[t]
self[16] = self._sft = self.sft() num = self.empty()[0]
self[17] = self._fft = self.fft() self[num] = self._sft = self.sft()
self[num+1] = self._fft = self.fft()
self.extras(**kwargs)
def extras(self, **kwargs):
kwargs.update(self.nominal.args)
if self.model.lower() not in ['fm', 'fs']: if self.model.lower() not in ['fm', 'fs']:
self[14] = self._calib = self.calib(**kwargs) self[num+2] = self._calib = self.calib(ix1_thr=ix1_thr, ix2_thr=ix2_thr)
self[15] = self._pcalib = self.pcalib(**kwargs) self[num+3] = self._pcalib = self.pcalib(ix1_thr=ix1_thr, ix2_thr=ix2_thr)
def make_env_diffs(self, *a, **aa): def make_mode_config(self, **kwargs):
pass small = step_config(unit=self.unit, model=self.model, variant='SMALL',
def make_env_config(self): temperature=self.nominal.temperature, env=self.nominal.env, **kwargs)
pass self.mode_to_small = small - self.nominal
self.mode_to_large = self.nominal - small
def make_mode_config(self, index=4, large=True, ref=None, **kwargs): sys.stdout.write("Creating small pixel configuration @ index 4\n")
if ref is None: self[4] = self.cfg_to_idx(self.mode_to_small, partial=True)
ref = self.nominal sys.stdout.write("Creating large pixel configuration @ index 5\n")
args = {} self[5] = self.cfg_to_idx(self.mode_to_large, partial=True)
args.update(ref.args) self.modes["small"], self.modes["large"] = 4, 5
args.update(kwargs)
args["variant"] = "SMALL"
scratch = self.scratch | self.SCRATCH_SMALL
self.configs[index] = step_config(scratch=scratch, **args)
self.mode_to_small = self.configs[index] - ref
sys.stderr.write("Creating small pixel configuration @ index %d\n" % index)
self[index] = self.cfg_to_idx(
self.mode_to_small, partial=True,
scratch=scratch, write_scratch=True, send_scratch=True)
self.modes["small"] = index
if large:
if large<4:
large = index+1
sys.stderr.write("Creating large pixel configuration @ index %d\n" % large)
self.mode_to_large = ref - self.configs[index]
self[large] = self.cfg_to_idx(
self.mode_to_large, partial=True,
scratch=self.scratch | self.SCRATCH_LARGE,
write_scratch=True, send_scratch=True)
self.modes["large"] = large
def make_hightelemetry(self, index=6, low_cadence=1, start_modulus=3600, ref=None, **kwargs):
if ref is None:
ref = self.nominal
args = {}
args.update(ref.args)
args.update(kwargs)
args["main_cadence"] = low_cadence
scratch = self.scratch & ~0xff00 | self.SUBVERSION_HIGHRATE
self.configs[index] = step_config(scratch=scratch, l3=self.nominal.l3, **args)
self.mode_to_hightelemetry = self.configs[index] - ref
sys.stderr.write("Creating high telemetry configuration @ index %d\n" % index)
self[index] = self.cfg_to_idx(
self.mode_to_hightelemetry, partial=True,
scratch=scratch | self.SCRATCH_HIGHRATE,
write_scratch=True, start_modulus=start_modulus,
restart=True
)
def start_seq(self, ppss=None, start_modulus=60, ix1_thr=None, ix2_thr=None): def start_seq(self, ppss=None, start_modulus=60, ix1_thr=None, ix2_thr=None):
start = message_block() start = message_block()
@ -323,7 +259,7 @@ class step_config_table(config_table):
return self.mode_to_fft return self.mode_to_fft
def calib(self, start_modulus=60, ix1_thr=None, ix2_thr=None, **aa): def calib(self, start_modulus=60, ix1_thr=None, ix2_thr=None):
if ix1_thr is None: if ix1_thr is None:
ix1_thr = self.ix1_thr ix1_thr = self.ix1_thr
if ix2_thr is None: if ix2_thr is None:
@ -350,7 +286,7 @@ class step_config_table(config_table):
return self.mode_to_calib return self.mode_to_calib
def pcalib(self, start_modulus=60, ix1_thr=None, ix2_thr=None, **aa): def pcalib(self, start_modulus=60, ix1_thr=None, ix2_thr=None):
if ix1_thr is None: if ix1_thr is None:
ix1_thr = self.ix1_thr ix1_thr = self.ix1_thr
if ix2_thr is None: if ix2_thr is None:
@ -411,10 +347,12 @@ class step_config_table(config_table):
return self.mode_to_pulser_pha return self.mode_to_pulser_pha
def do_small(self, msg=None): def do_small(self, msg=None):
self[self.modes["small"]](self.connect(msg)) msg = self.connect(msg)
self[4](msg)
def do_large(self, msg=None): def do_large(self, msg=None):
self[self.modes["large"]](self.connect(msg)) msg = self.connect(msg)
self[5](msg)
def do_fft(self, msg=None): def do_fft(self, msg=None):
msg = self.connect(msg) msg = self.connect(msg)
@ -432,10 +370,14 @@ class step_config_table(config_table):
msg = self.connect(msg) msg = self.connect(msg)
self._pcalib(msg) self._pcalib(msg)
def do_lowrate(self, msg=None): def do_close(self, msg=None):
msg = self.connect(msg) msg = self.connect(msg)
self[6](msg) self[6](msg)
def do_far(self, msg=None):
msg = self.connect(msg)
self[7](msg)
def set_thr(self, ix1_thr=None, ix2_thr=None): def set_thr(self, ix1_thr=None, ix2_thr=None):
if ix1_thr is not None: if ix1_thr is not None:
self.ix1_thr = ix1_thr self.ix1_thr = ix1_thr
@ -443,12 +385,6 @@ class step_config_table(config_table):
self.ix2_thr = ix2_thr self.ix2_thr = ix2_thr
self.assemble() self.assemble()
def icumem_upload(self, addr=0x60000, prefix="step_v%04u" % VERSION):
import solo.cdpu.telecom as tc
tc.write_xml(prefix+'.xml', self.upload(addr))
tc.write_xml(prefix+'_nominal.xml', [tc.send_table_index('STEP', 2)])
tc.write_xml(prefix+'_highrate.xml', [tc.send_table_index('STEP', 6)])
def make_icu_config(self, temp_period=60, rate_period=60, rate_limit=1e4): def make_icu_config(self, temp_period=60, rate_period=60, rate_limit=1e4):
from ..cdpu.telecom import add_event_action, add_parameter_monitoring, set_data_pool_item from ..cdpu.telecom import add_event_action, add_parameter_monitoring, set_data_pool_item
from ..solomsgclass import HK_T_to_ADC as ADC, HK_ADC_to_T as T from ..solomsgclass import HK_T_to_ADC as ADC, HK_ADC_to_T as T
@ -480,23 +416,18 @@ class step_config_table(config_table):
return "\n".join(i.xml() for i in self.icu_config) return "\n".join(i.xml() for i in self.icu_config)
def make_step(model, unit='STEP', temperature=None, enc_base=0x20000, def make_step(model, unit='STEP', orbit="far", temperature=None, enc_base=0x20000,
version=VERSION, scratch=SUBVERSION, **args): version=VERSION, scratch=SUBVERSION, **args):
if model.lower() in ['fm', 'fs']: if model.lower() in ['fm', 'fs']:
temp = get_temperatures(minT=-45, maxT=30, bitvalues="step") temp = get_temperatures(minT=-45, maxT=30, bitvalues="step")
else: else:
temp = get_temperatures(minT=-40, maxT=30, bitvalues="step") temp = get_temperatures(minT=-40, maxT=30, bitvalues="step")
if isinstance(temperature, list): if temperature is not None:
temp = temperature temp[:0]=[temperature]
elif temperature is not None: if orbit=="far":
temp = [temperature] orbit = ["FAR","CLOSE"]
elif model.lower() in ['fm', 'fs']:
temp = get_temperatures(minT=-45, maxT=30, bitvalues="step")
else:
temp = get_temperatures(minT=-40, maxT=30, bitvalues="step")
table = step_config_table(model=model, unit=unit, enc_base=enc_base, table = step_config_table(model=model, unit=unit, enc_base=enc_base,
temperature=temp, env=orbit, temperature=temp,
version=version, scratch=scratch, **args) version=version, scratch=scratch, **args)
return table return table

View file

@ -8,15 +8,16 @@ FS_ix1_thr = [11] * 32
FS_ix2_thr = [11] * 32 FS_ix2_thr = [11] * 32
def make(): def make():
return step_base_config.make_step( config_page=0x10000, return step_base_config.make_step(
unit = 'STEP',
model = 'FS', model = 'FS',
orbit = 'FAR', orbit = 'far',
temperature = [-36], temperature = -36,
ix1_thr = FS_ix1_thr, ix1_thr=FS_ix1_thr, ix2_thr=FS_ix2_thr,
ix2_thr = FS_ix2_thr,
start_modulus=3600 start_modulus=3600
) )
table = make() table = make()
def main(): def main():
table.main() step_base_config.main(table, "step_config_fs_v%04d" % table.version)

View file

@ -217,7 +217,43 @@ class LL_STEP(science_data):
self.append(step_data(l3, "STEP_energy_res_bkgnd", "LOWLATENCY", 60, "float").d(**LL_std).add(step_bins(4*keV, 80*keV, n=24, p1=0, p2=0, cu_gap=True))) self.append(step_data(l3, "STEP_energy_res_bkgnd", "LOWLATENCY", 60, "float").d(**LL_std).add(step_bins(4*keV, 80*keV, n=24, p1=0, p2=0, cu_gap=True)))
self.append(step_data(l3, "STEP_time_res", "LOWLATENCY", 1, "varLL", 1).d(**LL_std).add(step_bins(4*keV, 60*keV, n=4, p1=1, p2=15, dp=15))) self.append(step_data(l3, "STEP_time_res", "LOWLATENCY", 1, "varLL", 1).d(**LL_std).add(step_bins(4*keV, 60*keV, n=4, p1=1, p2=15, dp=15)))
self.append(step_data(l3, "STEP_time_res_bkgnd", "LOWLATENCY", 1, "varLL", 1).d(**LL_std).add(step_bins(4*keV, 60*keV, n=4, p1=0, p2=0))) self.append(step_data(l3, "STEP_time_res_bkgnd", "LOWLATENCY", 1, "varLL", 1).d(**LL_std).add(step_bins(4*keV, 60*keV, n=4, p1=0, p2=0)))
self.append(step_multi(l3, "STEP_multi", "LOWLATENCY", 60, "var", 60).d(**LL_std).add(ebins(1, list(range(2,17)), raw=True)))
class AUX_STEP(science_data):
def __init__(self, l3):
self.init()
AUX_std = {"force": "AUXDEFS"}
self.append(step_data(l3, "STEP_time_res", "AUX_STABLE", 1, "log").d(**AUX_std).add(step_bins(4*keV, 80*keV, n=1, p1=1, p2=15, dp=15)))
self.append(step_data(l3, "STEP_time_res_bkgnd", "AUX_STABLE", 1, "log").d(**AUX_std).add(step_bins(4*keV, 80*keV, n=1, p1=0, p2=0)))
self.append(step_data(l3, "STEP_basic", "AUX_STABLE", 10, "var", 10).d(**AUX_std).add(step_bins(4*keV, 80*keV, n=32, p1=1, p2=15, dp=15, cu_gap=True)))
self.append(step_data(l3, "STEP_basic_bkgnd", "AUX_STABLE", 10, "var", 10).d(**AUX_std).add(step_bins(4*keV, 80*keV, n=32, p1=0, p2=0, cu_gap=True)))
class B1_STEP(science_data):
def __init__(self, l3):
self.init()
B1 = {"force": "B1DEFS"}
self.append(step_data(l3, "STEP_basic", "NOM_BURST_1", 1, "var", 1).d(**B1).add(step_bins(4*keV, 80*keV, n=16, p1=0, p2=15, cu_gap=True)))
self.append(step_data(l3, "STEP_eres", "NOM_BURST_1", 1, "var", 1).d(**B1).add(step_bins(4*keV, 80*keV, n=48, p1=1, p2=15, dp=15, cu_gap=True)))
class NOM_STEP(science_data):
def __init__(self, l3):
self.init()
CLOSE = {"env": ("CLOSE"), "force": "NOMDEFS"}
FAR = {"exclude": ("CLOSE"), "force": "NOMDEFS"}
# Close
self.append(step_data(l3, "STEP_basic", "NOM_STABLE", 10, "var", 10).d(**CLOSE).add(step_bins(4*keV, 80*keV, n=8, p1=0, p2=15, dp=1, cu_gap=True)))
self.append(step_data(l3, "STEP_tres_rows", "NOM_STABLE", 1, "var", 1).d(**CLOSE).add(step_bins(4*keV, 60*keV, n=4, p1=1, p2=15, dp=5)))
self.append(step_data(l3, "STEP_tres_cols", "NOM_STABLE", 1, "var", 1).d(**CLOSE).add(step_cols(4*keV, 60*keV, n=4, p1=1, p2=5, dp=1, l=3)))
self.append(step_data(l3, "STEP_tres_bkgnd", "NOM_STABLE", 1, "var", 1).d(**CLOSE).add(step_bins(4*keV, 60*keV, n=4, p1=0, p2=0)))
self.append(step_data(l3, "STEP_eres", "NOM_STABLE", 10, "var", 10).d(**CLOSE).add(step_bins(4*keV, 80*keV, n=48, p1=1, p2=15, dp=15, cu_gap=True)))
self.append(step_multi(l3, "STEP_multi", "NOM_STABLE", 5, "var", 5).d(**CLOSE).add(ebins(1, list(range(2,17)), raw=True)))
# Far (same products at different cadences)
self.append(step_data(l3, "STEP_basic", "NOM_STABLE", 60, "var", 60).d(**FAR).add(step_bins(4*keV, 80*keV, n=8, p1=0, p2=15, cu_gap=True)))
self.append(step_data(l3, "STEP_tres_rows", "NOM_STABLE", 5, "var", 5).d(**FAR).add(step_bins(4*keV, 60*keV, n=4, p1=1, p2=15, dp=5)))
self.append(step_data(l3, "STEP_tres_cols", "NOM_STABLE", 5, "var", 5).d(**FAR).add(step_cols(4*keV, 60*keV, n=4, p1=1, p2=5, dp=1, l=3)))
self.append(step_data(l3, "STEP_tres_bkgnd", "NOM_STABLE", 5, "var", 5).d(**FAR).add(step_bins(4*keV, 60*keV, n=4, p1=0, p2=0)))
self.append(step_data(l3, "STEP_eres", "NOM_STABLE", 60, "var", 60).d(**FAR).add(step_bins(4*keV, 80*keV, n=48, p1=1, p2=15, dp=15, cu_gap=True)))
self.append(step_multi(l3, "STEP_multi", "NOM_STABLE", 60, "var", 60).d(**FAR).add(ebins(1, list(range(2,17)), raw=True)))
# collect everything # collect everything
@ -226,6 +262,26 @@ class science(science_data):
self.step_l3config = step_l3config self.step_l3config = step_l3config
self.init() self.init()
self.extend(LL_STEP(self.step_l3config)) self.extend(LL_STEP(self.step_l3config))
self.extend(AUX_STEP(self.step_l3config))
self.extend(B1_STEP(self.step_l3config))
self.extend(NOM_STEP(self.step_l3config))
def get_pixels(self, unit=None, env=(), tag=None, all=False):
"return dictionary of {section: [(e0,e1),(e1,e2), ..], ..} for a unit/env/tag"
r = {}
for sd in self:
r.update({k:[(y1,y2-1) for y1,y2 in v] for k,v in sd.get_pixels(unit, env, tag, all).items()})
return r
def step_l3mem():
import numpy as np
import os
npyfile = 'fs_calib.npy'
l3mem = os.path.dirname(__file__) + '/' + npyfile
d = np.load(l3mem, mmap_mode='r')
return d
def main(argv): def main(argv):
from ..solo_data import main from ..solo_data import main

View file

@ -8,8 +8,6 @@ from . import data
class step_dps(dps_table): class step_dps(dps_table):
unit = "STEP"
def __init__(self, l3=None, science=None, env=None, addr=0x0, version=0, **args): def __init__(self, l3=None, science=None, env=None, addr=0x0, version=0, **args):
from .l3trigger import step_l3_trigger from .l3trigger import step_l3_trigger
if l3 is None: if l3 is None:
@ -17,6 +15,7 @@ class step_dps(dps_table):
else: else:
self.l3 = l3 self.l3 = l3
self.l3config = self.l3.config() self.l3config = self.l3.config()
self.unit = "STEP"
if science is None: if science is None:
self.science = data.science() self.science = data.science()
else: else:
@ -27,21 +26,9 @@ class step_dps(dps_table):
self.assemble(**args) self.assemble(**args)
self.finalize() self.finalize()
def assemble(self, main_cadence=1, aux_cadence=60, nominal_tag=None, aux_tag=0x5f, **args): def assemble(self, **args):
self.do_clear() self.do_clear()
# discard the solo_data nonsense, for now keep only … self.add_science(**args)
self.add_science(tags=["LOWLATENCY", "AUX_STABLE"])
# non solo_data products
tag = 0x53
if nominal_tag is not None:
tag = nominal_tag
if isinstance(tag, str):
import solo.solo_data
tag = solo.solo_data.solo_data.TAGS[tag]["tag"] | 3
self.add(self.step_sensor_main(0, tag=tag, csum=main_cadence))
self.add(self.step_sensor_main(1, tag=tag, csum=main_cadence))
self.add(self.step_sensor_aux(0, tag=aux_tag, csum=aux_cadence))
self.add(self.step_sensor_aux(1, tag=aux_tag, csum=aux_cadence))
def do_clear(self): def do_clear(self):
self += dps_product("clear", drop=True) self += dps_product("clear", drop=True)
@ -62,95 +49,6 @@ class step_dps(dps_table):
if len(p): if len(p):
self.add(p) self.add(p)
def step_sensor_main(self, ix, tag=0x53, flg=None, **aa):
"ix = 0 or 1"
if flg is None:
flg = ix
dp = dps_product("STEP %d MAIN" % ix, tag=tag, flg=flg)
for px in range(16):
dp.add(self.step_hist("STEP_M_%d_%02d" % (ix,px), ix, pixels=px, **aa))
return dp
def step_sensor_aux(self, ix, tag=0x57, flg=None, **aa):
"ix = 0 or 1"
if flg is None:
flg = ix
dp = dps_product("STEP %d AUX" % ix, tag=tag, flg=flg)
for px in range(16):
dp.add(self.step_hist("STEP_A_%d_%02d" % (ix,px), ix, pixels=px, Emin=1, Emax=None, nx=18, n=1, **aa))
dp.add(self.step_hist("STEP_A_%d_%02d" % (ix,px), ix, pixels=px, Emin=None, n=7, Emax=4, **aa))
dp.add(self.step_hist("STEP_A_%d_%02d" % (ix,px), ix, pixels=px, Emin=64, Emax=None, n=15, **aa))
dp.add(self.step_hist("STEP_A_%d_%02d" % (ix,px), ix, pixels=px, Emin=None, Emax=384, n=1, **aa))
return dp
# The L3 histograms start at 16eV, 16bpo.
L3keV = 95.45 # = 16log₂(1000/16)
PIX_INCR = 0x100
IX_INCR = 0x1000
L3BASE = 0x4000
def l3bin(self, E):
import math
return int(math.floor(math.log(E)/math.log(2)*16 + self.L3keV))
ebin_args = dict(trim=80, scale=1e-3)
def ebins_main(self, **aa):
return self.ebins("STEP 0 MAIN", "STEP_M_0_00", **aa)
def ebins_aux(self, **aa):
return self.ebins("STEP 0 AUX", "STEP_A_0_00", **aa)
def step_hist(self, section, ix, pixels, bpo=8, nx=None, Emin=4, Emax=64, n=None, csum=1, cenc=None, comp="encode"):
"return a list of dps_item() with a 1D log binned histogram"
if Emin is not None:
bmin = self.l3bin(Emin)
else:
bmin = self.last_bin
if n==1 and nx is None and Emax is not None:
nx = self.l3bin(Emax) - bmin
if nx is None:
nx = 16//bpo
if n is None:
N = (self.l3bin(Emax) - bmin)
n = N // nx
bmax = bmin + n*nx
self.last_bin = bmax
if Emax is not None:
if bmax != self.l3bin(Emax):
raise ValueError("inconsistent hist boundary %s [%g%g] [%d%d] n=%d nx=%d" % (section, Emin, Emax, bmin, bmax, n, nx))
if bmin<0 or bmax >= 0x100:
raise ValueError("bin indices out out bounds %d + %d×%d" % (bmin, n, nx))
if pixels is ...:
pixels = list(range(16))
if not isinstance(pixels,list):
pixels=[pixels]
pixels.sort()
y1 = pixels[0]
sy = None
ny = len(pixels)
for i in range(1,ny):
nsy = (pixels[i] - pixels[i-1]) * self.PIX_INCR
if sy and nsy != sy:
raise ValueError("invalid pixels sum %s" % repr(pixels))
sy = nsy
a = self.L3BASE + ix*self.IX_INCR + y1*self.PIX_INCR + bmin
r = []
for i in range(n):
r.append(dps_item(
section = section,
a = a + i*nx,
nx = nx, ny = ny, sy = sy,
csum=csum, cenc=cenc,
comp=comp
))
return r
def write_defs_file(self, fn="step_dps.defs", mode='w'): def write_defs_file(self, fn="step_dps.defs", mode='w'):
with open(fn, mode) as defs: with open(fn, mode) as defs:
self.write_defs(defs) self.write_defs(defs)

View file

@ -78,9 +78,6 @@ clean:
rm -f *.l3[cdv] *.l3dis *.l3cc *_l3.py *_l3.pyc .*.forward .*.forward.new *.d rm -f *.l3[cdv] *.l3dis *.l3cc *_l3.py *_l3.pyc .*.forward .*.forward.new *.d
%.gold: $(L3C) %.l3 %.gold: $(L3C) %.l3
$(L3C) -2vv -g dis -DM_FS $(word 2, $^) >$@ 2>&1 $(L3C) -2vv -g dis $(word 2, $^) >$@ 2>&1
gold: step.gold gold: step.gold
step_fs_calib-36_v7.3.calib: step_fs_calib-36.awk step_fs_calib-36.calib
$^ > $@

File diff suppressed because it is too large Load diff

View file

@ -8,11 +8,10 @@ ix1_hist_offset = 0x5000
ix0_multi_hist_offset = 0x6000 ix0_multi_hist_offset = 0x6000
ix1_multi_hist_offset = 0x6100 ix1_multi_hist_offset = 0x6100
# The calibration units are 1eV
# 256 energy bins, emin = 16eV, emax = 1.048 MeV # 256 energy bins, emin = 16eV, emax = 1.048 MeV
e0 = 16 # eV is the lowest bin in L3 e0 = 16
hist_min = $LOG(e0) hist_min = 80 # 512eV
hist_len = 255 hist_len = 255
pha_min = 160 pha_min = 160

View file

@ -1,30 +0,0 @@
#! /usr/bin/awk -f
BEGIN {
PED[0] = 1.03
PED[1] = 1.025
PUL[0] = 1.045
PUL[1] = 1.040
REF = 160000 # eV
}
match($1, /^ix([01])_px([0-9]+)_(ped|cal)_large/, M) {
V[M[1]+0, M[2]+0, M[3]] = $3
}
END {
for (ix=0; ix<2; ix++)
for (px=0; px<16; px++) {
cal = V[ix, px, "cal"]
ped = -V[ix, px, "ped"]/cal
nped = ped/PED[ix]
ref = REF/cal + ped
nref = ref/PUL[ix]
ncal = REF/(nref - nped)
noff = -int(nped*ncal)
printf ".undef ix%d_px%d_cal_large\n", ix, px
printf ".undef ix%d_px%d_ped_large\n", ix, px
printf "ix%d_px%d_cal_large = %g\n", ix, px, ncal
printf "ix%d_px%d_ped_large = $floor(-%g*$MRND(%g))\n", ix, px, nped, ncal
}
}

View file

@ -1,128 +0,0 @@
ix0_px0_cal_large = 37.1208
ix0_px0_ped_large = 107903
ix0_px0_cal_small = 36.527289999999994
ix0_px0_ped_small = 106772
ix0_px1_cal_large = 38.13548
ix0_px1_ped_large = 104504
ix0_px1_cal_small = 36.50144
ix0_px1_ped_small = 109796
ix0_px2_cal_large = 36.61362
ix0_px2_ped_large = 107020
ix0_px2_cal_small = 36.299440000000004
ix0_px2_ped_small = 105350
ix0_px3_cal_large = 37.83645
ix0_px3_ped_large = 112318
ix0_px3_cal_small = 36.833459999999995
ix0_px3_ped_small = 108429
ix0_px4_cal_large = 36.99815
ix0_px4_ped_large = 107381
ix0_px4_cal_small = 36.21011
ix0_px4_ped_small = 109438
ix0_px5_cal_large = 36.70459
ix0_px5_ped_large = 108803
ix0_px5_cal_small = 38.103489999999994
ix0_px5_ped_small = 108613
ix0_px6_cal_large = 36.92307
ix0_px6_ped_large = 108539
ix0_px6_cal_small = 36.17105
ix0_px6_ped_small = 104831
ix0_px7_cal_large = 36.715619999999994
ix0_px7_ped_large = 104414
ix0_px7_cal_small = 37.93533
ix0_px7_ped_small = 109560
ix0_px8_cal_large = 36.60684
ix0_px8_ped_large = 106706
ix0_px8_cal_small = 36.41316
ix0_px8_ped_small = 108805
ix0_px9_cal_large = 37.46887
ix0_px9_ped_large = 113721
ix0_px9_cal_small = 36.85434
ix0_px9_ped_small = 106993
ix0_px10_cal_large = 37.081469999999996
ix0_px10_ped_large = 111887
ix0_px10_cal_small = 37.24251
ix0_px10_ped_small = 108688
ix0_px11_cal_large = 37.30204
ix0_px11_ped_large = 104046
ix0_px11_cal_small = 37.34093
ix0_px11_ped_small = 109300
ix0_px12_cal_large = 37.44295
ix0_px12_ped_large = 107717
ix0_px12_cal_small = 36.5771
ix0_px12_ped_small = 104701
ix0_px13_cal_large = 36.27804
ix0_px13_ped_large = 101943
ix0_px13_cal_small = 36.96094
ix0_px13_ped_small = 105001
ix0_px14_cal_large = 36.6565
ix0_px14_ped_large = 107460
ix0_px14_cal_small = 36.912229999999994
ix0_px14_ped_small = 105781
ix0_px15_cal_large = 37.98821
ix0_px15_ped_large = 112075
ix0_px15_cal_small = 37.03572
ix0_px15_ped_small = 108521
ix1_px0_cal_large = 37.78223
ix1_px0_ped_large = 105219
ix1_px0_cal_small = 36.48239
ix1_px0_ped_small = 108556
ix1_px1_cal_large = 37.54545
ix1_px1_ped_large = 107133
ix1_px1_cal_small = 37.86485
ix1_px1_ped_small = 112177
ix1_px2_cal_large = 38.632479999999994
ix1_px2_ped_large = 109028
ix1_px2_cal_small = 37.77487
ix1_px2_ped_small = 108321
ix1_px3_cal_large = 38.25345
ix1_px3_ped_large = 115037
ix1_px3_cal_small = 37.22007
ix1_px3_ped_small = 109191
ix1_px4_cal_large = 38.22958
ix1_px4_ped_large = 111404
ix1_px4_cal_small = 38.07241
ix1_px4_ped_small = 106468
ix1_px5_cal_large = 37.550149999999995
ix1_px5_ped_large = 113377
ix1_px5_cal_small = 37.62417
ix1_px5_ped_small = 111730
ix1_px6_cal_large = 38.452130000000004
ix1_px6_ped_large = 110132
ix1_px6_cal_small = 36.993159999999996
ix1_px6_ped_small = 103361
ix1_px7_cal_large = 37.81052
ix1_px7_ped_large = 112505
ix1_px7_cal_small = 37.92465
ix1_px7_ped_small = 109407
ix1_px8_cal_large = 38.28015
ix1_px8_ped_large = 105301
ix1_px8_cal_small = 38.198
ix1_px8_ped_small = 113798
ix1_px9_cal_large = 37.58993
ix1_px9_ped_large = 111516
ix1_px9_cal_small = 36.99906
ix1_px9_ped_small = 107339
ix1_px10_cal_large = 38.32929
ix1_px10_ped_large = 106669
ix1_px10_cal_small = 38.49575
ix1_px10_ped_small = 110569
ix1_px11_cal_large = 37.99055
ix1_px11_ped_large = 109910
ix1_px11_cal_small = 37.25997
ix1_px11_ped_small = 107291
ix1_px12_cal_large = 37.66984
ix1_px12_ped_large = 107460
ix1_px12_cal_small = 38.075829999999996
ix1_px12_ped_small = 112252
ix1_px13_cal_large = 38.24346
ix1_px13_ped_large = 111024
ix1_px13_cal_small = 38.281259999999996
ix1_px13_ped_small = 108264
ix1_px14_cal_large = 38.54048
ix1_px14_ped_large = 111216
ix1_px14_cal_small = 38.432050000000004
ix1_px14_ped_small = 117163
ix1_px15_cal_large = 38.06015
ix1_px15_ped_large = 107048
ix1_px15_cal_small = 37.79452
ix1_px15_ped_small = 112777

View file

@ -1,128 +0,0 @@
.undef ix0_px0_cal_large
.undef ix0_px0_ped_large
ix0_px0_cal_large = 38.414
ix0_px0_ped_large = $floor(--2822.14*$MRND(38.414))
.undef ix0_px1_cal_large
.undef ix0_px1_ped_large
ix0_px1_cal_large = 39.4761
ix0_px1_ped_large = $floor(--2660.52*$MRND(39.4761))
.undef ix0_px2_cal_large
.undef ix0_px2_ped_large
ix0_px2_cal_large = 37.8921
ix0_px2_ped_large = $floor(--2837.82*$MRND(37.8921))
.undef ix0_px3_cal_large
.undef ix0_px3_ped_large
ix0_px3_cal_large = 39.139
ix0_px3_ped_large = $floor(--2882.05*$MRND(39.139))
.undef ix0_px4_cal_large
.undef ix0_px4_ped_large
ix0_px4_cal_large = 38.2888
ix0_px4_ped_large = $floor(--2817.8*$MRND(38.2888))
.undef ix0_px5_cal_large
.undef ix0_px5_ped_large
ix0_px5_cal_large = 37.9802
ix0_px5_ped_large = $floor(--2877.95*$MRND(37.9802))
.undef ix0_px6_cal_large
.undef ix0_px6_ped_large
ix0_px6_cal_large = 38.2072
ix0_px6_ped_large = $floor(--2853.98*$MRND(38.2072))
.undef ix0_px7_cal_large
.undef ix0_px7_ped_large
ix0_px7_cal_large = 38.0066
ix0_px7_ped_large = $floor(--2761.03*$MRND(38.0066))
.undef ix0_px8_cal_large
.undef ix0_px8_ped_large
ix0_px8_cal_large = 37.8862
ix0_px8_ped_large = $floor(--2830.02*$MRND(37.8862))
.undef ix0_px9_cal_large
.undef ix0_px9_ped_large
ix0_px9_cal_large = 38.7538
ix0_px9_ped_large = $floor(--2946.68*$MRND(38.7538))
.undef ix0_px10_cal_large
.undef ix0_px10_ped_large
ix0_px10_cal_large = 38.3595
ix0_px10_ped_large = $floor(--2929.45*$MRND(38.3595))
.undef ix0_px11_cal_large
.undef ix0_px11_ped_large
ix0_px11_cal_large = 38.6149
ix0_px11_ped_large = $floor(--2708.04*$MRND(38.6149))
.undef ix0_px12_cal_large
.undef ix0_px12_ped_large
ix0_px12_cal_large = 38.748
ix0_px12_ped_large = $floor(--2793.04*$MRND(38.748))
.undef ix0_px13_cal_large
.undef ix0_px13_ped_large
ix0_px13_cal_large = 37.562
ix0_px13_ped_large = $floor(--2728.2*$MRND(37.562))
.undef ix0_px14_cal_large
.undef ix0_px14_ped_large
ix0_px14_cal_large = 37.935
ix0_px14_ped_large = $floor(--2846.16*$MRND(37.935))
.undef ix0_px15_cal_large
.undef ix0_px15_ped_large
ix0_px15_cal_large = 39.2968
ix0_px15_ped_large = $floor(--2864.33*$MRND(39.2968))
.undef ix1_px0_cal_large
.undef ix1_px0_ped_large
ix1_px0_cal_large = 38.919
ix1_px0_ped_large = $floor(--2716.96*$MRND(38.919))
.undef ix1_px1_cal_large
.undef ix1_px1_ped_large
ix1_px1_cal_large = 38.6684
ix1_px1_ped_large = $floor(--2783.83*$MRND(38.6684))
.undef ix1_px2_cal_large
.undef ix1_px2_ped_large
ix1_px2_cal_large = 39.7811
ix1_px2_ped_large = $floor(--2753.35*$MRND(39.7811))
.undef ix1_px3_cal_large
.undef ix1_px3_ped_large
ix1_px3_cal_large = 39.3694
ix1_px3_ped_large = $floor(--2933.88*$MRND(39.3694))
.undef ix1_px4_cal_large
.undef ix1_px4_ped_large
ix1_px4_cal_large = 39.3577
ix1_px4_ped_large = $floor(--2843*$MRND(39.3577))
.undef ix1_px5_cal_large
.undef ix1_px5_ped_large
ix1_px5_cal_large = 38.6513
ix1_px5_ped_large = $floor(--2945.71*$MRND(38.6513))
.undef ix1_px6_cal_large
.undef ix1_px6_ped_large
ix1_px6_cal_large = 39.5914
ix1_px6_ped_large = $floor(--2794.28*$MRND(39.5914))
.undef ix1_px7_cal_large
.undef ix1_px7_ped_large
ix1_px7_cal_large = 38.9224
ix1_px7_ped_large = $floor(--2902.92*$MRND(38.9224))
.undef ix1_px8_cal_large
.undef ix1_px8_ped_large
ix1_px8_cal_large = 39.4316
ix1_px8_ped_large = $floor(--2683.71*$MRND(39.4316))
.undef ix1_px9_cal_large
.undef ix1_px9_ped_large
ix1_px9_cal_large = 38.6988
ix1_px9_ped_large = $floor(--2894.29*$MRND(38.6988))
.undef ix1_px10_cal_large
.undef ix1_px10_ped_large
ix1_px10_cal_large = 39.4773
ix1_px10_ped_large = $floor(--2715.09*$MRND(39.4773))
.undef ix1_px11_cal_large
.undef ix1_px11_ped_large
ix1_px11_cal_large = 39.1169
ix1_px11_ped_large = $floor(--2822.52*$MRND(39.1169))
.undef ix1_px12_cal_large
.undef ix1_px12_ped_large
ix1_px12_cal_large = 38.7953
ix1_px12_ped_large = $floor(--2783.1*$MRND(38.7953))
.undef ix1_px13_cal_large
.undef ix1_px13_ped_large
ix1_px13_cal_large = 39.3734
ix1_px13_ped_large = $floor(--2832.28*$MRND(39.3734))
.undef ix1_px14_cal_large
.undef ix1_px14_ped_large
ix1_px14_cal_large = 39.6785
ix1_px14_ped_large = $floor(--2815.31*$MRND(39.6785))
.undef ix1_px15_cal_large
.undef ix1_px15_ped_large
ix1_px15_cal_large = 39.1988
ix1_px15_ped_large = $floor(--2744*$MRND(39.1988))

View file

@ -7,6 +7,7 @@
.name step_temp_calib_l3 .name step_temp_calib_l3
.version $Revision$ .version $Revision$
.ifndef T_STEP .ifndef T_STEP
.print "Warning: no temperature defined for STEP calibration, use 25°C" .print "Warning: no temperature defined for STEP calibration, use 25°C"
T_STEP = 25 T_STEP = 25
@ -14,23 +15,18 @@ T_STEP = 25
.print "STEP calibration Temperature ${T_STEP}°C" .print "STEP calibration Temperature ${T_STEP}°C"
.endif .endif
.ifdef M_FS
T_STEP = -36.0
PATCH7_3 = 1
.print "Attention: using calib -36°C with patch 7.3 for all Temp configs"
.endif
# Calculate Temperature calibration for one pixel; don't overwrite already set values # Calculate Temperature calibration for one pixel; don't overwrite already set values
.macro PIXEL_TCAL # «IX» «PX» «{large|small}» .macro PIXEL_TCAL # «IX» «PX» «{large|small}»
.ifndef ix$1_px$2_cal_$3 .ifndef ix$1_px$2_cal_$3
ix$1_px$2_cal_$3 := $MRND(ix$1_px$2_gain_$3 * 1000.) ix$1_px$2_cal_$3 := ix$1_px$2_gain_$3 * 1000.
.endif .endif
.ifndef ix$1_px$2_ped_$3 .ifndef ix$1_px$2_ped_$3
ix$1_px$2_ped_$3 := 1.*(ix$1_px$2_offset_T1_$3 * T_STEP + ix$1_px$2_offset_T0_$3) ix$1_px$2_ped_$3 := 1.*(ix$1_px$2_offset_T1_$3 * T_STEP + ix$1_px$2_offset_T0_$3)
.ifdef ADC_OFFSET .ifdef ADC_OFFSET
ped_gain = $floor(ix$1_px$2_ped_$3 * $MRND(ix$1_px$2_cal_$3)) ped_gain = $floor(ix$1_px$2_ped_$3 * ix$1_px$2_cal_$3)
.else .else
ped_gain = $floor(ix$1_px$2_ped_$3 * $MRND(1000.)) ped_gain = $floor(ix$1_px$2_ped_$3 * 1000.)
.endif .endif
.undef ix$1_px$2_ped_$3 .undef ix$1_px$2_ped_$3
ix$1_px$2_ped_$3 := ped_gain ix$1_px$2_ped_$3 := ped_gain
@ -101,10 +97,3 @@ ix$i_px$p_ped_$1 := ix$i_px$p_ped
.call IX_TCAL 0 .call IX_TCAL 0
.call IX_TCAL 1 .call IX_TCAL 1
##########################################
# apply patches
.ifdef PATCH7_3
.include step_fs_calib-36_v7.3.calib
.endif

View file

@ -35,3 +35,9 @@ class step_l3_trigger(l3.l3):
def calib(self, T, a): def calib(self, T, a):
return 1. * a[0] * T**3 + 1.*a[1] * T**2 + 1.*a[2] * T + 1.*a[3] return 1. * a[0] * T**3 + 1.*a[1] * T**2 + 1.*a[2] * T + 1.*a[3]
class l3_config_names(object):
def __init__(self, l3):
self.__dict__.update(l3.names)
def config(self):
return self.l3_config_names(self)

View file

@ -54,11 +54,12 @@ class step_ppss(ppss_table):
ix1_thr = [62]*32 ix1_thr = [62]*32
ix2_thr = [62]*32 ix2_thr = [62]*32
ix_conf_incr = 30
def pretty(self, **kwargs): def pretty(self, **kwargs):
return ppss_table.pretty(self, step=True) return ppss_table.pretty(self, step=True)
def __init__(self, dps=None, small=False, large=True, dps_us=100000, clear_us=800000, ix1_thr=[62]*32, ix2_thr=[62]*32, close=False, model=None, **kwargs): def __init__(self, dps=None, small=True, large=True, dps_us=100000, clear_us=800000, ix1_thr=[62]*32, ix2_thr=[62]*32, close=False, model=None, **kwargs):
self.ix1_thr = ix1_thr self.ix1_thr = ix1_thr
self.ix2_thr = ix2_thr self.ix2_thr = ix2_thr
ppss_table.__init__(self) ppss_table.__init__(self)
@ -78,7 +79,7 @@ class step_ppss(ppss_table):
else: else:
self += ppss_item(2000, modulus_always, msg0(ix1enable=1, ix2enable=1, ev_enable=1, l3_enable=1, pha_enable=1, hist_base='T'), START_DATA=True) self += ppss_item(2000, modulus_always, msg0(ix1enable=1, ix2enable=1, ev_enable=1, l3_enable=1, pha_enable=1, hist_base='T'), START_DATA=True)
self += ppss_item(1950, modulus_always, ix_reset(reset=0, gap=0), IX_ARESET=True, IX="ARESET") self += ppss_item(1950, modulus_always, ix_reset(reset=0, gap=0), IX_ARESET=True)
if not self.model or self.model.lower() != "seu_scan": if not self.model or self.model.lower() != "seu_scan":
self += ppss_item(99, ppss_modulus(60,0), opheater(dcmax=self.OH_DC, setpoint=self.OH_SETPOINT), search=True, OPHEATER=True) self += ppss_item(99, ppss_modulus(60,0), opheater(dcmax=self.OH_DC, setpoint=self.OH_SETPOINT), search=True, OPHEATER=True)
else: else:
@ -98,8 +99,8 @@ class step_ppss(ppss_table):
def do_hk(self): def do_hk(self):
# Counter readout # Counter readout
self += ppss_item( 420, ppss_modulus(self.HK_cadence, 0), read_counters(tag=self.TAG_HK, a=0x30, n=16, wsize=2), search=True, HK=True, HKC=0x30) self += ppss_item( 420, ppss_modulus(self.HK_cadence, 0), read_counters(tag=self.TAG_HK, a=0x30, n=16, wsize=2), search=True, HK=True)
self += ppss_item( 445, ppss_modulus(self.HK_cadence, 0), read_counters(tag=self.TAG_HK, a=0x00, n=16, wsize=2), search=True, HK=True, HKC=0x00) self += ppss_item( 445, ppss_modulus(self.HK_cadence, 0), read_counters(tag=self.TAG_HK, a=0x00, n=16, wsize=2), search=True, HK=True)
self += ppss_item( 470, ppss_modulus(self.ICU_cadence, 0), read_counters(tag=0x25, a=0x30, n=16, wsize=2), search=True, ICU=0x25) self += ppss_item( 470, ppss_modulus(self.ICU_cadence, 0), read_counters(tag=0x25, a=0x30, n=16, wsize=2), search=True, ICU=0x25)
self += ppss_item( 505, ppss_modulus(self.ICU_cadence, 0), read_counters(tag=0x26, a=0x00, n=16, wsize=2), search=True, ICU=0x26) self += ppss_item( 505, ppss_modulus(self.ICU_cadence, 0), read_counters(tag=0x26, a=0x00, n=16, wsize=2), search=True, ICU=0x26)
@ -120,8 +121,8 @@ class step_ppss(ppss_table):
self += ppss_item( 610, ppss_modulus(self.HK_cadence, 0), read_counters(tag=self.TAG_HK, n=128, step_l1=True, clear=True, wsize=2), HK=True, search=True, STEP_L1CNTR=True) self += ppss_item( 610, ppss_modulus(self.HK_cadence, 0), read_counters(tag=self.TAG_HK, n=128, step_l1=True, clear=True, wsize=2), HK=True, search=True, STEP_L1CNTR=True)
# IDe-Fx HK, registers and tempererature readout # IDe-Fx HK, registers and tempererature readout
self += ppss_item( 4, ppss_modulus(self.ICU_cadence, 16), ix_get_hk(tag=0x2F), ICU=0x2F, search=True, IX="HKICU") self += ppss_item( 4, ppss_modulus(self.ICU_cadence, 16), ix_get_hk(tag=0x2F), ICU=0x2F, search=True)
self += ppss_item( 4, ppss_modulus(self.HK_cadence, 20), ix_get_hk(tag=self.TAG_HK), search=True, HK=True, IX="HK") self += ppss_item( 4, ppss_modulus(self.HK_cadence, 20), ix_get_hk(tag=self.TAG_HK), search=True, HK=True)
# increment the index registers for table and EEPROM dribble # increment the index registers for table and EEPROM dribble
self += ppss_item( 4, ppss_modulus(self.DRIBBLE_cadence, 129), set_index_reg(misc_page_incr=256), search=True, EEPROM_INCR=True) self += ppss_item( 4, ppss_modulus(self.DRIBBLE_cadence, 129), set_index_reg(misc_page_incr=256), search=True, EEPROM_INCR=True)
@ -154,23 +155,17 @@ class step_ppss(ppss_table):
for i in range(16): for i in range(16):
self += ppss_item(us, ppss_modulus(self.PHA_cadence, 7+10*i), read_sram(tag=self.TAG_PHA, a=256*i, n=256, pha=True), search=True, PHA=True) self += ppss_item(us, ppss_modulus(self.PHA_cadence, 7+10*i), read_sram(tag=self.TAG_PHA, a=256*i, n=256, pha=True), search=True, PHA=True)
def do_testpulser(self, us=1810, what="L", pulse_length=50*24, n=2, lab_test=False): def do_testpulser(self, us=1810, what="L", pulse_length=50*24, n=2):
cadence=self.PHA_cadence
if lab_test:
# 10×5=50 pulses per pixel
# 200 events/PHA buffer
cadence=60
n=5
pix = pixels(what) pix = pixels(what)
"one pulse per channel per PHA readout" "one pulse per channel per PHA readout"
for c,p in enumerate(pix): for c,p in enumerate(pix):
self += ppss_item(us, ppss_modulus(cadence, c), ix_test_reg(1<<p), search=True, IFTP=p, IX="ARMTEST") self += ppss_item(us, ppss_modulus(self.PHA_cadence, c), ix_test_reg(1<<p), search=True, IFTP=p)
thirty_seconds=ppss_modulus(cadence,0,30) thirty_seconds=ppss_modulus(self.PHA_cadence,0,30)
for ms in range(n): for ms in range(n):
self += ppss_item(5000+1000*ms, thirty_seconds, step_pulser(pulse_length,0,sel=0), IFTP="ix1") self += ppss_item(5000+1000*ms, thirty_seconds, step_pulser(pulse_length,0,sel=0), IFTP="ix1")
self += ppss_item(5500+1000*ms, thirty_seconds, step_pulser(pulse_length,0,sel=1), IFTP="ix2") self += ppss_item(5500+1000*ms, thirty_seconds, step_pulser(pulse_length,0,sel=1), IFTP="ix2")
def do_ix_config(self, small=False, large=True, ix1_thr=None, ix2_thr=None, ix1_test=0, ix2_test=0, **kwargs): def do_ix_config(self, small=True, large=True, ix1_thr=None, ix2_thr=None, ix1_test=0, ix2_test=0, **kwargs):
if not ix1_thr: if not ix1_thr:
ix1_thr = self.ix1_thr ix1_thr = self.ix1_thr
@ -182,49 +177,30 @@ class step_ppss(ppss_table):
if not ix2_thr: if not ix2_thr:
ix2_thr = [63] * 32 ix2_thr = [63] * 32
ix1_thr_small = [i if p in ix.SMALL_PIXELS else 63 for i, p in zip(ix1_thr, range(32))] if not large:
ix2_thr_small = [i if p in ix.SMALL_PIXELS else 63 for i, p in zip(ix2_thr, range(32))] ix1_thr = [i if p in ix.SMALL_PIXELS else 63 for i, p in zip(ix1_thr,range(32))]
ix1_thr_large = [i if p in ix.LARGE_PIXELS else 63 for i, p in zip(ix1_thr, range(32))] ix2_thr = [i if p in ix.SMALL_PIXELS else 63 for i, p in zip(ix2_thr,range(32))]
ix2_thr_large = [i if p in ix.LARGE_PIXELS else 63 for i, p in zip(ix2_thr, range(32))] elif not small:
ix1_thr = [i if p in ix.LARGE_PIXELS else 63 for i, p in zip(ix1_thr,range(32))]
ix2_thr = [i if p in ix.LARGE_PIXELS else 63 for i, p in zip(ix2_thr,range(32))]
ix_config_time = 1420 ix_config_time = 1420
# ix_conf_modulus = ppss_modulus(600, 21) # maybe use this for flight
ix_conf_modulus = modulus_always ix_conf_modulus = modulus_always
incr = self.ix_conf_incr
self += ppss_item(ix_config_time, ix_conf_modulus, ix_rsm(2, ix=3), IX_RSM=True, IX="RSM") self += ppss_item(ix_config_time, ix_conf_modulus, ix_rsm(2, ix=3), IX_RSM=True)
self += ppss_item(ix_config_time + 5, ix_conf_modulus, ix_selfilter(2, ix=3), IX_SELFILTER=True, IX="SELFILER") self += ppss_item(ix_config_time + incr, ix_conf_modulus, ix_selfilter(2, ix=3), IX_SELFILTER=True)
self += ppss_item(ix_config_time + 10, ix_conf_modulus, ix_test_reg(ix1_test, ix=1), IX_TESTREG0=True, IX="TESTREG0") self += ppss_item(ix_config_time + 2*incr, ix_conf_modulus, ix_test_reg(ix1_test, ix=1), IX_TESTREG0=True)
self += ppss_item(ix_config_time + 20, ix_conf_modulus, ix_test_reg(ix2_test, ix=2), IX_TESTREG1=True, IX="TESTREG1") self += ppss_item(ix_config_time + 3*incr, ix_conf_modulus, ix_test_reg(ix2_test, ix=2), IX_TESTREG1=True)
self += ppss_item(ix_config_time + 30, ix_conf_modulus, ix_i0(2, ix=3), IX_I0=True, IX="I0") self += ppss_item(ix_config_time + 4*incr, ix_conf_modulus, ix_i0(2, ix=3), IX_I0=True)
self += ppss_item(ix_config_time + 35, ix_conf_modulus, ix_icomp(0, ix=3), IX_ICOMP=True, IX="ICOMP") self += ppss_item(ix_config_time + 5*incr, ix_conf_modulus, ix_icomp(0, ix=3), IX_ICOMP=True)
thrs_us0 = ix_config_time + 40 thrs_us0 = ix_config_time + 6 * incr
thrs_us1 = thrs_us0 + 40 self += ppss_items(thrs_us0, ix_conf_modulus, ix_thresholds(ix1_thr, ix=1),incr=incr, IX_THR0=True)
if not large: thrs_us1 = thrs_us0 + 2 * incr + 2 * incr
ix1_thr = ix1_thr_small self += ppss_items(thrs_us1, ix_conf_modulus, ix_thresholds(ix2_thr, ix=2),incr=incr, IX_THR1=True)
ix2_thr = ix2_thr_small
elif not small or isinstance(small, tuple):
ix1_thr = ix1_thr_large
ix2_thr = ix2_thr_large
self += ppss_items(thrs_us0, ix_conf_modulus, ix_thresholds(ix1_thr, ix=1), IX_THR0=True, IX="THR0")
self += ppss_items(thrs_us1, ix_conf_modulus, ix_thresholds(ix2_thr, ix=2), IX_THR1=True, IX="THR1")
if large and isinstance(small, tuple):
small_cadence = ppss_modulus(*small)
else:
small_cadence = modulus_never
self += ppss_items(thrs_us0+80, small_cadence, ix_thresholds(ix1_thr_small, ix=1), IX_THR0S=True, IX="THR0S")
self += ppss_items(thrs_us1+80, small_cadence, ix_thresholds(ix2_thr_small, ix=2), IX_THR1S=True, IX="THR1S")
def interleaved_small(self, msg, cadence=None, phase=None, **aa): def do_step_config(self, small=True, large=True, acq_time=1, **kwargs):
if not cadence:
mod = modulus_never
else:
if phase is None:
phase = cadence//2
mod = ppss_modulus(cadence, phase, **aa)
pp = self.find_flags("IX_THR0S")+self.find_flags("IX_THR1S")
for p in pp:
ppss_item(p.us, mod, p.msg, index=p.index, flags=p.flags)(msg)
def do_step_config(self, small=False, large=True, acq_time=1, **kwargs):
conf_us = 1400 conf_us = 1400
step_conf_modulus = modulus_always step_conf_modulus = modulus_always
if not large: if not large:
@ -261,6 +237,9 @@ class step_ppss(ppss_table):
if not self.model or self.model.lower() != "seu_scan": if not self.model or self.model.lower() != "seu_scan":
self.science(self.clear_us, [self.dps["clear"]], disable_l3=False, **args) self.science(self.clear_us, [self.dps["clear"]], disable_l3=False, **args)
n = self.MAX_SIZE - 3 - len(self) # leave three items for close_table()
start = self.clear_us - 100 - n
def do_fini(self): def do_fini(self):
self+= ppss_item(999999, modulus_never, msg0(pps=1)) self+= ppss_item(999999, modulus_never, msg0(pps=1))
self+= ppss_item(1111111, modulus_always, msg0(stop_pps=1)) self+= ppss_item(1111111, modulus_always, msg0(stop_pps=1))
@ -285,10 +264,10 @@ class step_ppss(ppss_table):
if pulser: if pulser:
self.do_testpulser(what=pulser) self.do_testpulser(what=pulser)
if self.dps: if self.dps:
if small and not large: if small==True and large==False:
modes ={"*": (("large", None), ("small", True), )} modes ={"Quicklook":(("small",True),("large",False))}
else: else:
modes ={"*": (("large", True), ("small", None), )} modes ={"Quicklook":(("small",False),("large",True))}
self.do_science(modes=modes) self.do_science(modes=modes)
self.do_fini() self.do_fini()
self.do_custom() self.do_custom()
@ -307,7 +286,6 @@ class step_ppss(ppss_table):
if msg: if msg:
d(msg) d(msg)
if inplace: if inplace:
# What is the difference? We patched the msg in place already.
self += ppss_item(d.us, d.mod, d.msg, index=d.index, force=True, replace=True) self += ppss_item(d.us, d.mod, d.msg, index=d.index, force=True, replace=True)
return dps return dps
@ -400,11 +378,10 @@ class step_ppss(ppss_table):
ppss_item(p.us, p.mod, m, index=p.index)(msg) ppss_item(p.us, p.mod, m, index=p.index)(msg)
sys.stderr.write("IX%d TESTREG set to 0x%08x"%(ixx-1,testreg)) sys.stderr.write("IX%d TESTREG set to 0x%08x"%(ixx-1,testreg))
def set_opheater_setpoint(self, msg, T, dc_estimate=None, **aa): def set_opheater_setpoint(self, msg, T):
p = self.find_flags("OPHEATER")[0] p = self.find_flags("OPHEATER")[0]
dc = HK_T_to_ADC(T, dc_estimate=dc_estimate) ppss_item(p.us, p.mod, opheater(dcmax=self.OH_DC, setpoint=HK_T_to_ADC(T)), index=p.index)(msg)
ppss_item(p.us, p.mod, opheater(dcmax=self.OH_DC, setpoint=dc, **aa), index=p.index)(msg) sys.stderr.write("OP heater setpoint: %d C = %d ADC\n" %(T, HK_T_to_ADC(T)))
sys.stderr.write("OP heater setpoint: %d C = %d ADC\n" %(T, dc))
class ppss_small(step_ppss): class ppss_small(step_ppss):
def __init__(self, dps, **kwargs): def __init__(self, dps, **kwargs):

View file

@ -1,4 +1,4 @@
#!/usr/bin/ipython3 --profile=solopath #!/usr/bin/ipython3 -i
import sys, os import sys, os