Expand source code
def device_status_as_text(tree=None):
DevicesDisplayed = []
""" In this area GNUmed will place the status of all cardiac devices and device parts.
There can be more than one device at a time\n\n
It potentially looks like this\n
----------------------------------------------------------------------------------------------------------------\n
Device: SJM Atlas DR (active) Battery: 2.4V (MOL) Implanted: Feb 09 2008\n\n
RA: Medtronic Sprint fidelis (active, flaky, replacement) Implanted: Feb 09 2008\n
Sensing: 2 (1.5) mV Threshold: 0.7/0.5 (1/0.4) V/ms Impedance: 800 (900) Ohm\n\n
RV: Medtronic Sprint fidelis (active, flaky, replacement) Implanted: Feb 09 2008\n
Sensing: 7 (15) mV Threshold: 0.7/0.5 (1/0.4) V/ms Impedance: 800 (900) Ohm\n\n
LV: Medtronic Sprint fidelis (active, flaky, Y-connector) Implanted: Feb 09 2008\n
Sensing: 7 ( ?) mV Threshold: 1/1.5 (1/1) V/ms Impedance: 800 (900) Ohm\n
----------------------------------------------------------------------------------------------------------------\n
Device: Medtronic Relia SR (inactive) Battery 2.1V (EOL) Implanted: Jan 23 2000\n\n
Device: Medtronic Kappa SR (explanted) Battery 2.1V (EOL) Explanted: Jan 23 2000 (Jan 23 1995)\n
-----------------------------------------------------------------------------------------------------------------\n
RA Lead: Medtronic ? (inactive, capped) Implanted: Jan 23 2000\n
RV Lead: Medtronic ? (explanted) Explanted: Feb 09 2008
"""
"""
first search for devices, produce a list,
sort in active devices first, ICD befor pacemaker before disconnted devices
per convention a single generator or lead which is not connected is a self contained device
there are virtual devices such as 'ICD' or 'pacemaker' which consist of parts such as leads and generator
there are true devices such as inactive leads or non-explanted generators
class will be 'lead' instead of type 'lead' for DeviceParts
"""
DevicesTree = tree.getroot()
Devices = extractDevices(DevicesTree)
DevicesSorted = sortDevicesByTypeAndStatus(Devices)
#print 'Number of devices: %s' %len(Devices)
for Device in DevicesSorted:
DevicesDisplayed.append('-------------------------------------------------------------\n')
# check for class
DeviceClass=Device.get("class")
if DeviceClass == 'ICD':
# get generator xml node
Generator = extractDeviceParts(Device=Device,Type='generator')[0]
# get generator vendor, model, devicestate
vendor = extractTagData(start_node=Generator,SearchTag='vendor')
model = extractTagData(start_node=Generator,SearchTag='model')
devicestate = extractTagData(start_node=Generator,SearchTag='devicestate')
# get subpart battery
battery = extractDeviceParts(Device=Generator,Type='battery')[0]
action = extractActions(DevicePart=battery,Type='interrogation')[0]
battery_voltage = extractTagData(start_node=action,SearchTag='voltage')
battery_voltage_unit = extractTagAttribute(start_node=action,SearchTag='voltage',Attribute='unit')
battery_status = extractTagData(start_node=action,SearchTag='status')
implantation_date= extractTagData(start_node=Generator,SearchTag='doi')
line = _('Device(%s):') %DeviceClass + ' ' + vendor + ' ' + model + ' ' + '('+ devicestate + ')'+' '+_('Battery:')+' '+battery_voltage+' '+battery_voltage_unit+'('+battery_status+')'+' '+_('Implanted:')+' '+implantation_date+'\n\n'
# append each line to a list, later produce display string by parsing list
DevicesDisplayed.append(line)
#DevicesDisplayed.append('\n')
# now get the leads, RA then RV and last LV if they exist
# todo: think about four leads : pace/sense but on another thought they both simply show up as RV leads
Leads = extractDeviceParts(Device=Device,Type='lead')
LeadsSorted = sortLeadsByPosition(Leads)
for Lead in LeadsSorted:
leadposition = extractTagData(start_node=Lead,SearchTag='leadposition')
leadslot = extractTagData(start_node=Lead,SearchTag='leadslot')
vendor = extractTagData(start_node=Lead,SearchTag='manufacturer')
model = extractTagData(start_node=Lead,SearchTag='model')
devicestate = extractTagData(start_node=Lead,SearchTag='devicestate')
comment = extractTagData(start_node=Lead,SearchTag='comment')
implantation_date = extractTagData(start_node=Lead,SearchTag='doi')
line = '%s-lead in %s-position:' %(leadposition,leadslot) + ' ' + vendor + ' ' + model + ' ' + '(' + devicestate + ',' + comment + ')' + ' ' + 'Implanted:' + ' ' + implantation_date +'\n'
DevicesDisplayed.append(line)
#now get the newest interrogation
action = extractActions(DevicePart=Lead,Type='interrogation')[0]
action_date = extractTagData(start_node=action,SearchTag='dop')
sensing = extractTagData(start_node=action,SearchTag='sensing')
sensingunit = extractTagAttribute(start_node=action,SearchTag='sensing',Attribute='unit')
threshold = extractTagData(start_node=action,SearchTag='thresholdvoltage')
thresholdunit = extractTagAttribute(start_node=action,SearchTag='thresholdvoltage',Attribute='unit')
impedance = extractTagData(start_node=action,SearchTag='impedance')
impedanceunit = extractTagAttribute(start_node=action,SearchTag='impedance',Attribute='unit')
line = _('last check:')+' '+action_date+' '+_('Sensing:')+' '+sensing+sensingunit+' '+_('Threshold')+' '+threshold+thresholdunit+' '+_('Impedance:')+' '+impedance+' '+impedanceunit+'\n\n'
DevicesDisplayed.append(line)
return DevicesDisplayed