From f3cec7d31f46697c47529800b532b66707525168 Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Sun, 8 Mar 2020 15:45:10 +0100 Subject: Support /dev/null as output method --- tests/roof/arguments.py | 2 +- tests/roof/config.py | 9 +++++---- tests/roof/graph.py | 15 +++++++-------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/tests/roof/arguments.py b/tests/roof/arguments.py index 22ea42b..3c8caed 100644 --- a/tests/roof/arguments.py +++ b/tests/roof/arguments.py @@ -15,7 +15,7 @@ def roof_get_args(): parser.add_argument('-b', '--benchmark', dest="benchmark", default=None, action="store_true", help="Bencmarking mode, writes to /dev/null") parser.add_argument('-g', '--gui', dest='gui', default=False, action="store_true", help="Visualize data") parser.add_argument('-t', '--track', dest='track', default=False, action="store_true", help="Track & control experiment") - + parser.add_argument( '--no-roof', dest="noroof", default=False, action="store_true", help="Disable ROOF, only network testing (no sinogram building, store linearly)") # I/O diff --git a/tests/roof/config.py b/tests/roof/config.py index 8f72014..5ea8d41 100644 --- a/tests/roof/config.py +++ b/tests/roof/config.py @@ -21,13 +21,13 @@ class RoofConfig: self.imaging_rate = self.get_opt('hardware', 'imaging_rate', 0) self.fan_bins = self.modules * self.get_opt('hardware', 'channels_per_module', 16) self.fan_projections = self.get_opt('hardware', 'samples_per_rotation', (self.sample_rate / self.imaging_rate) if (self.imaging_rate and self.sample_rate) else 1000) - + if self.args.number is None: self.args.number = 0 if self.args.benchmark else self.planes # Consistency and default mode if (self.args.plane is not None) and (self.args.plane > self.planes): raise ValueError("Only {} planes in configuration, but the plane {} is requested".format(self.planes, self.args.plane)) - + n_modes = (int(self.args.gui) + int(self.args.track) + int(0 if self.args.write is None else 1)) if n_modes > 1: raise ValueError("GUI, Control, and Write modes are mutualy incompatible") @@ -59,8 +59,9 @@ class RoofConfig: return globre.sub('*', path) def get_writer_type(self): + if self.args.output and re.search('/dev/null$', self.args.output): return None return None if self.args.benchmark else self.args.write if self.args.write else 'raw_sinograms' - + def get_writer_path(self): data_type = self.get_writer_type() if data_type is not None: @@ -68,7 +69,7 @@ class RoofConfig: if self.args.format: path = re.sub('\.([^.]+)$', '.' + self.args.format, path) return path return None - + def check_writer_type_is_raw_or_none(self): data_type = self.get_writer_type() data_path = self.get_writer_path() diff --git a/tests/roof/graph.py b/tests/roof/graph.py index 495c629..62aa44e 100644 --- a/tests/roof/graph.py +++ b/tests/roof/graph.py @@ -32,13 +32,13 @@ class RoofGraph(RoofConfig): def get_roof_task(self, name, **kwargs): kwargs.update(config = self.config_file) return self.get_task(name, **kwargs) - + def get_processor_task(self, stage, name, **kwargs): extra_args = self.get_opt(stage, name + '-options') if extra_args is not None: kwargs.update(extra_args) if (re.compile('roof').match(name)): kwargs.update(config = self.config_file) return self.save_task(stage, name, self.get_task(name, **kwargs)) - + def get_read_task(self, path): params = { 'raw_width': self.fan_bins, 'raw_height': self.fan_projections, 'raw_bitdepth': self.bit_depth } if re.search('\.raw$', path) else { } params['path'] = path @@ -132,11 +132,11 @@ class RoofGraph(RoofConfig): def get_processor(self, head, stage, writer = None): # skip (but not if not already skipped in previous processor) # how to connect readers to ffc? - + filters = self.get_opt(stage, 'filters', roof_filters[stage]) read_here = self.args.read and self.args.read in roof_data_types[stage].keys() write_here = self.args.write and self.args.write in roof_data_types[stage].keys() - + start_pos = 0 if read_here: start_filter = roof_data_types[stage][self.args.read] @@ -159,7 +159,7 @@ class RoofGraph(RoofConfig): if write_here and writer: self.graph.connect_nodes(head, writer) - + return None if write_here else head @@ -172,7 +172,7 @@ class RoofGraph(RoofConfig): # - Write mode: The reconstruction is performed and data is written after the specified step (default) [ -w ] # - Control mode: Control branch and raw data writting [ -c ] # - GUI mode: Visualization in GUI + raw_sinograms are written when enabled in GUI + some control tasks (also when enabled) [ -g ] - + head = reader # Check if we are branching here if (self.args.track or self.args.gui) and (self.get_data_type() is not None): @@ -204,7 +204,6 @@ class RoofGraph(RoofConfig): # if head split to 3 branches.... Otherwise, continue with control branch... except finish: pass - + def run(self): self.scheduler.run(self.graph) - \ No newline at end of file -- cgit v1.2.1