Isis 3 Programmer Reference
PipelineApplication.h
1#ifndef PipelineApplication_h
2#define PipelineApplication_h
8/* SPDX-License-Identifier: CC0-1.0 */
9
10#include <vector>
11
12#include <QString>
13
14#include "IException.h"
15
16namespace Isis {
17 class Pipeline;
18 class PipelineParameter;
19
47 public:
48 PipelineApplication(QString appName, Pipeline *pipe);
49 PipelineApplication(QString appName, PipelineApplication *previous);
50
53
62
70 // Implies branches will be merged if this is set as an input parameter.
73 // Implies branches will NOT be merged if this is set as an input parameter.
75 };
76
78 const QString &Name() const {
79 return p_name;
80 }
82 const std::vector<QString> &ParamString() const {
83 return p_paramString;
84 }
86 const std::vector<QString> &InputBranches() const {
87 return p_inBranches;
88 }
90 const std::vector<QString> &OutputBranches() const {
91 if(!Enabled() && Previous()) {
92 return Previous()->OutputBranches();
93 }
94 else if(Enabled()) {
95 return p_outBranches;
96 }
97 else {
98 return p_inBranches;
99 }
100 }
101
103 void Enable() {
104 p_enabled = true;
105 };
106
108 void Disable() {
109 p_enabled = false;
110 };
111
113 const bool &Enabled() const {
114 return p_enabled;
115 }
116
117 void SetInputParameter(const QString &inputParamName, bool supportsVirtualBands);
118 void SetInputParameter(const QString &inputParamName, CustomParameterValue value, bool supportsVirtualBands);
119
120 void SetOutputParameter(const QString &outputParamName, const QString &outNameModifier, const QString &outFileExtension = "cub");
121 void SetOutputParameter(const QString &branch, const QString &outputParamName,
122 const QString &outNameModifier, const QString &outFileExtension);
123
124 void AddBranch(const QString &modString, NameModifierType type);
125
126 void AddParameter(const QString &inputParamName, const QString &appParamName);
127 void AddParameter(const QString &branch, const QString &inputParamName, const QString &appParamName);
128
129 void AddConstParameter(const QString &appParamName, const QString &appParamValue);
130 void AddConstParameter(const QString &branch, const QString &appParamName, const QString &appParamValue);
131
132 void AddParameter(const QString &appParamName, CustomParameterValue value);
133 void AddParameter(const QString &branch, const QString &appParamName, CustomParameterValue value);
134
137 return (!p_outputMod.isEmpty() || !Previous()) ? p_outputMod : Previous()->OutputNameModifier();
138 }
140 QString OutputExtension() {
141 return (!p_outputExtension.isEmpty() || !Previous()) ? p_outputExtension : Previous()->OutputExtension();
142 }
144 std::vector<QString> &GetOutputs();
145
146 std::vector<QString> TemporaryFiles();
147
154 p_next = next;
155 }
156
157
164 p_previous = prev;
165 }
166
167 void BuildParamString();
168
171 if(p_next == NULL) return p_next;
172 if(!p_next->Enabled()) return p_next->Next();
173 return p_next;
174 }
175
178 if(p_previous == NULL) return p_previous;
179 if(!p_previous->Enabled()) return p_previous->Previous();
180 return p_previous;
181 }
182
185 if(p_previous == NULL) return p_previous;
186 if(!p_previous->Enabled()) return p_previous->Previous();
187 if(p_previous->p_output.empty()) return p_previous->Previous();
188 return p_previous;
189 }
190
192 void SetVirtualBands(std::vector<QString> bands);
193
202 void EnableBranch(QString branch, bool flag) {
203 for(int i=0; i<(int)p_inBranches.size(); i++) {
204 if (p_inBranches[i].contains(branch))
205 p_enableBranch[i] = flag;
206 }
207 }
208
218 bool BranchEnabled(int branch){
219 if (branch >= 0 && branch >= (int)p_enableBranch.size())
220 return false;
221 return p_enableBranch[branch] ;
222 }
223
231 void SetContinue(bool pbFlag){
232 p_continue = pbFlag;
233 };
234
242 bool Continue(void) {
243 return p_continue;
244 };
245
246 private:
251 return p_pipeline;
252 }
253
255 bool Branches() {
256 if(p_inBranches.size() >= p_outBranches.size()) return false;
257 return true;
258 }
259
261 bool Merges() {
262 if(p_inBranches.size() == 1) return false;
263 if(p_outBranches.size() == 1) return true;
264 return false;
265 }
266
273 bool StringStartsWith(QString from, QString compare) {
274 if(compare.size() > from.size()) return false;
275
276 for(int index = 0; index < compare.size(); index++)
277 if(from[index] != compare[index]) return false;
278
279 return true;
280 }
281
282 QString CalculateInputFile(int branch);
283 QString CalculateOutputFile(int branch);
284 QString GetRealLastOutput(bool skipOne = false);
286
287 int FindBranch(QString name, bool input = true);
288
292 QString p_name;
293 std::vector<QString> p_outputs;
294 std::vector<QString> p_tempFiles;
295 std::vector<QString> p_paramString;
296 std::vector<QString> p_inBranches;
297 std::vector<QString> p_outBranches;
298 std::vector<bool> p_enableBranch;
299
300 std::vector<PipelineParameter> p_output;
301 QString p_outputMod;
303 std::vector<QString> p_virtualBands;
304
305 std::vector<PipelineParameter> p_input;
306 std::vector<PipelineParameter> p_params;
307
311 };
312
324 public:
331 PipelineParameter(QString paramName) {
332 p_paramName = paramName;
334 p_branch = -1;
335 }
336
337
345 PipelineParameter(QString paramName, QString value) {
346 p_paramName = paramName;
347 p_paramValue = value;
349 p_branch = -1;
350 }
351
352
360 PipelineParameter(int branch, QString paramName) {
361 p_branch = branch;
362 p_paramName = paramName;
364 }
365
366
375 PipelineParameter(int branch, QString paramName, QString paramValue) {
376 p_branch = branch;
377 p_paramValue = paramValue;
378 p_paramName = paramName;
380 }
381
382
391 p_paramName = paramName;
392 p_special = special;
393 p_branch = -1;
394 }
395
396
405 PipelineParameter(int branch, QString paramName, PipelineApplication::CustomParameterValue special) {
406 p_paramName = paramName;
407 p_special = special;
408 p_branch = branch;
409 }
410
411
419 bool AppliesToBranch(int branch) {
420 return (p_branch == -1 || p_branch == branch);
421 }
422
424 QString Name() {
425 return p_paramName;
426 }
428 QString Value() {
429 return p_paramValue;
430 }
432 bool IsSpecial() {
434 };
441 return p_branch == -1;
442 }
443
444 private:
446 QString p_paramName;
447 QString p_paramValue;
449 };
450};
451#endif
This class represents one application in the pipeline.
void SetVirtualBands(std::vector< QString > bands)
Set the virtual bands that this application is to apply.
bool Merges()
Returns true if this application does merge branches (multiple input branches, one output)
std::vector< bool > p_enableBranch
Branch enabled/disabled.
const QString & Name() const
Get the name of this pipeline application.
Pipeline * GetPipeline()
Returns the pipeline.
NameModifierType
This is used for branches.
std::vector< QString > p_outBranches
Output branches.
QString p_outputExtension
Output file name extension.
PipelineApplication * Previous() const
This returns the last enabled pipeline application or null.
QString CalculateOutputFile(int branch)
This method calculates the output file for the specified branch.
bool p_supportsVirtualBands
This application supports virtual bands?
bool SupportsVirtualBands()
Returns true if virtual bands are supported.
QString p_outputMod
Output file name modifier.
std::vector< QString > p_virtualBands
Virtual bands string to add (empty if none)
~PipelineApplication()
This is the destructor.
Pipeline * p_pipeline
The pipeline.
const std::vector< QString > & ParamString() const
Get the parameters for running this program; one element in the vector per run.
QString GetRealLastOutput(bool skipOne=false)
This method is used to calculate the value for CustomParameterValue::LastOutput.
bool Continue(void)
Get the continue flag status.
bool BranchEnabled(int branch)
Check whether a branch is enabled given branch index.
std::vector< QString > p_paramString
Built parameter strings.
bool p_enabled
This application enabled?
bool p_continue
Continue the pipeline execution even if an error is encountered by this app.
std::vector< PipelineParameter > p_input
Input parameters.
PipelineApplication * Next() const
This returns the next enabled pipeline application or null.
const std::vector< QString > & InputBranches() const
Get the branches this program expects as input.
bool FutureOutputFileCreated()
Returns true if a future application creates output.
void EnableBranch(QString branch, bool flag)
Enable/Disable Branch given the branch name.
void AddParameter(const QString &inputParamName, const QString &appParamName)
This method adds knowledge of a parameter to the application.
void BuildParamString()
This method calculates the inputs, outputs and necessary calls to this program for the pipeline.
PipelineApplication * p_next
Next pipeline application.
std::vector< PipelineParameter > p_output
Output parameters.
CustomParameterValue
This is used to set custom values that must be calculated on the fly.
@ LastAppOutputListNoMerge
A list of files from the last run application's output.
@ LastOutput
The very last output file. Do not use this for input parameters if it's not necessary,...
@ LastAppOutputList
A list of files from the last run application's output.
QString CalculateInputFile(int branch)
This method calculates the input file for the specified branch.
PipelineApplication(QString appName, Pipeline *pipe)
Constructs the first pipeline application.
QString OutputExtension()
This returns this application's output file name's extension.
const bool & Enabled() const
Returns true if this program will be run.
void AddBranch(const QString &modString, NameModifierType type)
This method adds branch to this program.
std::vector< QString > & GetOutputs()
This returns this application's output files. Only valid after BuildParamString is called.
void Enable()
This method enables this program to be run.
PipelineApplication * PreviousOutputer() const
This returns the previous enabled pipeline application that makes output or null.
PipelineApplication * p_previous
Previous pipeline application.
PipelineParameter & GetInputParameter(int branch)
This gets the input parameter for the specified branch.
void Disable()
This method disables this program, causing it to be ignored.
std::vector< PipelineParameter > p_params
Regular parameters.
QString p_name
Name of this application.
void SetContinue(bool pbFlag)
Set the continue flag status.
void AddConstParameter(const QString &appParamName, const QString &appParamValue)
This method adds a parameter to this application with a known value (does not get it from the user in...
QString OutputNameModifier()
This returns this application's output name modifier.
bool Branches()
Return true is this application does branch (one input branch, multiple output)
void SetOutputParameter(const QString &outputParamName, const QString &outNameModifier, const QString &outFileExtension="cub")
Set the output parameter for this application and it's naming convention.
std::vector< QString > TemporaryFiles()
This method returns a list of the temporary files generated by this program.
bool LastApplicationWithOutput()
Returns true if this is the last application with output.
void SetPrevious(PipelineApplication *prev)
Link to the previous application in the pipeline.
void SetNext(PipelineApplication *next)
Link to the next application in the pipeline.
int FindBranch(QString name, bool input=true)
The method, given a string, finds the index of a branch.
void SetInputParameter(const QString &inputParamName, bool supportsVirtualBands)
Set the input parameter for this application and whether or not this application supports the virtual...
bool StringStartsWith(QString from, QString compare)
String comparison helper, returns true if from starts with compare bool.
std::vector< QString > p_outputs
Actual output files.
std::vector< QString > p_inBranches
Input branches.
const std::vector< QString > & OutputBranches() const
Get the branches this program has as output.
std::vector< QString > p_tempFiles
Actial temporary files.
This class helps to call other Isis Applications in a Pipeline.
Definition Pipeline.h:151
This class represents a parameter of some type for the PipelineApplication.
PipelineParameter(int branch, QString paramName, PipelineApplication::CustomParameterValue special)
Construct the parameter with a parameter name and special value; affects only the specified branch.
PipelineParameter(QString paramName)
Construct the parameter with only a parameter name; affects all branches and is not a special value.
PipelineParameter(int branch, QString paramName)
Construct the parameter with only a parameter name; affects only the specified branch and is not a sp...
PipelineParameter(int branch, QString paramName, QString paramValue)
Construct the parameter with a parameter name and value; affects only the specified branch and is not...
QString p_paramValue
Parameter non-special value.
QString Value()
Non-special value of the parameter.
PipelineParameter(QString paramName, QString value)
Construct the parameter with a parameter name and value; affects all branches and is not special.
PipelineParameter(QString paramName, PipelineApplication::CustomParameterValue special)
Construct the parameter with a parameter name and special value; affects all branches.
PipelineApplication::CustomParameterValue Special()
Special value of the parameter.
int p_branch
Branch this affects.
bool IsSpecial()
True if the parameter value is special.
bool AppliesToBranch(int branch)
Returns whether or not the specified branch is affected.
QString p_paramName
Parameter name.
QString Name()
Name of the parameter.
bool AffectsAllBranches()
True if branch-independant.
PipelineApplication::CustomParameterValue p_special
Parameter special value.
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16