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.Level;
30import java.util.logging.Logger;
31import java.util.logging.SimpleFormatter;
32import java.util.logging.StreamHandler;
34import denoptim.exception.DENOPTIMException;
35import denoptim.files.FileUtils;
36import denoptim.fitness.FitnessParameters;
37import denoptim.fragspace.FragmentSpaceParameters;
38import denoptim.graph.rings.RingClosureParameters;
39import denoptim.main.Main.RunType;
40import denoptim.programs.combinatorial.CEBLParameters;
41import denoptim.programs.denovo.GAParameters;
42import denoptim.programs.fitnessevaluator.FRParameters;
43import denoptim.programs.fragmenter.FragmenterParameters;
44import denoptim.programs.genetweeker.GeneOpsRunnerParameters;
45import denoptim.programs.grapheditor.GraphEdParameters;
46import denoptim.programs.graphlisthandler.GraphListsHandlerParameters;
47import denoptim.programs.isomorphism.IsomorphismParameters;
48import denoptim.programs.mol2graph.Mol2GraphParameters;
49import denoptim.programs.moldecularmodelbuilder.MMBuilderParameters;
50import denoptim.utils.Randomizer;
82 protected String
workDir = System.getProperty(
"user.dir");
96 private Logger
logger = Logger.getLogger(
"DummyLogger");
114 new HashMap<ParametersType, RunTimeParameters>();
201 private Class<?> implementation;
204 CEBL_PARAMS.keywordRoot =
"FSE-";
205 GA_PARAMS.keywordRoot =
"GA-";
206 FS_PARAMS.keywordRoot =
"FS-";
207 FRG_PARAMS.keywordRoot =
"FRG-";
208 RC_PARAMS.keywordRoot =
"RC-";
209 FIT_PARAMS.keywordRoot =
"FP-";
210 FR_PARAMS.keywordRoot =
"FR-";
211 MMB_PARAM.keywordRoot =
"3DB-";
212 GO_PARAMS.keywordRoot =
"TESTGENOPS-";
213 GE_PARAMS.keywordRoot =
"GRAPHEDIT-";
214 GLH_PARAMS.keywordRoot =
"GRAPHLISTS-";
215 ISO_PARAMS.keywordRoot =
"ISOMORPHISM-";
216 M2G_PARAMS.keywordRoot =
"M2G-";
238 return implementation;
270 public final String
NL = System.getProperty(
"line.separator");
286 this.logger.setLevel(Level.SEVERE);
319 this.workDir = pathname;
341 this.workDir = pathname;
367 innerParams.setLogger(
logger);
387 throws SecurityException, IOException
410 throws SecurityException, IOException
412 logger = Logger.getLogger(loggerIdentifier);
414 int n =
logger.getHandlers().length;
415 for (
int i=0; i<n; i++)
422 FileHandler fileHdlr =
new FileHandler(
logFile);
423 SimpleFormatter formatterTxt =
new SimpleFormatter();
424 fileHdlr.setFormatter(formatterTxt);
425 logger.setUseParentHandlers(
false);
426 logger.addHandler(fileHdlr);
427 logger.setLevel(Level.INFO);
428 String header =
"Started logging for " + loggerIdentifier;
429 logger.log(Level.INFO,header);
431 logger.addHandler(
new StreamHandler(System.out,
432 new SimpleFormatter()));
438 for (
int iH=0; iH<
logger.getHandlers().length; iH++)
446 innerParams.setLogger(
logger);
461 logger = Logger.getLogger(loggerIdentifier);
463 int n =
logger.getHandlers().length;
464 for (
int i=0; i<n; i++)
468 ConsoleHandler handler =
new ConsoleHandler();
469 handler.setFormatter(
new SimpleFormatter());
470 handler.setLevel(Level.INFO);
471 logger.addHandler(handler);
476 for (
int iH=0; iH<
logger.getHandlers().length; iH++)
484 innerParams.setLogger(
logger);
501 boolean result =
false;
502 String value = s.trim().toUpperCase();
503 if (value.equals(
"YES")
506 || value.equals(
"TRUE"))
509 }
else if (value.equals(
"NO")
512 || value.equals(
"FALSE"))
531 return Level.WARNING;
577 for (
int iH=0; iH<
logger.getHandlers().length; iH++)
585 innerParams.setVerbosity(l);
604 if (innerParams.rng!=
null)
606 rng = innerParams.rng;
607 return innerParams.rng;
614 innerParams.setRandomizer(
rng);
643 innerParams.setRandomizer(
rng);
659 innerParams.setRandomizer(
rng);
676 innerParams.setRandomizer(
rng);
691 BufferedReader br =
null;
694 br =
new BufferedReader(
new FileReader(infile));
695 while ((line = br.readLine()) !=
null)
700 catch (NumberFormatException | IOException nfe)
714 catch (IOException ioe)
730 if ((line.trim()).length() == 0)
733 if (line.startsWith(
"#"))
742 if (line.toUpperCase().startsWith(parType.keywordRoot))
748 otherParams.isMaster =
false;
773 }
catch (Exception e) {
810 otherParams.isMaster =
false;
851 String key = line.trim();
853 if (line.contains(
"="))
856 line.indexOf(
"=") + 1).trim();
857 value = line.substring(line.indexOf(
"=") + 1).trim();
901 otherCollector.checkParameters();
923 otherCollector.processParameters();
975 StringBuilder sb =
new StringBuilder(1024);
977 sb.append(
"-------------------------------------------"
978 +
"----------------------").append(
NL);
979 logger.log(Level.INFO,sb.toString());
992 if (pathname ==
null || pathname.isBlank())
997 String msg =
"ERROR! File '" + pathname +
"' not found!";
998 throw new Error(msg);
1013 String msg =
"ERROR! File '" + pathname +
"' not found!";
1014 throw new Error(msg);
1029 String msg =
"ERROR! Parameter '" + paramName +
"' is null! "
1030 +
"Please, add '" + paramType.keywordRoot + paramKey
1031 +
"' to the input parameters.";
1032 throw new Error(msg);
1047 String msg =
"ERROR! Parameter '" + paramName +
"' not striktly "
1048 +
"positive (" + value +
"). "
1049 +
"Please, use a positive value for '" + paramType.keywordRoot
1051 throw new Error(msg);
1067 String msg =
"ERROR! Parameter '" + paramName +
"' is negative ("
1069 +
"Please, use a positive value for '" + paramType.keywordRoot
1071 throw new Error(msg);
1085 if (max < value || min > value)
1087 String msg =
"ERROR! Parameter '" + paramName +
"' is not in range"
1088 + min +
" < x < " + max +
" (value: " + value +
"). "
1089 +
"Please, correct the value of '" + paramType.keywordRoot
1091 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.