Not relevant to normal users.

I used this file to figure out how to replace links to shared parameters with 'hard' copies (or rather pointer to the right dictionaries, if you don't save it in some file or something). You can have a look at this if you want to know how those links work. It has no other use.


In [1]:
import jpkfile
jpk = jpkfile.JPKFile("force-save-2016.07.05-10.00.50.062.jpk-nt-force")
if jpk.has_shared_header:
    print("This JPKFile has a shared header!")


WARNING! Did not find encoder parameters for channel trapDistance!
WARNING! Did not find encoder parameters for channel trapDistance!
This JPKFile has a shared header!
  • Some JPK archives have a shared header.
  • How to replace links to parameters from local header to shared header with actual parameters?

In [2]:
def find_link(list_of_all_links, parameter_subset,link_keys,chain):
    print "==== loop starting with chain ",chain
    for key in parameter_subset:
        print "==== ==== processing key ",key
        copy_chain = chain[:]
        copy_chain.append(key)
        if key in link_keys and key!="date":
            print "==== ==== ==== identified key as link"
            list_of_all_links.append(copy_chain)
        else:
            if isinstance(parameter_subset[key],dict):
                print "==== ==== ==== key is no link and value is dict" 
                find_link(list_of_all_links, parameter_subset[key],link_keys,copy_chain)
            else:
                print "==== ==== ==== key is no link, value is no dict --> done with branch"

In [3]:
links = []
find_link(links,jpk.segments[0].parameters, jpk.shared_parameters.keys(),[])


==== loop starting with chain  []
==== ==== processing key  date
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  channels
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channels']
==== ==== processing key  list
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  force-segment-header
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header']
==== ==== processing key  time-stamp
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  bead-id
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  settings
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'settings']
==== ==== processing key  style
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  segment-settings
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'settings', 'segment-settings']
==== ==== processing key  style
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  end
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'settings', 'segment-settings', 'end']
==== ==== processing key  y
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  x
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  z
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  feedback
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  start
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'settings', 'segment-settings', 'start']
==== ==== processing key  y
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  x
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  z
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  duration
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  identifier
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'settings', 'segment-settings', 'identifier']
==== ==== processing key  type
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  type
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  type
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  feedback-mode
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'settings', 'feedback-mode']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  environment
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment']
==== ==== processing key  traps
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'traps']
==== ==== processing key  trap-two
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'traps', 'trap-two']
==== ==== processing key  position
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'traps', 'trap-two', 'position']
==== ==== processing key  y
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  x
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  multiplexed
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  movable
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  scanner
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  list
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  trap-one
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'traps', 'trap-one']
==== ==== processing key  position
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'traps', 'trap-one', 'position']
==== ==== processing key  y
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  x
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  multiplexed
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  movable
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  scanner
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  series-scan-direction
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'series-scan-direction']
==== ==== processing key  y
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  x
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  z
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  z-scanner-map
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'z-scanner-map']
==== ==== processing key  z-scanners
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'z-scanner-map', 'z-scanners']
==== ==== processing key  active-z-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'z-scanner-map', 'z-scanners', 'active-z-scanner']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  list
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  z-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'z-scanner-map', 'z-scanner']
==== ==== processing key  piezo
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'z-scanner-map', 'z-scanner', 'piezo']
==== ==== processing key  z-scanner-environment
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'z-scanner-map', 'z-scanner', 'piezo', 'z-scanner-environment']
==== ==== processing key  z-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'z-scanner-map', 'z-scanner', 'piezo', 'z-scanner-environment', 'z-scanner']
==== ==== processing key  measured-position
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  description
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  error-channel
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  fancy-name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  position-channel
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  internal
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  z-range
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'z-scanner-map', 'z-scanner', 'piezo', 'z-scanner-environment', 'z-range']
==== ==== processing key  range
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'z-scanner-map', 'z-scanner', 'piezo', 'z-scanner-environment', 'z-range', 'range']
==== ==== processing key  max
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  min
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  fancyname
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  segment-start-xy-scanner-position-map
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'segment-start-xy-scanner-position-map']
==== ==== processing key  xy-scanners
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'segment-start-xy-scanner-position-map', 'xy-scanners']
==== ==== processing key  list
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  position-index
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  active-xy-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'segment-start-xy-scanner-position-map', 'xy-scanners', 'active-xy-scanner']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  xy-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'segment-start-xy-scanner-position-map', 'xy-scanner']
==== ==== processing key  sample-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'segment-start-xy-scanner-position-map', 'xy-scanner', 'sample-scanner']
==== ==== processing key  xy-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'segment-start-xy-scanner-position-map', 'xy-scanner', 'sample-scanner', 'xy-scanner']
==== ==== processing key  description
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  fancy-name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  scanner
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  start-position
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'segment-start-xy-scanner-position-map', 'xy-scanner', 'sample-scanner', 'start-position']
==== ==== processing key  y
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  x
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  xy-scanner-mode
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'segment-start-xy-scanner-position-map', 'xy-scanner', 'sample-scanner', 'xy-scanner-mode']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  laser-scanner-2
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'segment-start-xy-scanner-position-map', 'xy-scanner', 'laser-scanner-2']
==== ==== processing key  xy-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'segment-start-xy-scanner-position-map', 'xy-scanner', 'laser-scanner-2', 'xy-scanner']
==== ==== processing key  description
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  fancy-name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  scanner
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  scanner-id
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  start-position
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'segment-start-xy-scanner-position-map', 'xy-scanner', 'laser-scanner-2', 'start-position']
==== ==== processing key  y
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  x
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  xy-scanner-mode
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'segment-start-xy-scanner-position-map', 'xy-scanner', 'laser-scanner-2', 'xy-scanner-mode']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  laser-scanner-1
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'segment-start-xy-scanner-position-map', 'xy-scanner', 'laser-scanner-1']
==== ==== processing key  xy-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'segment-start-xy-scanner-position-map', 'xy-scanner', 'laser-scanner-1', 'xy-scanner']
==== ==== processing key  description
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  fancy-name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  scanner
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  scanner-id
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  start-position
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'segment-start-xy-scanner-position-map', 'xy-scanner', 'laser-scanner-1', 'start-position']
==== ==== processing key  y
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  x
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  xy-scanner-mode
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'segment-start-xy-scanner-position-map', 'xy-scanner', 'laser-scanner-1', 'xy-scanner-mode']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  series-start-xy-scanner-position-map
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'series-start-xy-scanner-position-map']
==== ==== processing key  xy-scanners
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'series-start-xy-scanner-position-map', 'xy-scanners']
==== ==== processing key  list
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  position-index
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  active-xy-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'series-start-xy-scanner-position-map', 'xy-scanners', 'active-xy-scanner']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  xy-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'series-start-xy-scanner-position-map', 'xy-scanner']
==== ==== processing key  sample-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'series-start-xy-scanner-position-map', 'xy-scanner', 'sample-scanner']
==== ==== processing key  xy-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'series-start-xy-scanner-position-map', 'xy-scanner', 'sample-scanner', 'xy-scanner']
==== ==== processing key  description
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  fancy-name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  scanner
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  start-position
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'series-start-xy-scanner-position-map', 'xy-scanner', 'sample-scanner', 'start-position']
==== ==== processing key  y
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  x
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  xy-scanner-mode
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'series-start-xy-scanner-position-map', 'xy-scanner', 'sample-scanner', 'xy-scanner-mode']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  laser-scanner-2
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'series-start-xy-scanner-position-map', 'xy-scanner', 'laser-scanner-2']
==== ==== processing key  xy-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'series-start-xy-scanner-position-map', 'xy-scanner', 'laser-scanner-2', 'xy-scanner']
==== ==== processing key  description
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  fancy-name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  scanner
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  scanner-id
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  start-position
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'series-start-xy-scanner-position-map', 'xy-scanner', 'laser-scanner-2', 'start-position']
==== ==== processing key  y
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  x
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  xy-scanner-mode
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'series-start-xy-scanner-position-map', 'xy-scanner', 'laser-scanner-2', 'xy-scanner-mode']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  laser-scanner-1
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'series-start-xy-scanner-position-map', 'xy-scanner', 'laser-scanner-1']
==== ==== processing key  xy-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'series-start-xy-scanner-position-map', 'xy-scanner', 'laser-scanner-1', 'xy-scanner']
==== ==== processing key  description
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  fancy-name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  scanner
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  scanner-id
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  start-position
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'series-start-xy-scanner-position-map', 'xy-scanner', 'laser-scanner-1', 'start-position']
==== ==== processing key  y
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  x
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  xy-scanner-mode
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'series-start-xy-scanner-position-map', 'xy-scanner', 'laser-scanner-1', 'xy-scanner-mode']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  xy-scanner-position-map
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map']
==== ==== processing key  defined
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  xy-scanners
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanners']
==== ==== processing key  list
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  position-index
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  active-xy-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanners', 'active-xy-scanner']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  xy-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanner']
==== ==== processing key  sample-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanner', 'sample-scanner']
==== ==== processing key  xy-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanner', 'sample-scanner', 'xy-scanner']
==== ==== processing key  description
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  fancy-name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  scanner
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  start-position
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanner', 'sample-scanner', 'start-position']
==== ==== processing key  y
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  x
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  xy-scanner-mode
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanner', 'sample-scanner', 'xy-scanner-mode']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  laser-scanner-2
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanner', 'laser-scanner-2']
==== ==== processing key  xy-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanner', 'laser-scanner-2', 'xy-scanner']
==== ==== processing key  description
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  fancy-name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  scanner
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  scanner-id
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  start-position
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanner', 'laser-scanner-2', 'start-position']
==== ==== processing key  y
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  x
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  xy-scanner-mode
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanner', 'laser-scanner-2', 'xy-scanner-mode']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  laser-scanner-1
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanner', 'laser-scanner-1']
==== ==== processing key  xy-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanner', 'laser-scanner-1', 'xy-scanner']
==== ==== processing key  description
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  fancy-name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  scanner
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  scanner-id
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  start-position
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanner', 'laser-scanner-1', 'start-position']
==== ==== processing key  y
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  x
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  xy-scanner-mode
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanner', 'laser-scanner-1', 'xy-scanner-mode']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  duration
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  force-scan-flags
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'force-scan-flags']
==== ==== processing key  z-start-out-of-range
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  done-scanning
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  z-end-out-of-range
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  tipsaver-limit-exceeded
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  aborted
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  setpoint-out-of-range
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  series-done
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  data-segment
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  type
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  name
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'name']
==== ==== processing key  type
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  channel
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel']
==== ==== processing key  xySum1
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xySum1']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xySum1', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xySum1', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  xySum2
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xySum2']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xySum2', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xySum2', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  height
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'height']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'height', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'height', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  yLaserOutput2
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'yLaserOutput2']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'yLaserOutput2', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'yLaserOutput2', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  yLaserOutput1
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'yLaserOutput1']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'yLaserOutput1', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'yLaserOutput1', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  xSignal1
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xSignal1']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xSignal1', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xSignal1', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  xSignal2
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xSignal2']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xSignal2', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xSignal2', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  trapDistance
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'trapDistance']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'trapDistance', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'trapDistance', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  capacitiveSensorXPosition
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'capacitiveSensorXPosition']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'capacitiveSensorXPosition', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'capacitiveSensorXPosition', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  xPiezoOutput
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xPiezoOutput']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xPiezoOutput', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xPiezoOutput', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  ySignal2
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'ySignal2']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'ySignal2', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'ySignal2', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  ySignal1
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'ySignal1']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'ySignal1', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'ySignal1', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  xLaserOutput2
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xLaserOutput2']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xLaserOutput2', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xLaserOutput2', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  xLaserOutput1
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xLaserOutput1']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xLaserOutput1', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'xLaserOutput1', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  yPiezoOutput
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'yPiezoOutput']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'yPiezoOutput', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'yPiezoOutput', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  zSignal2
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'zSignal2']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'zSignal2', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'zSignal2', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  zSignal1
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'zSignal1']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'zSignal1', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'zSignal1', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  precision-1
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'precision-1']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'precision-1', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'precision-1', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  precision-2
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'precision-2']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'precision-2', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'precision-2', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  precision-3
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'precision-3']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'precision-3', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'precision-3', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  precision-4
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'precision-4']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'precision-4', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'precision-4', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  distance
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'distance']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'distance', 'data']
==== ==== processing key  start
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  step
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  capacitiveSensorYPosition
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'capacitiveSensorYPosition']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'capacitiveSensorYPosition', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'capacitiveSensorYPosition', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  capacitiveSensorHeight
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'capacitiveSensorHeight']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'capacitiveSensorHeight', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'capacitiveSensorHeight', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link

