STORM_LOG_THROW(parametricModel.getInitialStates().getNumberOfSetBits()==1,storm::exceptions::NotSupportedException,"Parameter lifting requires models with only one initial state");
STORM_LOG_THROW(checkTask.isBoundSet(),storm::exceptions::NotSupportedException,"Parameter lifting requires a bounded property.");
STORM_LOG_THROW(parameterLiftingChecker->canHandle(checkTask),storm::exceptions::NotSupportedException,"Parameter lifting is not supported for this property.");
STORM_LOG_THROW(indexOfCurrentRegion<regions.size(),storm::exceptions::InvalidStateException,"Threshold for undiscovered area not reached but no unprocessed regions left.");
STORM_LOG_THROW((variableWithUpperBoundary!=upperBoundaries.end()),storm::exceptions::InvalidArgumentException,"Could not create region. No upper boundary specified for Variable "<<variableWithLowerBoundary.first);
STORM_LOG_THROW((variableWithLowerBoundary.second<=variableWithUpperBoundary->second),storm::exceptions::InvalidArgumentException,"Could not create region. The lower boundary for "<<variableWithLowerBoundary.first<<" is larger then the upper boundary");
STORM_LOG_THROW((this->variables.find(variableWithBoundary.first)!=this->variables.end()),storm::exceptions::InvalidArgumentException,"Could not create region. No lower boundary specified for Variable "<<variableWithBoundary.first);
}
template<typenameParametricType>
voidParameterRegion<ParametricType>::init(){
//check whether both mappings map the same variables, check that lower boundary <= upper boundary, and pre-compute the set of variables
STORM_LOG_THROW((variableWithUpperBoundary!=upperBoundaries.end()),storm::exceptions::InvalidArgumentException,"Could not create region. No upper boundary specified for Variable "<<variableWithLowerBoundary.first);
STORM_LOG_THROW((variableWithLowerBoundary.second<=variableWithUpperBoundary->second),storm::exceptions::InvalidArgumentException,"Could not create region. The lower boundary for "<<variableWithLowerBoundary.first<<" is larger then the upper boundary");
STORM_LOG_THROW((this->variables.find(variableWithBoundary.first)!=this->variables.end()),storm::exceptions::InvalidArgumentException,"Could not create region. No lower boundary specified for Variable "<<variableWithBoundary.first);
STORM_LOG_THROW(result!=lowerBoundaries.end(),storm::exceptions::InvalidArgumentException,"Tried to find a lower boundary for variable "<<variable<<" which is not specified by this region");
STORM_LOG_THROW(result!=upperBoundaries.end(),storm::exceptions::InvalidArgumentException,"Tried to find an upper boundary for variable "<<variable<<" which is not specified by this region");
STORM_LOG_THROW(result!=lowerBoundaries.end(),storm::exceptions::InvalidArgumentException,"Tried to find a lower boundary for variable "<<variable<<" which is not specified by this region");
STORM_LOG_THROW(result!=upperBoundaries.end(),storm::exceptions::InvalidArgumentException,"Tried to find an upper boundary for variable "<<variable<<" which is not specified by this region");
STORM_LOG_THROW(splittingPoint.size()==this->variables.size(),storm::exceptions::InvalidArgumentException,"Tried to split a region w.r.t. a point, but the point considers a different number of variables.");
STORM_LOG_THROW(splittingPoint.size()==this->variables.size(),storm::exceptions::InvalidArgumentException,"Tried to split a region w.r.t. a point, but the point considers a different number of variables.");
STORM_LOG_THROW(splittingPointEntry!=splittingPoint.end(),storm::exceptions::InvalidArgumentException,"Tried to split a region but a variable of this region is not defined by the splitting point.");
STORM_LOG_THROW(this->getLowerBoundary(variable)<=splittingPointEntry->second,storm::exceptions::InvalidArgumentException,"Tried to split a region but the splitting point is not contained in the region.");
STORM_LOG_THROW(this->getUpperBoundary(variable)>=splittingPointEntry->second,storm::exceptions::InvalidArgumentException,"Tried to split a region but the splitting point is not contained in the region.");
STORM_LOG_THROW(splittingPointEntry!=splittingPoint.end(),storm::exceptions::InvalidArgumentException,"Tried to split a region but a variable of this region is not defined by the splitting point.");
STORM_LOG_THROW(this->getLowerBoundary(variable)<=splittingPointEntry->second,storm::exceptions::InvalidArgumentException,"Tried to split a region but the splitting point is not contained in the region.");
STORM_LOG_THROW(this->getUpperBoundary(variable)>=splittingPointEntry->second,storm::exceptions::InvalidArgumentException,"Tried to split a region but the splitting point is not contained in the region.");
STORM_LOG_THROW(positionOfFirstRelation!=std::string::npos,storm::exceptions::InvalidArgumentException,"When parsing the region"<<parameterBoundariesString<<" I could not find a '<=' after the first number");
STORM_LOG_THROW(positionOfSecondRelation!=std::string::npos,storm::exceptions::InvalidArgumentException,"When parsing the region"<<parameterBoundariesString<<" I could not find a '<=' after the parameter");
STORM_LOG_THROW(parameter.length()>0,storm::exceptions::InvalidArgumentException,"When parsing the region"<<parameterBoundariesString<<" I could not find a parameter");
STORM_LOG_THROW(positionOfFirstRelation!=std::string::npos,storm::exceptions::InvalidArgumentException,"When parsing the region"<<parameterBoundariesString<<" I could not find a '<=' after the first number");
STORM_LOG_THROW(positionOfSecondRelation!=std::string::npos,storm::exceptions::InvalidArgumentException,"When parsing the region"<<parameterBoundariesString<<" I could not find a '<=' after the parameter");
STORM_LOG_THROW(parameter.length()>0,storm::exceptions::InvalidArgumentException,"When parsing the region"<<parameterBoundariesString<<" I could not find a parameter");
STORM_LOG_THROW(storm::settings::getModule<storm::settings::modules::RegionSettings>().isRegionsSet()||storm::settings::getModule<storm::settings::modules::RegionSettings>().isRegionFileSet(),storm::exceptions::InvalidSettingsException,"Tried to obtain regions from the settings but no regions are specified.");
STORM_LOG_THROW(!(storm::settings::getModule<storm::settings::modules::RegionSettings>().isRegionsSet()&&storm::settings::getModule<storm::settings::modules::RegionSettings>().isRegionFileSet()),storm::exceptions::InvalidSettingsException,"Regions are specified via file AND cmd line. Only one option is allowed.");
STORM_LOG_THROW(storm::settings::getModule<storm::settings::modules::RegionSettings>().isRegionsSet()||storm::settings::getModule<storm::settings::modules::RegionSettings>().isRegionFileSet(),storm::exceptions::InvalidSettingsException,"Tried to obtain regions from the settings but no regions are specified.");
STORM_LOG_THROW(!(storm::settings::getModule<storm::settings::modules::RegionSettings>().isRegionsSet()&&storm::settings::getModule<storm::settings::modules::RegionSettings>().isRegionFileSet()),storm::exceptions::InvalidSettingsException,"Regions are specified via file AND cmd line. Only one option is allowed.");
//if we reach this point we can assume that the region is given as a file.
STORM_LOG_THROW(storm::utility::fileExistsAndIsReadable(storm::settings::getModule<storm::settings::modules::RegionSettings>().getRegionFilePath()),storm::exceptions::InvalidSettingsException,"The path to the file in which the regions are specified is not valid.");
//if we reach this point we can assume that the region is given as a file.
STORM_LOG_THROW(storm::utility::fileExistsAndIsReadable(storm::settings::getModule<storm::settings::modules::RegionSettings>().getRegionFilePath()),storm::exceptions::InvalidSettingsException,"The path to the file in which the regions are specified is not valid.");
xxxxxxxxxx