|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectlogging.DiplomaGraphsAndLogsCreator
public class DiplomaGraphsAndLogsCreator
This class basically mirrors AgentLogProcessor class. We used this class to create graph output for diploma thesis (we need smaller graphs to fit in the document).
| Field Summary | |
|---|---|
(package private) java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.lang.Integer>>> |
agentActionCounts
|
(package private) java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.lang.Integer>>> |
agentDoubleActions
|
(package private) java.util.HashMap<java.lang.Integer,java.lang.String> |
agentNamesMap
|
(package private) java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.lang.Integer>>>> |
agentSubscenesActionCounts
|
(package private) java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.lang.Integer>>>> |
agentSubscenesDoubleActions
Here we store two succesive actions (double actions) of one character to another character. |
(package private) java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.lang.Double>> |
agLogFeelingResults
Here we store last feeling values for agLog file for all the agents. |
(package private) java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.ArrayList<java.util.ArrayList<FeelingLog>>>> |
agLogFeelings
Here we store feeling information from all of the experiments. |
(package private) static boolean |
bAllowFrames
|
cz.cuni.amis.pogamut.base3d.worldview.objects.Location |
boyHomeLocation
Boy home location |
cz.cuni.amis.pogamut.base3d.worldview.objects.Location |
cinemaLocation
Cinema location |
(package private) java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.ArrayList<java.lang.Double>>>> |
eventsFeelingDifferences
|
cz.cuni.amis.pogamut.base3d.worldview.objects.Location |
firstGirlHomeLocation
First girl home location - for Anne. |
cz.cuni.amis.pogamut.base3d.worldview.objects.Location |
meetingCinemaLocation
This should point in front of the cinema |
java.lang.Object |
obj
|
cz.cuni.amis.pogamut.base3d.worldview.objects.Location |
parkLocation
Park location |
cz.cuni.amis.pogamut.base3d.worldview.objects.Location |
secondGirlHomeLocation
First girl home location - for Clementine. |
(package private) java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.ArrayList<java.lang.Double>>>> |
subsceneFeelingDifferences
Used in analyzeScenario method. |
(package private) java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.ArrayList<java.lang.Double>>>> |
subsceneFeelingEndValue
Filled in analyse scenario. |
(package private) java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.ArrayList<java.lang.Double>>>> |
subsceneFeelingRanges
Used in analyzeScenario method. |
(package private) java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.ArrayList<java.lang.Double>>>> |
subsceneFeelingsFileLog
same as above, except the first key is actual fileLog name |
(package private) java.util.HashMap<java.lang.String,java.lang.Integer> |
subsceneIdIntMap
This is for mapping subscene Ids to int so we can manipulate with it better |
int |
subsceneIntId
|
(package private) java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.lang.Double>> |
subscenesDurations
Here we store the durations of subscens for each log file (first hash map key). |
(package private) java.util.HashMap<java.lang.String,java.util.ArrayList<java.lang.Integer>> |
subsceneStrings
Here we store all subscene strings for all agLog files. identifier is the name of agLog file, the value is subscene string |
(package private) java.util.HashMap<java.lang.String,java.util.ArrayList<java.lang.String>> |
suspiciousDoubleActions
Idexed by pre-defined suspicious double actions ID, the list contains the filenames of agentLog files that contains these suspicous doubleactions... |
(package private) java.util.HashMap<java.lang.String,java.lang.Boolean> |
suspiciousDoubleSubscenes
Indexed by suspicious double subscenes. |
(package private) java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.lang.Double>> |
suspiciousFeelingDifference
This is indexed by agentLog filename, then there is a list of either subscens id with suspicious value and/or event id with suspicious value. |
| Constructor Summary | |
|---|---|
DiplomaGraphsAndLogsCreator()
|
|
| Method Summary | |
|---|---|
void |
analyzeFeeling(AgentLogging agLog,
java.lang.String directory)
Makes feeling txt log file for input AgentLogging object. |
void |
analyzeScenario(AgentLogging agLog,
java.lang.String directory)
Analyze scenario regarding feelings, double actions strings, subscenes string (through getSubcenes method). |
private java.util.Collection<FeelingSceneResult> |
analyzeSubsceneFeelings(AgentLogging agLog,
double lowerBound,
double upperBound)
Analyze one subscene feelings - how they were developing. |
private org.jfree.chart.plot.CategoryPlot |
createBoxAndWhiskerCategoryPlot(java.lang.String xAxisName,
java.lang.String yAxisName,
org.jfree.data.statistics.BoxAndWhiskerCategoryDataset dataset,
double leftOffset)
|
private static org.jfree.chart.JFreeChart |
createCategoryChart(java.lang.String chartTitle,
java.lang.String xAxisName,
java.lang.String yAxisName,
org.jfree.data.category.CategoryDataset dataset,
double lowerRange,
double upperRange)
Creates category chart. |
private org.jfree.chart.plot.CategoryPlot |
createCategoryPlot(java.lang.String plotName,
java.lang.String rangeAxisName,
java.lang.String domainAxisName,
double lowerRange,
double upperRange,
org.jfree.data.category.CategoryDataset dataset,
double leftOffset)
Creates one XYPlot. |
private org.jfree.chart.JFreeChart |
createCombinedCategoryChart(java.lang.String chartTitle,
java.lang.String firstXAxisName,
org.jfree.data.category.CategoryDataset firstDataset,
double lowerRange,
double upperRange,
java.lang.String secondXAxisName,
org.jfree.data.category.CategoryDataset secondDataset,
java.lang.String domainAxisName,
double leftOffset)
Creates combined category chart - two graphs in one. |
private static org.jfree.chart.JFreeChart |
createLineChart(java.lang.String chartTitle,
java.lang.String xAxisName,
java.lang.String yAxisName,
org.jfree.data.xy.XYDataset dataset,
boolean bAutoRange,
double lowerRange,
double upperRange)
Creates line chart. |
private org.jfree.chart.plot.XYPlot |
createXYPlot(java.lang.String plotName,
java.lang.String rangeAxisName,
java.lang.String domainAxisName,
double lowerRange,
double upperRange,
org.jfree.data.xy.XYDataset dataset)
Creates one XYPlot. |
private java.util.List |
generateOneByOneList(org.jfree.data.Range range)
Generate list of values for scatter plot. |
private java.lang.String |
getPosition(LocationLog locLog)
Returns where we are. |
private java.lang.String |
getSceneId(java.lang.Integer i)
Gets the sceneName from integer, uses subsceneIdIntMap. |
private java.lang.String |
getSubscene(AgentStateLog stateLog)
Returns name of the subscene the agentState corresponds to. |
private java.util.HashMap<java.lang.String,java.util.ArrayList<ActionLog>> |
getSubsceneActions(org.jfree.data.Range range,
AgentLogging agLog)
Gets list of actions during one supported agent subscene. |
private java.util.HashMap<java.lang.String,org.jfree.data.Range> |
getSubscenes(AgentLogging agLog,
double minimalLength)
Returns hashmap containing information about starts and stops of subscenes in the scenario. |
private void |
checkSuspiciousDoubleAction(java.lang.String doubleActionId,
java.lang.String fileName)
This method check if id of the double action is suspicious one and if yes, it will be logged in the object, so we know which log contained the susp. double action. |
private boolean |
checkSuspiciousDoubleSubscene(java.lang.String previousSceneId,
java.lang.String sceneId)
Returns true if double subscene is considered suspicious. |
private boolean |
checkSuspiciousFeelingResults(java.lang.String sceneName,
FeelingSceneResult feelResult)
If the feeling result or subscene is consideres suspicious true will be returned. |
private boolean |
isAlowed(java.lang.String sceneId)
|
private boolean |
listsEquals(java.util.ArrayList<java.lang.Integer> subsceneSerie,
java.util.ArrayList<java.lang.Integer> setId)
|
static void |
main(java.lang.String[] args)
|
void |
makeAgentActionsLog(AgentLogging agLog,
java.lang.String directory)
Logs all agent actions toward someone to the file. |
void |
makeAgentActionsProposalsSubscenesPlot(AgentLogging agLog,
java.lang.String directory)
Creates plot containing actions and proposals agent made to someone also with subscenes. |
void |
makeAgentDoubleActionLogs(java.lang.String directory)
Makes double action txt log file for all the experiments. |
private void |
makeAgentEventsFeelingDifferencePlot(java.lang.String directory,
java.lang.String agentName)
makeAgentEventsFeelingDifferencePlot. |
void |
makeAgentProposalsLog(AgentLogging agLog,
java.lang.String directory)
Logs all proposals to the file. |
void |
makeAgentStatePlot(AgentLogging agLog,
java.lang.String directory)
Makes state transition plot, agent positions plot, agentWith plot and agent interrupters plot all-in-one. |
private void |
makeAgentSubscenesFeelingDifferencesAnalysis(java.lang.String directory,
java.lang.String agentName)
Some statistical subscene analysis. |
private void |
makeAgentSubscenesFeelingEndValueAnalysis(java.lang.String directory,
java.lang.String agentName)
Some statistical subscene analysis. |
private void |
makeAgentSubscenesFeelingRangesAnalysis(java.lang.String directory,
java.lang.String agentName)
Some statistical subscene analysis. |
void |
makeBasicEmotionsPlot(AgentLogging agLog,
java.lang.String directory)
Makes basic emotions plot for input AgentLogging object. |
void |
makeCombinedFeelingPlot(java.util.HashMap<java.lang.String,java.util.ArrayList<java.util.ArrayList<FeelingLog>>> inputFeelings,
java.lang.String outputFile)
Makes combined feeling plot showing the feeling value development for all agents in one scenario. |
void |
makeComplexEmotionsPlot(AgentLogging agLog,
java.lang.String directory)
Makes complex emotions plot for input AgentLogging object. |
void |
makeEmotionEventsLog(AgentLogging agLog,
java.lang.String directory)
Makes emotion events txt log file from input AgentLogging object. |
void |
makeEmotionEventsPlot(AgentLogging agLog,
java.lang.String directory)
Makes emotion events plot for input AgentLogging object. |
private void |
makeEndFeelingsAnalyzeLog(java.util.HashMap<java.lang.String,java.util.ArrayList<java.util.ArrayList<FeelingLog>>> inputFeelings,
java.lang.String fileName)
Process feelings at the end of the scenario. |
void |
makeFeelingMoodPlot(AgentLogging agLog,
java.lang.String directory)
Makes feeling plot for input AgentLogging object. |
void |
makePositionPlot(AgentLogging agLog,
java.lang.String directory)
Makes basic traversed positions plot. |
private void |
makeSubscenesDurationBoxPlot(java.lang.String directory)
Creates boxplot with subscenes durations. |
void |
makeSubsceneSeriesAnalyzeLogs(java.lang.String directory)
Makes subscene string analyze and double subscenes analyze. |
private void |
processDoubleActions(AgentLogging agLog)
Makes double actions analysis for whole scenario. |
private void |
processFeelings(AgentLogging agLog)
Searching conflicts. |
void |
processLogFile(java.lang.String fileName)
Loads AgentLogging object from file and calls all desired file/graph exporting methods. |
private void |
processSubscenesDoubleActions(java.util.HashMap<java.lang.String,org.jfree.data.Range> subscenes,
AgentLogging agLog)
Will store double actions in subscenes into agentSubscenesDoubleActions variable for supported input. |
static java.lang.String |
saveChartToFile(org.jfree.chart.JFreeChart chart,
java.lang.String fileName,
int width,
int height)
Save chart to file in PNG format. |
private void |
setSuspiciousDoubleActionsAndSubscenes()
Sets suspicious double actions and store it into suspiciousDoubleActions HashMap. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
public cz.cuni.amis.pogamut.base3d.worldview.objects.Location cinemaLocation
public cz.cuni.amis.pogamut.base3d.worldview.objects.Location meetingCinemaLocation
public cz.cuni.amis.pogamut.base3d.worldview.objects.Location boyHomeLocation
public cz.cuni.amis.pogamut.base3d.worldview.objects.Location firstGirlHomeLocation
public cz.cuni.amis.pogamut.base3d.worldview.objects.Location secondGirlHomeLocation
public cz.cuni.amis.pogamut.base3d.worldview.objects.Location parkLocation
public java.lang.Object obj
static final boolean bAllowFrames
java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.ArrayList<java.lang.Double>>>> subsceneFeelingDifferences
java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.ArrayList<java.lang.Double>>>> subsceneFeelingEndValue
java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.ArrayList<java.lang.Double>>>> subsceneFeelingsFileLog
java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.ArrayList<java.lang.Double>>>> subsceneFeelingRanges
java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.ArrayList<java.lang.Double>>>> eventsFeelingDifferences
java.util.HashMap<java.lang.Integer,java.lang.String> agentNamesMap
java.util.HashMap<java.lang.String,java.lang.Integer> subsceneIdIntMap
java.util.HashMap<java.lang.String,java.util.ArrayList<java.lang.Integer>> subsceneStrings
public int subsceneIntId
java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.lang.Integer>>>> agentSubscenesDoubleActions
java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.lang.Integer>>> agentDoubleActions
java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.lang.Integer>>>> agentSubscenesActionCounts
java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.lang.Integer>>> agentActionCounts
java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.lang.Double>> subscenesDurations
java.util.HashMap<java.lang.String,java.util.ArrayList<java.lang.String>> suspiciousDoubleActions
java.util.HashMap<java.lang.String,java.lang.Boolean> suspiciousDoubleSubscenes
java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.lang.Double>> suspiciousFeelingDifference
java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.lang.Double>> agLogFeelingResults
java.util.HashMap<java.lang.String,java.util.HashMap<java.lang.String,java.util.ArrayList<java.util.ArrayList<FeelingLog>>>> agLogFeelings
| Constructor Detail |
|---|
public DiplomaGraphsAndLogsCreator()
| Method Detail |
|---|
private static org.jfree.chart.JFreeChart createCategoryChart(java.lang.String chartTitle,
java.lang.String xAxisName,
java.lang.String yAxisName,
org.jfree.data.category.CategoryDataset dataset,
double lowerRange,
double upperRange)
chartTitle - chart titlexAxisName - x axis nameyAxisName - y axis namedataset - dataset
public void analyzeScenario(AgentLogging agLog,
java.lang.String directory)
throws java.io.IOException
agLog - directory -
java.io.IOException
private static org.jfree.chart.JFreeChart createLineChart(java.lang.String chartTitle,
java.lang.String xAxisName,
java.lang.String yAxisName,
org.jfree.data.xy.XYDataset dataset,
boolean bAutoRange,
double lowerRange,
double upperRange)
chartTitle - xAxisName - yAxisName - dataset - bAutoRange - lowerRange - upperRange -
private java.util.Collection<FeelingSceneResult> analyzeSubsceneFeelings(AgentLogging agLog,
double lowerBound,
double upperBound)
agLog - lowerBound - upperBound -
private void checkSuspiciousDoubleAction(java.lang.String doubleActionId,
java.lang.String fileName)
doubleActionId - id of the double actionfileName - log that contained it
private boolean checkSuspiciousDoubleSubscene(java.lang.String previousSceneId,
java.lang.String sceneId)
previousSceneId - sceneId -
private boolean checkSuspiciousFeelingResults(java.lang.String sceneName,
FeelingSceneResult feelResult)
sceneName - feelResult -
private org.jfree.chart.plot.CategoryPlot createBoxAndWhiskerCategoryPlot(java.lang.String xAxisName,
java.lang.String yAxisName,
org.jfree.data.statistics.BoxAndWhiskerCategoryDataset dataset,
double leftOffset)
private org.jfree.chart.JFreeChart createCombinedCategoryChart(java.lang.String chartTitle,
java.lang.String firstXAxisName,
org.jfree.data.category.CategoryDataset firstDataset,
double lowerRange,
double upperRange,
java.lang.String secondXAxisName,
org.jfree.data.category.CategoryDataset secondDataset,
java.lang.String domainAxisName,
double leftOffset)
chartTitle - firstXAxisName - firstDataset - lowerRange - upperRange - secondXAxisName - secondDataset - domainAxisName - leftOffset -
private org.jfree.chart.plot.CategoryPlot createCategoryPlot(java.lang.String plotName,
java.lang.String rangeAxisName,
java.lang.String domainAxisName,
double lowerRange,
double upperRange,
org.jfree.data.category.CategoryDataset dataset,
double leftOffset)
rangeAxisName - domainAxisName - lowerRange - upperRange - dataset -
private org.jfree.chart.plot.XYPlot createXYPlot(java.lang.String plotName,
java.lang.String rangeAxisName,
java.lang.String domainAxisName,
double lowerRange,
double upperRange,
org.jfree.data.xy.XYDataset dataset)
rangeAxisName - domainAxisName - lowerRange - upperRange - dataset -
public void makeEmotionEventsLog(AgentLogging agLog,
java.lang.String directory)
throws java.io.IOException
agLog - input agent logging objectdirectory - output directory
java.io.IOException
public void makeEmotionEventsPlot(AgentLogging agLog,
java.lang.String directory)
throws java.io.IOException
agLog - input agent logging objectdirectory - output directory
java.io.IOException
public void makeAgentActionsLog(AgentLogging agLog,
java.lang.String directory)
throws java.io.IOException
agLog - directory -
java.io.IOException
public void makeAgentProposalsLog(AgentLogging agLog,
java.lang.String directory)
throws java.io.IOException
agLog - directory -
java.io.IOException
public void makeAgentActionsProposalsSubscenesPlot(AgentLogging agLog,
java.lang.String directory)
throws java.io.IOException
agLog - directory -
java.io.IOException
public void makeSubsceneSeriesAnalyzeLogs(java.lang.String directory)
throws java.io.IOException
directory -
java.io.IOException
public void makeBasicEmotionsPlot(AgentLogging agLog,
java.lang.String directory)
throws java.io.IOException
agLog - input AgentLogging objectdirectory - output directory
java.io.IOException
public void makeComplexEmotionsPlot(AgentLogging agLog,
java.lang.String directory)
throws java.io.IOException
agLog - input AgentLogging objectdirectory - output directory
java.io.IOException
public void makeAgentDoubleActionLogs(java.lang.String directory)
throws java.io.IOException
directory - output directory
java.io.IOException
public void analyzeFeeling(AgentLogging agLog,
java.lang.String directory)
throws java.io.IOException
agLog - input AgentLogging objectdirectory - output directory
java.io.IOException
public void makeFeelingMoodPlot(AgentLogging agLog,
java.lang.String directory)
throws java.io.IOException
agLog - input AgentLogging objectdirectory - output directory
java.io.IOException
public void makeCombinedFeelingPlot(java.util.HashMap<java.lang.String,java.util.ArrayList<java.util.ArrayList<FeelingLog>>> inputFeelings,
java.lang.String outputFile)
throws java.io.IOException
inputFeelings - outputFile -
java.io.IOException
public void makePositionPlot(AgentLogging agLog,
java.lang.String directory)
throws java.io.IOException
agLog - directory -
java.io.IOExceptionprivate java.util.List generateOneByOneList(org.jfree.data.Range range)
range -
private java.lang.String getPosition(LocationLog locLog)
loc -
public void makeAgentStatePlot(AgentLogging agLog,
java.lang.String directory)
throws java.io.IOException
agLog - directory -
java.io.IOExceptionpublic void processLogFile(java.lang.String fileName)
fileName -
public static final java.lang.String saveChartToFile(org.jfree.chart.JFreeChart chart,
java.lang.String fileName,
int width,
int height)
throws java.io.IOException
chart - JFreeChart.fileName - Name of PNG file.width - Width of PNG image.height - Height of PNG image.
java.io.IOException - on error.public static void main(java.lang.String[] args)
private java.lang.String getSceneId(java.lang.Integer i)
i - input scene
private java.lang.String getSubscene(AgentStateLog stateLog)
stateLog -
private java.util.HashMap<java.lang.String,java.util.ArrayList<ActionLog>> getSubsceneActions(org.jfree.data.Range range,
AgentLogging agLog)
get - agLog -
private java.util.HashMap<java.lang.String,org.jfree.data.Range> getSubscenes(AgentLogging agLog,
double minimalLength)
agLog -
private boolean isAlowed(java.lang.String sceneId)
private boolean listsEquals(java.util.ArrayList<java.lang.Integer> subsceneSerie,
java.util.ArrayList<java.lang.Integer> setId)
private void makeAgentSubscenesFeelingDifferencesAnalysis(java.lang.String directory,
java.lang.String agentName)
throws java.io.IOException
java.io.IOException
private void makeAgentSubscenesFeelingEndValueAnalysis(java.lang.String directory,
java.lang.String agentName)
throws java.io.IOException
java.io.IOException
private void makeAgentSubscenesFeelingRangesAnalysis(java.lang.String directory,
java.lang.String agentName)
throws java.io.IOException
java.io.IOException
private void makeAgentEventsFeelingDifferencePlot(java.lang.String directory,
java.lang.String agentName)
throws java.io.IOException
java.io.IOException
private void makeEndFeelingsAnalyzeLog(java.util.HashMap<java.lang.String,java.util.ArrayList<java.util.ArrayList<FeelingLog>>> inputFeelings,
java.lang.String fileName)
throws java.io.IOException
inputFeelings - fileName -
java.io.IOException
private void makeSubscenesDurationBoxPlot(java.lang.String directory)
throws java.io.IOException
agLog - directory -
java.io.IOExceptionprivate void processDoubleActions(AgentLogging agLog)
agLog - private void processFeelings(AgentLogging agLog)
agLog -
private void processSubscenesDoubleActions(java.util.HashMap<java.lang.String,org.jfree.data.Range> subscenes,
AgentLogging agLog)
subscenes - agLog - private void setSuspiciousDoubleActionsAndSubscenes()
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||