In [4]:
links


Out[4]:
[['channel', 'xySum1', 'lcd-info'],
 ['channel', 'xySum2', 'lcd-info'],
 ['channel', 'height', 'lcd-info'],
 ['channel', 'yLaserOutput2', 'lcd-info'],
 ['channel', 'yLaserOutput1', 'lcd-info'],
 ['channel', 'xSignal1', 'lcd-info'],
 ['channel', 'xSignal2', 'lcd-info'],
 ['channel', 'trapDistance', 'lcd-info'],
 ['channel', 'capacitiveSensorXPosition', 'lcd-info'],
 ['channel', 'xPiezoOutput', 'lcd-info'],
 ['channel', 'ySignal2', 'lcd-info'],
 ['channel', 'ySignal1', 'lcd-info'],
 ['channel', 'xLaserOutput2', 'lcd-info'],
 ['channel', 'xLaserOutput1', 'lcd-info'],
 ['channel', 'yPiezoOutput', 'lcd-info'],
 ['channel', 'zSignal2', 'lcd-info'],
 ['channel', 'zSignal1', 'lcd-info'],
 ['channel', 'precision-1', 'lcd-info'],
 ['channel', 'precision-2', 'lcd-info'],
 ['channel', 'precision-3', 'lcd-info'],
 ['channel', 'precision-4', 'lcd-info'],
 ['channel', 'distance', 'lcd-info'],
 ['channel', 'capacitiveSensorYPosition', 'lcd-info'],
 ['channel', 'capacitiveSensorHeight', 'lcd-info']]

