1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
/***********************************************/
/**
* @file parameterSelector.cpp
*
* @brief Index vector from selected parameters.
*
* @author Sebastian Strasser
* @date 2018-05-08
*
*/
/***********************************************/
#define DOCSTRING_ParameterSelector
#include "base/import.h"
#include "config/configRegister.h"
#include "inputOutput/logging.h"
#include "classes/parameterSelector/parameterSelectorComplement.h"
#include "classes/parameterSelector/parameterSelectorMatrix.h"
#include "classes/parameterSelector/parameterSelectorNames.h"
#include "classes/parameterSelector/parameterSelectorRange.h"
#include "classes/parameterSelector/parameterSelectorWildcard.h"
#include "classes/parameterSelector/parameterSelectorZeros.h"
#include "classes/parameterSelector/parameterSelector.h"
/***********************************************/
GROOPS_REGISTER_CLASS(ParameterSelector, "parameterSelectorType",
ParameterSelectorWildcard,
ParameterSelectorNames,
ParameterSelectorRange,
ParameterSelectorMatrix,
ParameterSelectorZeros,
ParameterSelectorComplement)
GROOPS_READCONFIG_UNBOUNDED_CLASS(ParameterSelector, "parameterSelectorType")
/***********************************************/
ParameterSelector::ParameterSelector(Config &config, const std::string &name)
{
try
{
std::string type;
while(readConfigChoice(config, name, type, Config::OPTIONAL, "", "selected parameters"))
{
renameDeprecatedChoice(config, type, "name", "wildcard", date2time(2020, 5, 30));
if(readConfigChoiceElement(config, "wildcard", type, "parameter name matching"))
parameters.push_back(new ParameterSelectorWildcard(config));
if(readConfigChoiceElement(config, "names", type, "manual list of parameter names"))
parameters.push_back(new ParameterSelectorNames(config));
if(readConfigChoiceElement(config, "range", type, "range of parameters"))
parameters.push_back(new ParameterSelectorRange(config));
if(readConfigChoiceElement(config, "matrix", type, "matrix containing parameter indexes"))
parameters.push_back(new ParameterSelectorMatrix(config));
if(readConfigChoiceElement(config, "zeros", type, "additional zero parameters"))
parameters.push_back(new ParameterSelectorZeros(config));
if(readConfigChoiceElement(config, "complement", type, "all parameters except those selected"))
parameters.push_back(new ParameterSelectorComplement(config));
endChoice(config);
if(isCreateSchema(config))
return;
}
}
catch(std::exception &e)
{
GROOPS_RETHROW(e)
}
}
/***********************************************/
ParameterSelector::~ParameterSelector()
{
for(UInt i=0; i<parameters.size(); i++)
delete parameters.at(i);
}
/***********************************************/
std::vector<UInt> ParameterSelector::indexVector(const std::vector<ParameterName> ¶meterNames)
{
try
{
std::vector<UInt> vector;
for(const auto ¶m : parameters)
{
std::vector<UInt> vec = param->indexVector(parameterNames);
vector.insert(vector.end(), vec.begin(), vec.end());
}
return vector;
}
catch(std::exception &e)
{
GROOPS_RETHROW(e)
}
}
/***********************************************/
std::vector<UInt> ParameterSelector::indexVectorComplement(std::vector<UInt> vector, UInt referenceLength)
{
try
{
std::vector<UInt> complement;
std::vector<UInt> all(referenceLength);
std::iota(all.begin(), all.end(), 0);
if(!vector.size())
return all;
std::sort(vector.begin(), vector.end());
std::set_difference(all.begin(), all.end(), vector.begin(), vector.end(), std::inserter(complement, complement.end()));
return complement;
}
catch(std::exception &e)
{
GROOPS_RETHROW(e)
}
}
/***********************************************/
|