19package denoptim.programs;
21import java.io.BufferedReader;
22import java.io.FileReader;
23import java.io.IOException;
24import java.lang.reflect.Constructor;
25import java.util.HashMap;
27import java.util.logging.ConsoleHandler;
28import java.util.logging.FileHandler;
29import java.util.logging.Handler;
30import java.util.logging.Level;
31import java.util.logging.Logger;
32import java.util.logging.SimpleFormatter;
33import java.util.logging.StreamHandler;
35import denoptim.exception.DENOPTIMException;
36import denoptim.files.FileUtils;
37import denoptim.fitness.FitnessParameters;
38import denoptim.fragspace.FragmentSpaceParameters;
39import denoptim.graph.rings.RingClosureParameters;
40import denoptim.main.Main.RunType;
41import denoptim.programs.combinatorial.CEBLParameters;
42import denoptim.programs.denovo.GAParameters;
43import denoptim.programs.fitnessevaluator.FRParameters;
44import denoptim.programs.fragmenter.FragmenterParameters;
45import denoptim.programs.genetweeker.GeneOpsRunnerParameters;
46import denoptim.programs.grapheditor.GraphEdParameters;
47import denoptim.programs.graphlisthandler.GraphListsHandlerParameters;
48import denoptim.programs.isomorphism.IsomorphismParameters;
49import denoptim.programs.mol2graph.Mol2GraphParameters;
50import denoptim.programs.moldecularmodelbuilder.MMBuilderParameters;
51import denoptim.utils.Randomizer;
83 protected String
workDir = System.getProperty(
"user.dir");
97 private Logger
logger = Logger.getLogger(
"DummyLogger");
115 new HashMap<ParametersType, RunTimeParameters>();
202 private Class<?> implementation;
205 CEBL_PARAMS.keywordRoot =
"FSE-";
206 GA_PARAMS.keywordRoot =
"GA-";
207 FS_PARAMS.keywordRoot =
"FS-";
208 FRG_PARAMS.keywordRoot =
"FRG-";
209 RC_PARAMS.keywordRoot =
"RC-";
210 FIT_PARAMS.keywordRoot =
"FP-";
211 FR_PARAMS.keywordRoot =
"FR-";
212 MMB_PARAM.keywordRoot =
"3DB-";
213 GO_PARAMS.keywordRoot =
"TESTGENOPS-";
214 GE_PARAMS.keywordRoot =
"GRAPHEDIT-";
215 GLH_PARAMS.keywordRoot =
"GRAPHLISTS-";
216 ISO_PARAMS.keywordRoot =
"ISOMORPHISM-";
217 M2G_PARAMS.keywordRoot =
"M2G-";
239 return implementation;
271 public final String
NL = System.getProperty(
"line.separator");
287 this.logger.setLevel(Level.SEVERE);
320 this.workDir = pathname;
342 this.workDir = pathname;
368 innerParams.setLogger(
logger);
388 throws SecurityException, IOException
411 throws SecurityException, IOException
413 logger = Logger.getLogger(loggerIdentifier);
415 int n =
logger.getHandlers().length;
416 for (
int i=0; i<n; i++)
423 FileHandler fileHdlr =
new FileHandler(
logFile);
424 SimpleFormatter formatterTxt =
new SimpleFormatter();
425 fileHdlr.setFormatter(formatterTxt);
426 logger.setUseParentHandlers(
false);
427 logger.addHandler(fileHdlr);
428 logger.setLevel(Level.INFO);
429 String header =
"Started logging for " + loggerIdentifier;
430 logger.log(Level.INFO,header);
432 logger.addHandler(
new StreamHandler(System.out,
433 new SimpleFormatter()));
438 Logger parlogger =
logger;
439 while (parlogger !=
null)
442 for (Handler handler : parlogger.getHandlers())
446 parlogger = parlogger.getParent();
452 innerParams.setLogger(
logger);
467 logger = Logger.getLogger(loggerIdentifier);
469 int n =
logger.getHandlers().length;
470 for (
int i=0; i<n; i++)
474 ConsoleHandler handler =
new ConsoleHandler();
475 handler.setFormatter(
new SimpleFormatter());
476 handler.setLevel(Level.INFO);
477 logger.addHandler(handler);
482 for (
int iH=0; iH<
logger.getHandlers().length; iH++)
490 innerParams.setLogger(
logger);
507 boolean result =
false;
508 String value = s.trim().toUpperCase();
509 if (value.equals(
"YES")
512 || value.equals(
"TRUE"))
515 }
else if (value.equals(
"NO")
518 || value.equals(
"FALSE"))
537 return Level.WARNING;
583 for (
int iH=0; iH<
logger.getHandlers().length; iH++)
591 innerParams.setVerbosity(l);
610 if (innerParams.rng!=
null)
612 rng = innerParams.rng;
613 return innerParams.rng;
620 innerParams.setRandomizer(
rng);
649 innerParams.setRandomizer(
rng);
665 innerParams.setRandomizer(
rng);
682 innerParams.setRandomizer(
rng);
697 BufferedReader br =
null;
700 br =
new BufferedReader(
new FileReader(infile));
701 while ((line = br.readLine()) !=
null)
706 catch (NumberFormatException | IOException nfe)
720 catch (IOException ioe)
736 if ((line.trim()).length() == 0)
739 if (line.startsWith(
"#"))
748 if (line.toUpperCase().startsWith(parType.keywordRoot))
754 otherParams.isMaster =
false;
779 }
catch (Exception e) {
816 otherParams.isMaster =
false;
857 String key = line.trim();
859 if (line.contains(
"="))
862 line.indexOf(
"=") + 1).trim();
863 value = line.substring(line.indexOf(
"=") + 1).trim();
907 otherCollector.checkParameters();
929 otherCollector.processParameters();
981 StringBuilder sb =
new StringBuilder(1024);
983 sb.append(
"-------------------------------------------"
984 +
"----------------------").append(
NL);
985 logger.log(Level.INFO,sb.toString());
998 if (pathname ==
null || pathname.isBlank())
1003 String msg =
"ERROR! File '" + pathname +
"' not found!";
1004 throw new Error(msg);
1019 String msg =
"ERROR! File '" + pathname +
"' not found!";
1020 throw new Error(msg);
1035 String msg =
"ERROR! Parameter '" + paramName +
"' is null! "
1036 +
"Please, add '" + paramType.keywordRoot + paramKey
1037 +
"' to the input parameters.";
1038 throw new Error(msg);
1053 String msg =
"ERROR! Parameter '" + paramName +
"' not striktly "
1054 +
"positive (" + value +
"). "
1055 +
"Please, use a positive value for '" + paramType.keywordRoot
1057 throw new Error(msg);
1073 String msg =
"ERROR! Parameter '" + paramName +
"' is negative ("
1075 +
"Please, use a positive value for '" + paramType.keywordRoot
1077 throw new Error(msg);
1091 if (max < value || min > value)
1093 String msg =
"ERROR! Parameter '" + paramName +
"' is not in range"
1094 + min +
" < x < " + max +
" (value: " + value +
"). "
1095 +
"Please, correct the value of '" + paramType.keywordRoot
1097 throw new Error(msg);
static boolean checkExists(String fileName)
Settings defining the calculation of fitness.
Parameters defining the fragment space.
Parameters and setting related to handling ring closures.
Collection of parameters controlling the behavior of the software.
Map< ParametersType, RunTimeParameters > otherParameters
Collection of other parameters by type.
void setRandomizer(Randomizer rng)
Sets the randomizer.
Logger startProgramSpecificLogger(String loggerIdentifier)
Starts a logger with the given name.
long getRandomSeed()
Returns the seed.
RunTimeParameters(ParametersType paramType)
Constructor.
boolean isMaster
Flag signaling this is the master collection of parameters.
boolean containsParameters(ParametersType type)
void setLogger(Logger logger)
Set the name of the program specific logger.
abstract void checkParameters()
Evaluate consistency of input parameters.
void setParameters(RunTimeParameters otherParams)
String getWorkDirectory()
Gets the pathname to the working directory.
static RunTimeParameters getInstanceFor(ParametersType paramType)
Builds the implementation of this class suitable to allocate parameters of the given type.
Randomizer startRandomizer(long seed)
Starts a program specific randomizer, i.e., a tool for generating random numbers and taking random de...
static boolean readYesNoTrueFalse(String s)
Reads a string searching for any common way to say either yes/true (including shorthand t/y) or no/fa...
abstract String getPrintedList()
Returns the list of parameters in a string with newline characters as delimiters.
void ensureFileExists(String pathname)
Ensures a pathname does lead to an existing file or triggers an error.
void interpretKeyword(String line)
Processes a string looking for keyword and a possibly associated value.
RunTimeParameters getParameters(ParametersType type)
void readParameterFile(String infile)
Read the parameter TXT file line by line and interpret its content.
Logger getLogger()
Get the name of the program specific logger.
Logger startProgramSpecificLogger(String loggerIdentifier, boolean toLogFile)
Starts a logger with the given name.
Logger logger
Program-specific logger.
void ensureIsPositiveOrZero(String paramName, int value, String paramKey)
Ensures that a parameter is a positive number (x>=0) or triggers an error.
String getLogFilePathname()
Gets the pathname to the log file.
void printParameters()
Print all parameters.
void setLogFilePathname(String pathname)
Sets the pathname to the log file.
abstract void processParameters()
Processes all parameters and initialize related objects.
void readParameterLine(String line)
void ensureNotNull(String paramName, String param, String paramKey)
Ensures that a parameter is not null or triggers an error.
String paramTypeName()
Returns a string defining the type the parameters collected here.
void ensureInRange(String paramName, int value, int min, int max, String paramKey)
Ensures that a parameter is within a range or triggers an error.
void ensureIsPositive(String paramName, int value, String paramKey)
Ensures that a parameter is a positive number (x>=0) or triggers an error.
Randomizer rng
Program-specific random numbers and random decisions generator.
void checkOtherParameters()
Checks any of the parameter collections contained in this instance.
abstract void interpretKeyword(String key, String value)
Processes a keyword/value pair and assign the related parameters.
String workDir
Working directory.
Logger startConsoleLogger(String loggerIdentifier)
Starts a program-specific logger that prints to System.err stream.
final String NL
New line character.
Level verbosityTologLevel()
Randomizer startRandomizer()
Starts a program specific randomizer, i.e., a tool for generating random numbers and taking random de...
ParametersType paramType
The type of parameters collected in this instance.
int getVerbosity()
Returns the level of verbosity, i.e., the amount of log that we want to print.
void processOtherParameters()
Processes any of the parameter collections contained in this instance.
int verbosity
Verbosity level for logger.
void setVerbosity(int l)
Set the level of verbosity.
Randomizer getRandomizer()
Returns the current program-specific randomizer.
void setWorkDirectory(String pathname)
Gets the pathname to the working directory.
void ensureFileExistsIfSet(String pathname)
Ensures a pathname is not empty nor null and that it does lead to an existing file or triggers an err...
Parameters controlling execution of the combinatorial algorithm for exploration of a fragment space b...
Parameters for genetic algorithm.
Parameters controlling execution of FitnessRunner.
Parameters controlling execution of the fragmenter.
Parameters controlling execution of TestOperator.
Parameters controlling execution of GraphEditor.
Parameters controlling execution of GraphEditor.
Parameters controlling execution of Isomorphism main class.
Parameters controlling execution of GraphEditor.
Parameters for the conformer generator (3D builder).
Tool to generate random numbers and random decisions.
Identifier of the type of parameters.
GO_PARAMS
Parameters controlling stand-alone run of genetic operators.
FR_PARAMS
Parameters controlling a stand-alone fitness evaluation run.
M2G_PARAMS
Parameters controlling molecule-to-graph conversion.
String keywordRoot
The root of any keyword that is meant to be used to set any of the parameters belonging to this class...
FS_PARAMS
Parameters pertaining the definition of the fragment space.
CEBL_PARAMS
Parameters pertaining the combinatorial exploration by layer.
ISO_PARAMS
Parameters controlling the stand-alone detection of graph isomorphism.
FRG_PARAMS
Parameters controlling the fragmenter.
MMB_PARAM
Parameters pertaining the construction of three-dimensional molecular models using the Tinker-based m...
GLH_PARAMS
Parameters controlling the stand-alone management of list of graphs.
FIT_PARAMS
Parameters pertaining the calculation of fitness (i.e., the fitness provider).
GA_PARAMS
Parameters pertaining the genetic algorithm.
RC_PARAMS
Parameters pertaining to ring closures in graphs.
Class<?> getImplementation()
GE_PARAMS
Parameters controlling the stand-alone editing of graphs.