In [22]:
jpkmap = jpkfile.JPKMap("../../sdf/_sandbox/JPK/map-data-2015.04.29-16.50.13.jpk-force-map")

In [23]:
links = []
find_link(links, jpkmap.flat_indices[0].segments[0].parameters,jpkmap.shared_parameters.keys(),[])


==== loop starting with chain  []
==== ==== processing key  date
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  channels
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channels']
==== ==== processing key  list
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  force-segment-header
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header']
==== ==== processing key  time-stamp
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  baseline
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'baseline']
==== ==== processing key  measured
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  baseline
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  force-segment-header-info
==== ==== ==== identified key as link
==== ==== processing key  environment
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment']
==== ==== processing key  xy-scanner-position-map
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map']
==== ==== processing key  xy-scanners
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanners']
==== ==== processing key  position-index
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  xy-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanner']
==== ==== processing key  tip-scanner
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanner', 'tip-scanner']
==== ==== processing key  position
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'environment', 'xy-scanner-position-map', 'xy-scanner', 'tip-scanner', 'position']
==== ==== processing key  y
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  x
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  duration
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  force-scan-flags
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['force-segment-header', 'force-scan-flags']
==== ==== processing key  z-start-out-of-range
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  done-scanning
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  z-end-out-of-range
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  tipsaver-limit-exceeded
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  surface-incorrect
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  aborted
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  setpoint-out-of-range
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  series-done
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  data-segment
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  type
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  channel
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel']
==== ==== processing key  vDeflection
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'vDeflection']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'vDeflection', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'vDeflection', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  strainGaugeHeight
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'strainGaugeHeight']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'strainGaugeHeight', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'strainGaugeHeight', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  error
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'error']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'error', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'error', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  hDeflection
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'hDeflection']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'hDeflection', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'hDeflection', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link
==== ==== processing key  height
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'height']
==== ==== processing key  data
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'height', 'data']
==== ==== processing key  num-points
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  file
==== ==== ==== key is no link and value is dict
==== loop starting with chain  ['channel', 'height', 'data', 'file']
==== ==== processing key  name
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  format
==== ==== ==== key is no link, value is no dict --> done with branch
==== ==== processing key  lcd-info
==== ==== ==== identified key as link

