4 from CoolRunQuery.utils.AtlRunQueryLookup
import DQChannelDict
6 from warnings
import warn
9 warn(
"Failed to import DQChannelDict from CoolRunQuery. "
10 "Can't perform channel conversions.")
15 channel_mapping = DQChannelDict.copy()
16 channel_names = channel_mapping.keys()
18 cm_reversed = {value: key
for key, value
in channel_mapping.items()}
19 channel_mapping.update(cm_reversed)
23 Given a channel, return a name detector or an integer (depending on want_id)
25 from builtins
import int
26 if isinstance(name, int):
27 if name
not in channel_mapping:
28 raise RuntimeError(
"ChannelID %r is not in channel_mapping" % name)
29 return name
if want_id
else channel_mapping[name]
31 elif isinstance(name, str):
32 if name
not in channel_mapping:
33 raise RuntimeError(
"ChannelID %r is not in channel_mapping" % name)
34 return name
if not want_id
else channel_mapping[name]
36 raise RuntimeError(
"I don't know how to convert %r into "
37 "a ChannelSelection" % name)
42 Given a list, return a channelselection.
44 Does the hard work of merging together adjacent channel numbers. Will also
45 convert channel names to numbers (if the folder is using DQ channels,
46 otherwise will give an incorrect result or fail to convert the strings to
49 from PyCool
import cool
50 if not list_
and as_list:
return []
51 if not list_:
return cool.ChannelSelection()
52 if set(map(type, list_)) !=
set([int])
and convert_channel:
53 list_ = map(convert_channel, list_)
59 for this, next
in zip(list_, list_[1:] + [-1]):
63 ranges.append((start, this))
69 assert len(ranges) < 50, (
70 "Cool has a 50 channel selection limit (%s selected)" % ranges)
72 selection = cool.ChannelSelection(*ranges.pop(0))
73 for start, end
in ranges:
74 selection.addRange(start, end)
80 Helper function which can convert a channel id, name, or list of either into
81 a cool.ChannelSelection. Includes protections for invalid channels.
83 from PyCool
import cool
85 mapping = channel_mapping
86 if cs
is None or cs == []:
87 return cool.ChannelSelection()
88 elif isinstance(cs, (int, str)):
90 return cool.ChannelSelection(channel_id, channel_id)
91 elif hasattr(cs,
"__iter__"):
94 elif isinstance(cs, cool.ChannelSelection):
96 raise RuntimeError(
"I don't know how to convert %r into a "
97 "ChannelSelection" % cs)
101 Given a `folder` name, retrieve a list of channel ids, names and return a
102 dictionary which will translate in either direction.
104 channel_ids =
list(folder.listChannels())
105 channel_names = folder.listChannelsWithNames()
106 channel_names =
list(map(channel_names.__getitem__, channel_ids))
107 channel_dict = dict(
list(zip(channel_ids, channel_names))
108 +
list(zip(channel_names, channel_ids)))
109 return channel_ids, channel_names, channel_dict