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.io.DenoptimIO;
41import denoptim.main.Main.RunType;
42import denoptim.programs.combinatorial.CEBLParameters;
43import denoptim.programs.denovo.GAParameters;
44import denoptim.programs.fitnessevaluator.FRParameters;
45import denoptim.programs.fragmenter.FragmenterParameters;
46import denoptim.programs.genetweeker.GeneOpsRunnerParameters;
47import denoptim.programs.grapheditor.GraphEdParameters;
48import denoptim.programs.graphlisthandler.GraphListsHandlerParameters;
49import denoptim.programs.isomorphism.IsomorphismParameters;
50import denoptim.programs.mol2graph.Mol2GraphParameters;
51import denoptim.programs.moldecularmodelbuilder.MMBuilderParameters;
52import denoptim.utils.Randomizer;
84 protected String
workDir = System.getProperty(
"user.dir");
98 private Logger
logger = Logger.getLogger(
"DummyLogger");
116 new HashMap<ParametersType, RunTimeParameters>();
203 private Class<?> implementation;
206 CEBL_PARAMS.keywordRoot =
"FSE-";
207 GA_PARAMS.keywordRoot =
"GA-";
208 FS_PARAMS.keywordRoot =
"FS-";
209 FRG_PARAMS.keywordRoot =
"FRG-";
210 RC_PARAMS.keywordRoot =
"RC-";
211 FIT_PARAMS.keywordRoot =
"FP-";
212 FR_PARAMS.keywordRoot =
"FR-";
213 MMB_PARAM.keywordRoot =
"3DB-";
214 GO_PARAMS.keywordRoot =
"TESTGENOPS-";
215 GE_PARAMS.keywordRoot =
"GRAPHEDIT-";
216 GLH_PARAMS.keywordRoot =
"GRAPHLISTS-";
217 ISO_PARAMS.keywordRoot =
"ISOMORPHISM-";
218 M2G_PARAMS.keywordRoot =
"M2G-";
240 return implementation;
272 public final String
NL = System.getProperty(
"line.separator");
288 this.logger.setLevel(Level.SEVERE);
321 this.workDir = pathname;
343 this.workDir = pathname;
369 innerParams.setLogger(
logger);
389 throws SecurityException, IOException
412 throws SecurityException, IOException
414 logger = Logger.getLogger(loggerIdentifier);
416 int n =
logger.getHandlers().length;
417 for (
int i=0; i<n; i++)
424 FileHandler fileHdlr =
new FileHandler(
logFile);
425 SimpleFormatter formatterTxt =
new SimpleFormatter();
426 fileHdlr.setFormatter(formatterTxt);
427 logger.setUseParentHandlers(
false);
428 logger.addHandler(fileHdlr);
429 logger.setLevel(Level.INFO);
430 String header =
"Started logging for " + loggerIdentifier;
431 logger.log(Level.INFO,header);
433 logger.addHandler(
new StreamHandler(System.out,
434 new SimpleFormatter()));
439 Logger parlogger =
logger;
440 while (parlogger !=
null)
443 for (Handler handler : parlogger.getHandlers())
447 parlogger = parlogger.getParent();
453 innerParams.setLogger(
logger);
468 logger = Logger.getLogger(loggerIdentifier);
470 int n =
logger.getHandlers().length;
471 for (
int i=0; i<n; i++)
475 ConsoleHandler handler =
new ConsoleHandler();
476 handler.setFormatter(
new SimpleFormatter());
477 handler.setLevel(Level.INFO);
478 logger.addHandler(handler);
483 for (
int iH=0; iH<
logger.getHandlers().length; iH++)
491 innerParams.setLogger(
logger);
508 boolean result =
false;
509 String value = s.trim().toUpperCase();
510 if (value.equals(
"YES")
513 || value.equals(
"TRUE"))
516 }
else if (value.equals(
"NO")
519 || value.equals(
"FALSE"))
538 return Level.WARNING;
584 for (
int iH=0; iH<
logger.getHandlers().length; iH++)
592 innerParams.setVerbosity(l);
611 if (innerParams.rng!=
null)
613 rng = innerParams.rng;
614 return innerParams.rng;
621 innerParams.setRandomizer(
rng);
650 innerParams.setRandomizer(
rng);
666 innerParams.setRandomizer(
rng);
683 innerParams.setRandomizer(
rng);
698 BufferedReader br =
null;
701 br =
new BufferedReader(
new FileReader(infile));
702 while ((line = br.readLine()) !=
null)
707 catch (NumberFormatException | IOException nfe)
721 catch (IOException ioe)
737 if ((line.trim()).length() == 0)
740 if (line.startsWith(
"#"))
749 if (line.toUpperCase().startsWith(parType.keywordRoot))
755 otherParams.isMaster =
false;
780 }
catch (Exception e) {
817 otherParams.isMaster =
false;
858 String key = line.trim();
860 if (line.contains(
"="))
863 line.indexOf(
"=") + 1).trim();
864 value = line.substring(line.indexOf(
"=") + 1).trim();
908 otherCollector.checkParameters();
930 otherCollector.processParameters();
982 StringBuilder sb =
new StringBuilder(1024);
984 sb.append(
"-------------------------------------------"
985 +
"----------------------").append(
NL);
986 logger.log(Level.INFO,sb.toString());
999 if (pathname ==
null || pathname.isBlank())
1004 String msg =
"ERROR! File '" + pathname +
"' not found!";
1005 throw new Error(msg);
1020 String msg =
"ERROR! File '" + pathname +
"' not found!";
1021 throw new Error(msg);
1036 String msg =
"ERROR! Parameter '" + paramName +
"' is null! "
1037 +
"Please, add '" + paramType.keywordRoot + paramKey
1038 +
"' to the input parameters.";
1039 throw new Error(msg);
1054 String msg =
"ERROR! Parameter '" + paramName +
"' not striktly "
1055 +
"positive (" + value +
"). "
1056 +
"Please, use a positive value for '" + paramType.keywordRoot
1058 throw new Error(msg);
1074 String msg =
"ERROR! Parameter '" + paramName +
"' is negative ("
1076 +
"Please, use a positive value for '" + paramType.keywordRoot
1078 throw new Error(msg);
1092 if (max < value || min > value)
1094 String msg =
"ERROR! Parameter '" + paramName +
"' is not in range"
1095 + min +
" < x < " + max +
" (value: " + value +
"). "
1096 +
"Please, correct the value of '" + paramType.keywordRoot
1098 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.