In [24]:
links


Out[24]:
[['force-segment-header', 'force-segment-header-info'],
 ['channel', 'vDeflection', 'lcd-info'],
 ['channel', 'strainGaugeHeight', 'lcd-info'],
 ['channel', 'error', 'lcd-info'],
 ['channel', 'hDeflection', 'lcd-info'],
 ['channel', 'height', 'lcd-info']]

In [25]:
d = jpkmap.flat_indices[0].segments[0].parameters

In [26]:
d[links[0][0]]


Out[26]:
{'baseline': {'baseline': '0.6609367840580466', 'measured': 'true'},
 'duration': '2.5',
 'environment': {'xy-scanner-position-map': {'xy-scanner': {'tip-scanner': {'position': {'x': '-1.8750000814206397E-5',
      'y': '-1.875000055639165E-5'}}},
   'xy-scanners': {'position-index': '0'}}},
 'force-scan-flags': {'aborted': 'false',
  'data-segment': 'true',
  'done-scanning': 'false',
  'series-done': 'false',
  'setpoint-out-of-range': 'false',
  'surface-incorrect': 'false',
  'tipsaver-limit-exceeded': 'false',
  'z-end-out-of-range': 'false',
  'z-start-out-of-range': 'false'},
 'force-segment-header-info': {'*': '0'},
 'num-points': '5120',
 'time-stamp': '2015-04-29 16\\:50\\:09.994 +0200',
 'type': 'spm-force-segment-header'}

