0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MF4の中身を見る(車輪の再開発)

Posted at

シンプルにメッセージとシグナルを表示する

import asammdf
mdf = asammdf.MDF("BusLogging_xxxx.MF4")

for g in mdf.groups:
    print(g.channel_group.acq_name)
    for c in g.channels:
        print("  ", c.name)

ipytreeを使ってツリー表示

import asammdf
from ipytree import Tree, Node
mdf = asammdf.MDF("BusLogging_xxxx.MF4")

nodes = []
for g in mdf.groups:
    acq_name = g.channel_group.acq_name
    node = Node(acq_name, [Node(c.name) for c in g.channels])
    node.opened = False
    nodes.append(node)

root = Node('root', nodes)
root.opened = False

tree = Tree()
tree.add_node(root)
display(tree)

メッセージがたくさんある場合、接頭語でグループ化してツリー表示

import asammdf
from ipytree import Tree, Node

other_name = 'Other'
keys = 'AAA BBB CCC'.split()
node_hash = {other_name: []}
for k in keys:
    node_hash[k] = []

mdf = asammdf.MDF("BusLogging_xxxx.MF4")

for g in mdf.groups:
    acq_name = g.channel_group.acq_name
    key_name = other_name
    for k in keys:
        if k in acq_name:
            key_name = k
            break
    node = Node(g.channel_group.acq_name, [Node(c.name) for c in g.channels])
    node.opened = False
    node_hash[key_name].append(node)

root_nodes = []
for name, nodes in node_hash.items():
    node = Node(name, nodes)
    node.opened = False
    root_nodes.append(node)

root = Node('root', root_nodes)
root.opened = False

tree = Tree()
tree.add_node(root)
display(tree) 

複数ソースがある場合のメッセージ、シグナルの情報収集

import asammdf
mdf = asammdf.MDF("Recorder_AllSignal_*.mf4")

info = []
for gi, g in enumerate(mdf.groups):
    for ci, c in enumerate(g.channels):
        if c.source is not None:
            info.append((gi, g.channel_group.acq_name, ci, c.name, c.source.path))
        else:
            info.append((gi, g.channel_group.acq_name, ci, c.name, None))

source2msgs = {}
for gi, gn, ci, cn, s in info:
    if s is None:
        continue
    h = source2msgs.get(s, set())
    h.add((gi, gn))
    source2msgs[s] = h

source2sigs = {}
for source, msgs in source2msgs.items():
    source2sigs[source] = {}
    for gi, gn in msgs:
        source2sigs[source][gi] = dict(name=gn, sigs=[])
        sigs = []
        for ci, c in enumerate(mdf.groups[gi].channels):
            sigs.append((ci, c.name))
        source2sigs[source][gi]['sigs'] = sigs

ソース別メッセージのツリー表示

from ipytree import Tree, Node

source_nodes = []
for s in source2msgs.keys():
    node = Node(s, [Node(gn) for gi, gn in source2msgs[s]])
    node.opened = False
    source_nodes.append(node)
    #print(s)
    #for gi, gn in source2msgs[s]:
    #    print("  ", gi, gn)


root = Node('sources', source_nodes)
root.opened = False

tree = Tree()
tree.add_node(root)
display(tree) 
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?