In [27]:
index = d[links[0][0]].pop(links[0][1])['*']

In [28]:
index


Out[28]:
'0'

In [29]:
d[links[0][0]].update(jpkmap.shared_parameters[links[0][1]][index])

In [30]:
d[links[0][0]]


Out[30]:
{'approach-id': '2015.04.29-13.35.28-00065',
 'baseline': {'baseline': '0.6609367840580466', 'measured': 'true'},
 'duration': '2.5',
 'environment': {'xy-scanner-position-map': {'defined': 'true',
   'xy-scanner': {'tip-scanner': {'xy-scanner': {'description': 'The internal tip scanner (100x100 um)',
      'fancy-name': 'Tip scanner',
      'name': 'tip-scanner',
      'scanner': 'tip'},
     'xy-scanner-mode': {'name': 'hardwareFeedback'}}},
   'xy-scanners': {'active-xy-scanner': {'name': 'tip-scanner'},
    'list': 'tip-scanner'}}},
 'force-scan-flags': {'aborted': 'false',
  'data-segment': 'true',
  'done-scanning': 'false',
  'series-done': 'false',
  'setpoint-out-of-range': 'false',
  'surface-incorrect': 'false',
  'tipsaver-limit-exceeded': 'false',
  'z-end-out-of-range': 'false',
  'z-start-out-of-range': 'false'},
 'name': {'name': 'extend-spm', 'type': 'standard'},
 'num-points': '5120',
 'settings': {'feedback-mode': {'name': 'contact'},
  'segment-settings': {'duration': '2.5',
   'identifier': {'name': 'extend-spm', 'type': 'standard'},
   'num-points': '5120',
   'setpoint': '0.7363290020276099',
   'style': 'extend',
   'type': 'z-extend-force',
   'z-end': '0.0',
   'z-start': '4.9999999999999996E-6'},
  'style': 'extend',
  'type': 'combined'},
 'time-stamp': '2015-04-29 16\\:50\\:09.994 +0200',
 'type': 'spm-force-segment-header'}

In [31]:
jpkmap.shared_parameters[links[0][1]][index]


Out[31]:
{'approach-id': '2015.04.29-13.35.28-00065',
 'environment': {'xy-scanner-position-map': {'defined': 'true',
   'xy-scanner': {'tip-scanner': {'xy-scanner': {'description': 'The internal tip scanner (100x100 um)',
      'fancy-name': 'Tip scanner',
      'name': 'tip-scanner',
      'scanner': 'tip'},
     'xy-scanner-mode': {'name': 'hardwareFeedback'}}},
   'xy-scanners': {'active-xy-scanner': {'name': 'tip-scanner'},
    'list': 'tip-scanner'}}},
 'name': {'name': 'extend-spm', 'type': 'standard'},
 'settings': {'feedback-mode': {'name': 'contact'},
  'segment-settings': {'duration': '2.5',
   'identifier': {'name': 'extend-spm', 'type': 'standard'},
   'num-points': '5120',
   'setpoint': '0.7363290020276099',
   'style': 'extend',
   'type': 'z-extend-force',
   'z-end': '0.0',
   'z-start': '4.9999999999999996E-6'},
  'style': 'extend',
  'type': 'combined'},
 'type': 'spm-force-segment-header'}

In [ ]: