Commit 2663cf69 authored by pfreon's avatar pfreon
Browse files

Histograms of data now available in sub-menu “Plots & graphs”

The histogram plots for variables Y, CPUE, E and V that were only shown when using the expert-system are now directly available in a sub-menu of the main menu “Plots & graphs”.
Renaming of most of the "plots" in "graphs" in the interface and in the html files.
parent 6e2998d9
......@@ -35,6 +35,7 @@ public class CadreMain extends JFrame {
JMenu menuPlots = new JMenu();
JMenuItem menuPlotTime = new JMenuItem();
JMenuItem menuPlotHistogr = new JMenuItem();
JMenuItem menuPlotBivariate = new JMenuItem();
JMenuItem menuPlotFitted = new JMenuItem();
JMenuItem menuPlotResiduals = new JMenuItem();
......@@ -199,7 +200,7 @@ public class CadreMain extends JFrame {
}
});
menuFileFolder.setText("Build a history html & plots folder");
menuFileFolder.setText("Build a history html & graphs folder");
menuFileFolder.setMnemonic(KeyEvent.VK_M);
menuFileFolder.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M,InputEvent.CTRL_DOWN_MASK));
menuFileFolder.addActionListener(new java.awt.event.ActionListener() {
......@@ -221,30 +222,13 @@ public class CadreMain extends JFrame {
}
});
}
/*menuFileFile2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
menuFileOpenLastFile_actionPerformed(e);
}
});
menuFileFile3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
menuFileOpenLastFile_actionPerformed(e);
}
});
menuFileFile4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
menuFileOpenLastFile_actionPerformed(e);
}
}); */
menuPlots.setText("Plots");
menuPlots.setText("Plots & graphs");
menuPlots.setMnemonic(KeyEvent.VK_P);
menuPlotTime.setEnabled(false);
menuPlotTime.setMnemonic(KeyEvent.VK_T);
menuPlotTime.setText("Time plots");
menuPlotTime.setText("Time graphs");
menuPlotTime.addActionListener(new java.awt.event.ActionListener() {
@Override
......@@ -252,6 +236,17 @@ public class CadreMain extends JFrame {
menuPlotTime_actionPerformed(e);
}
});
menuPlotHistogr.setEnabled(false);
menuPlotHistogr.setMnemonic(KeyEvent.VK_H);
menuPlotHistogr.setText("Histograms graphs");
menuPlotHistogr.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
menuPlotHistogr_actionPerformed(e);
}
});
menuPlotBivariate.setEnabled(false);
menuPlotBivariate.setMnemonic(KeyEvent.VK_B);
menuPlotBivariate.setText("Bivariate plots");
......@@ -262,10 +257,11 @@ public class CadreMain extends JFrame {
menuPlotBivariate_actionPerformed(e);
}
});
menuPlotFitted.setEnabled(false);
menuPlotFitted.setMnemonic(KeyEvent.VK_F);
menuPlotFitted.setActionCommand("Observed-Fitted and Residuals CPUE plots");
menuPlotFitted.setText("Observed-Fitted and Residuals CPUE plots");
menuPlotFitted.setActionCommand("Observed-fitted & residuals CPUE graphs");
menuPlotFitted.setText("Observed-fitted & residuals CPUE graphs");
menuPlotFitted.addActionListener(new java.awt.event.ActionListener() {
@Override
......@@ -275,7 +271,7 @@ public class CadreMain extends JFrame {
});
menuPlotResiduals.setEnabled(false);
menuPlotResiduals.setMnemonic(KeyEvent.VK_R);
menuPlotResiduals.setText("Resid. f(E) vs V or Resid. f(V) vs E"); // Modif 2020.
menuPlotResiduals.setText("Residual CPUE vs E & V Plots"); // Modif 2020.
menuPlotResiduals.addActionListener(new java.awt.event.ActionListener() {
@Override
......@@ -285,8 +281,8 @@ public class CadreMain extends JFrame {
});
menuPlotJacknife.setEnabled(false);
menuPlotJacknife.setMnemonic(KeyEvent.VK_J);
menuPlotJacknife.setActionCommand("Jacknife plots");
menuPlotJacknife.setText("Jackknife Plots");
menuPlotJacknife.setActionCommand("Jacknife bar graphs");
menuPlotJacknife.setText("Jackknife bar graphs");
menuPlotJacknife.addActionListener(new java.awt.event.ActionListener() {
@Override
......@@ -296,7 +292,7 @@ public class CadreMain extends JFrame {
});
menuPlotThreeVariate.setEnabled(false);
menuPlotThreeVariate.setMnemonic(KeyEvent.VK_T);
menuPlotThreeVariate.setText("CPUE=f() & Y=f() plots");
menuPlotThreeVariate.setText("CPUE=f() & Y=() tri-variate graphs");
menuPlotThreeVariate.addActionListener(new java.awt.event.ActionListener() {
@Override
......@@ -313,7 +309,7 @@ public class CadreMain extends JFrame {
menuPlotMsy_actionPerformed(e);
}
});
menuPlotMsy.setText("MSY and MSE graphs");
menuPlotMsy.setText("MSY & MSE vs V graphs");
menuModels.setEnabled(false);
menuModels.setText("Modelization");
menuModels.setMnemonic(KeyEvent.VK_M);
......@@ -371,8 +367,9 @@ public class CadreMain extends JFrame {
menuModelsResults_actionPerformed(e);
}
});
menuFileOpenFolder.setText("Open an existing html & plots folder");
menuFileOpenFolder.setText("Open an existing html & graphs folder");
menuPlots.add(menuPlotTime);
menuPlots.add(menuPlotHistogr);
menuPlots.add(menuPlotBivariate);
menuPlots.add(menuPlotFitted);
menuPlots.add(menuPlotResiduals);
......@@ -554,7 +551,7 @@ public class CadreMain extends JFrame {
void menuFileFolder_actionPerformed(ActionEvent e) {
RapportHtml dlg = new RapportHtml(this, this.makeFaits());
dlg.setTitle("Climprod: Build a html & plots folder ");
dlg.setTitle("Climprod: Build a html & graphs folder ");
dlg.setModal(true);
dlg.setVisible(true);
int d = dlg.getResult();
......@@ -607,6 +604,18 @@ public class CadreMain extends JFrame {
}
}
void menuPlotHistogr_actionPerformed(ActionEvent e) {
if (Global.CadrePlotHistogr == null) {
Cadre_Plot dlg;
dlg = new Cadre_Plot(Global.distriPlot);
dlg.setTitle("Climprod: Histograms plots");
dlg.setVisible(true);
Global.CadrePlotHistogr = dlg;
} else {
Global.CadrePlotHistogr.setVisible(true);
}
}
void menuPlotBivariate_actionPerformed(ActionEvent e) {
if (Global.CadreBiVariatePlots == null) {
......@@ -633,7 +642,7 @@ public class CadreMain extends JFrame {
boolean b6 = false;
if (Global.nom_fichier != null) {
b1 = true; // Autorise Menus Files et Modelization + Time plots + Bivariate plots
b1 = true; // Autorise Menus Files et Modelization + Time plots + Histogram plots + Bivariate plots
b3 = Global.validationOk; // Autorise Jackknife plots
b2 = Global.modelisationOk; // Autorise Observed-fitted & residual CPUE + Resid f(E) vs V et f(V) vs E + CPUE = f() & Y = f()
b6 = Global.MSY_MSE_OK; // Co-autorise graphiques MSY et MSE //
......@@ -649,6 +658,7 @@ public class CadreMain extends JFrame {
// this.menuEditionResults.setEnabled(b2);
this.menuPlots.setEnabled(b1);
this.menuPlotTime.setEnabled(b1);
this.menuPlotHistogr.setEnabled(b1);
this.menuPlotBivariate.setEnabled(b1);
this.menuPlotFitted.setEnabled(b2);
this.menuPlotResiduals.setEnabled(b2);
......
......@@ -223,6 +223,8 @@ public class Cadre_Plot extends JFrame {
super.dispose();
if (Arrays.equals(plots, Global.timePlot)) {
Global.CadreTimePlots = null;
} else if (Arrays.equals(plots, Global.distriPlot)) {
Global.CadrePlotHistogr = null;
} else if (Arrays.equals(plots, Global.scatterPlot)) {
Global.CadreBiVariatePlots = null;
} else if (Arrays.equals(plots, Global.fittedCpuePlot)) {
......
......@@ -363,8 +363,9 @@ public class Cadre_Question extends JFrame
+ "an environmental influence on: " + Global.environmental_influence
+ "\na relationship between CPUE and E: "
+ CadreMain.cpu_relation_E[Global.relationCPU_E]
+ "\nand a relationship between CPUE and V: " + CadreMain.cpu_relation_V[Global.relationCPU_V]
+ ".\nIn order to found an appropriate model, you can revise \nyour previous answers. \nIt is not recommended to modify your answers too much upward \ndue to re-initialization issues.", 1, this.parent);
+ "\nand a relationship between CPUE and V: "
+ CadreMain.cpu_relation_V[Global.relationCPU_V]
+ ".\nIn order to found an appropriate model, you can revise your \nprevious answers. \nIt is not recommended to modify your answers too much upward \ndue to re-initialization issues.", 1, this.parent);
return;
}
......
......@@ -27,6 +27,7 @@ public class Global {
static JFrame CadreModele;
static JFrame CadreResultats;
static JFrame CadreTimePlots;
static JFrame CadrePlotHistogr;
static JFrame CadreBiVariatePlots;
static JFrame CadreFittedPlots;
static JFrame CadreResidualPlots;
......@@ -188,7 +189,10 @@ public class Global {
CadreBiVariatePlots.dispose();
}
if (CadreTimePlots != null) {
CadreTimePlots.dispose();
CadreTimePlots.dispose();
}
if (CadrePlotHistogr != null) {
CadrePlotHistogr.dispose();
}
if (CadreFittedPlots != null) {
CadreFittedPlots.dispose();
......
......@@ -34,7 +34,7 @@ public class RapportHtml extends JDialog {
if (fileSep.equals("/")) {
fileSep = "//";
}
path = System.getProperty("user.home") + fileSep + ".climprod" + fileSep + "Html&PlotsFolder";
path = System.getProperty("user.home") + fileSep + ".climprod" + fileSep + "Html&GraphsFolder";
File fPath = new File(path);
File[] dd = fPath.listFiles();
......@@ -78,11 +78,11 @@ public class RapportHtml extends JDialog {
cboFile.setEditable(true);
jTextInfo.setBackground(new Color(204, 204, 204));
jTextInfo.setText("If you select an existing directory\nall HTML folder files of \nthis directory will be overwritten\nalthough this is not always\nreflected in the file date.");
jTextInfo.setFont(new java.awt.Font("Dialog", 2, 12));
jTextInfo.setFont(new java.awt.Font("Dialog", 2, 13));
this.getContentPane().add(jPan, BorderLayout.CENTER);
this.getContentPane().add(jPanCmd, BorderLayout.SOUTH);
jPanChk.setLayout(new GridLayout(12, 1));
jPanChk.setLayout(new GridLayout(13, 1));
jPan.setLayout(new GridLayout(1, 2));
jPan.add(jPanCombo);
jPan.add(jPanChk);
......@@ -91,21 +91,22 @@ public class RapportHtml extends JDialog {
jPanCombo.add(cboFile, BorderLayout.NORTH);
jPanCombo.add(jTextInfo, BorderLayout.SOUTH);
//Options accessibles
for (int i = 0; i < 4; i++) {
for (int i = 0; i < 5; i++) {
bEnable[i] = (Global.nom_fichier != null);
}
bEnable[4] = bEnable[0] && Global.modelisationOk;
bEnable[5] = bEnable[4];
bEnable[7] = bEnable[4];
bEnable[6] = bEnable[0] && Global.validationOk; // Jackknife plot
bEnable[8] = Global.validationOk && (((Global.numero_modele > 5) || (Global.numero_modele < 2)) && (Global.numero_modele != 20) && (Global.numero_modele != 33));
bEnable[9] = bEnable[4];
bEnable[10] = bEnable[6];
// bEnable[11] = to enable questions and answers
bEnable[11] = bEnable[0]; // Modif 2020.
bEnable[5] = bEnable[0] && Global.modelisationOk;
bEnable[6] = bEnable[5];
bEnable[8] = bEnable[5];
bEnable[7] = bEnable[0] && Global.validationOk; // Jackknife plot
bEnable[9] = Global.validationOk && (((Global.numero_modele > 5) || (Global.numero_modele < 2)) && (Global.numero_modele != 20) && (Global.numero_modele != 33));
bEnable[10] = bEnable[5];
bEnable[11] = bEnable[7];
// bEnable[12] = to enable questions and answers
bEnable[12] = bEnable[0] && (Global.changement_exploitation != -1); // Modif 2020.
// to create index.html
bEnable[12] = bEnable[0];
bEnable[13] = bEnable[0];
for (int i = 0; i < chkInclude.length; i++) {
//System.out.println("chkInclude.length = " + chkInclude.length);
chkInclude[i] = new JCheckBox(caption[i], bEnable[i]);
chkInclude[i].setEnabled(bEnable[i]);
jPanChk.add(chkInclude[i], i);
......@@ -173,12 +174,12 @@ public class RapportHtml extends JDialog {
@SuppressWarnings("unchecked")
void cmdOk_actionPerformed(ActionEvent e) {
String[] fileName = {"MainResult.html", "DataAndStatisticalTable.html", "TimePlot.html",
String[] fileName = {"MainResult.html", "DataAndStatisticalTable.html", "TimePlot.html", "HistogrPlot.html",
"BivariatePlot.html", "FittedPlot.html", "ResidualPlot.html", "JackknifePlot.html", "VariatePlot.html",
"MS_Plot.html", "Model.html", "Validation.html","QuestionsAnswers.html", "index.html"};
String[] caption = {"Main Result", "Data", "Time Plot",
"Bivariate Plot", "Fitted Plot", "Residual Plot", "Jackknife Plot", "Multi-variate Plot",
"MS_Plot", "Modelisation", "Validation", "Questions, answers & warnings"};
String[] caption = {"Main Results", "Data", "Time graphs", "Histogram graphs",
"Bivariate plots", "Observed-fitted & residual CPUE graphs", "Residual CPUE vs E & V plots", "Jackknife bar graphs", "CPUE=f() & Y=() tri-variate graphs",
"MSY & MSE vs V graphs", "Modelisation", "Validation", "Questions, answers & warnings"};
String folderName = "";
Hashtable listFile = new Hashtable();
for (int i = 0; i < fileName.length; i++) {
......@@ -205,11 +206,11 @@ public class RapportHtml extends JDialog {
Vector vAncre = new Vector();
Vector vCaption = new Vector();
String[] htmlFile = new String[13];
String[] htmlText = new String[13];
String[] htmlFile = new String[14];
String[] htmlText = new String[14];
String htmlMenu;
String htlmEntete;
//System.out.println("RapportHtml ligne 214 c = " + c);
for (int i = 0; i < c; i++) {
htmlText[i] = null;
bEnable[i] = chkInclude[i].isEnabled() && chkInclude[i].isSelected();
......@@ -265,7 +266,6 @@ public class RapportHtml extends JDialog {
htmlText[0] = htmlText[0] + "<H4>" + caption[0] + "</H4>\n";
htmlText[0] = htmlText[0] + "<PRE>" + facts + "</PRE>";
htmlText[0] = htmlText[0] + "</BODY>\n</HTML>";
}
if (bEnable[1]) {
htmlText[1] = htlmEntete.replace("HREF =\""+htmlFile[1]+"\"","HREF =\""+htmlFile[1]+"\" style=\"font-weight:bold;font-size:16px;color:red;\"") + "\n\n ";
......@@ -280,63 +280,69 @@ public class RapportHtml extends JDialog {
}
if (bEnable[3]) {
htmlText[3] = htlmEntete.replace("HREF =\""+htmlFile[3]+"\"","HREF =\""+htmlFile[3]+"\" style=\"font-weight:bold;font-size:16px;color:red;\"") + "\n\n <CENTER>\n";
htmlText[3] = htmlText[3] + this.makePlot(Global.scatterPlot, true, folderPath);
htmlText[3] = htmlText[3] + "\n </CENTER>\n</BODY>\n</HTML>";
}
htmlText[3] = htmlText[3] + this.makePlot(Global.distriPlot, true, folderPath);
htmlText[3] = htmlText[3] + "\n</CENTER>\n</BODY>\n</HTML>";
}
if (bEnable[4]) {
htmlText[4] = htlmEntete.replace("HREF =\""+htmlFile[4]+"\"","HREF =\""+htmlFile[4]+"\" style=\"font-weight:bold;font-size:16px;color:red;\"") + "\n\n <CENTER>\n";
htmlText[4] = htmlText[4] + this.makePlot(Global.fittedCpuePlot, true, folderPath);
htmlText[4] = htmlText[4] + "\n </CENTER>\n</BODY>\n</HTML>";
htmlText[4] = htmlText[4] + this.makePlot(Global.scatterPlot, true, folderPath);
htmlText[4] = htmlText[4] + "\n </CENTER>\n</BODY>\n</HTML>";
}
if (bEnable[5]) {
htmlText[5] = htlmEntete.replace("HREF =\""+htmlFile[5]+"\"","HREF =\""+htmlFile[5]+"\" style=\"font-weight:bold;font-size:16px;color:red;\"") + "\n\n <CENTER>\n";
htmlText[5] = htmlText[5] + this.makePlot(Global.residualsPlot, true, folderPath);
htmlText[5] = htmlText[5] + "\n </CENTER>\n</BODY>\n</HTML>";
htmlText[5] = htmlText[5] + this.makePlot(Global.fittedCpuePlot, true, folderPath);
htmlText[5] = htmlText[5] + "\n </CENTER>\n</BODY>\n</HTML>";
}
if (bEnable[6]) {
htmlText[6] = htlmEntete.replace("HREF =\""+htmlFile[6]+"\"","HREF =\""+htmlFile[6]+"\" style=\"font-weight:bold;font-size:16px;color:red;\"") + "\n\n <CENTER>\n";
htmlText[6] = htmlText[6] + this.makePlot(Global.jackknifePlot, true, folderPath);
htmlText[6] = htmlText[6] + this.makePlot(Global.residualsPlot, true, folderPath);
htmlText[6] = htmlText[6] + "\n </CENTER>\n</BODY>\n</HTML>";
}
if (bEnable[7]) {
htmlText[7] = htlmEntete.replace("HREF =\""+htmlFile[7]+"\"","HREF =\""+htmlFile[7]+"\" style=\"font-weight:bold;font-size:16px;color:red;\"") + "\n\n <CENTER>\n";
htmlText[7] = htmlText[7] + this.makePlot(Global.variatePlot, true, folderPath);
htmlText[7] = htmlText[7] + this.makePlot(Global.jackknifePlot, true, folderPath);
htmlText[7] = htmlText[7] + "\n </CENTER>\n</BODY>\n</HTML>";
}
if (bEnable[8]) {
htmlText[8] = htlmEntete.replace("HREF =\""+htmlFile[8]+"\"","HREF =\""+htmlFile[8]+"\" style=\"font-weight:bold;font-size:16px;color:red;\"") + "\n\n <CENTER>\n";
htmlText[8] = htmlText[8] + this.makePlot(Global.msyPlot, true, folderPath);
htmlText[8] = htmlText[8] + this.makePlot(Global.variatePlot, true, folderPath);
htmlText[8] = htmlText[8] + "\n </CENTER>\n</BODY>\n</HTML>";
}
if (bEnable[9]) {
htmlText[9] = htlmEntete.replace("HREF =\""+htmlFile[9]+"\"","HREF =\""+htmlFile[9]+"\" style=\"font-weight:bold;font-size:16px;color:red;\"") + "\n\n ";
htmlText[9] = htmlText[9] + "<H4> Modelisation:Detailled Results </H4>\n <CENTER>\n";
htmlText[9] = htmlText[9] + makeModeleTable();
htmlText[9] = htlmEntete.replace("HREF =\""+htmlFile[9]+"\"","HREF =\""+htmlFile[9]+"\" style=\"font-weight:bold;font-size:16px;color:red;\"") + "\n\n <CENTER>\n";
htmlText[9] = htmlText[9] + this.makePlot(Global.msyPlot, true, folderPath);
htmlText[9] = htmlText[9] + "\n </CENTER>\n</BODY>\n</HTML>";
}
if (bEnable[10]) {
htmlText[10] = htlmEntete.replace("HREF =\""+htmlFile[10]+"\"","HREF =\""+htmlFile[10]+"\" style=\"font-weight:bold;font-size:16px;color:red;\"") + "\n\n ";
htmlText[10] = htmlText[10] + "<H4> Validation:Detailled Results </H4>\n <CENTER>\n";
htmlText[10] = htmlText[10] + makeValidationTable();
htmlText[10] = htmlText[10] + "<H4> Modelisation:Detailled Results </H4>\n <CENTER>\n";
htmlText[10] = htmlText[10] + makeModeleTable();
htmlText[10] = htmlText[10] + "\n </CENTER>\n</BODY>\n</HTML>";
}
if (bEnable[11]) {
if (bEnable[11]) {
htmlText[11] = htlmEntete.replace("HREF =\""+htmlFile[11]+"\"","HREF =\""+htmlFile[11]+"\" style=\"font-weight:bold;font-size:16px;color:red;\"") + "\n\n ";
htmlText[11] = htmlText[11] + "<H4> Questions, answers &amp; warning</H4>\n <CENTER>\n";
htmlText[11] = htmlText[11] + makeQuestionsAnswers();
//System.out.println("Flag if (bEnable[11])dans RapportHtml.java ligne 328, makeQuestionsAnswers()= " + makeQuestionsAnswers()); // Modif. 2020.
htmlText[11] = htmlText[11] + "<H4> Validation:Detailled Results </H4>\n <CENTER>\n";
htmlText[11] = htmlText[11] + makeValidationTable();
htmlText[11] = htmlText[11] + "\n </CENTER>\n</BODY>\n</HTML>";
}
if (bEnable[12]) {
if (bEnable[12]) {
htmlText[12] = htlmEntete.replace("HREF =\""+htmlFile[12]+"\"","HREF =\""+htmlFile[12]+"\" style=\"font-weight:bold;font-size:16px;color:red;\"") + "\n\n ";
htmlText[12] = htmlText[12] + "<H4> Questions, answers &amp; warning</H4>\n <CENTER>\n";
htmlText[12] = htmlText[12] + makeQuestionsAnswers();
//System.out.println("Flag if (bEnable[11])dans RapportHtml.java ligne 328, makeQuestionsAnswers()= " + makeQuestionsAnswers()); // Modif. 2020.
htmlText[12] = htmlText[12] + "\n </CENTER>\n</BODY>\n</HTML>";
}
if (bEnable[13]) {
String quest[] = QuestionReponse.getListScript();
htmlText[12] = htlmEntete.replace("HREF =\""+htmlFile[12]+"\"","HREF =\""+htmlFile[12]+"\" style=\"font-weight:bold;font-size:16px;color:red;\"") + "\n ";
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
htmlText[13] = htlmEntete.replace("HREF =\""+htmlFile[13]+"\"","HREF =\""+htmlFile[13]+"\" style=\"font-weight:bold;font-size:16px;color:red;\"") + "\n ";
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date date = new Date();
htmlText[12] = htmlText[12] + "Generated at "+dateFormat.format(date);
htmlText[12] = htmlText[12] + "\n </BODY>\n</HTML>\n ";
htmlText[13] = htmlText[13] + "Generated at "+dateFormat.format(date); // Date et heure affichées à l'ouverture du fichier html d'acceuil.
htmlText[13] = htmlText[13] + "\n </BODY>\n</HTML>\n ";
}
c = htmlText.length;
//System.out.println("RapportHtml ligne 346 c = " + c);
for (int i = 0; i < c; i++) {
if (bEnable[i]) {
try {
......@@ -791,14 +797,14 @@ public class RapportHtml extends JDialog {
private String facts;
private String htmlText = "";
private String[] folderList;
private boolean[] bEnable = new boolean[13];
private boolean[] bEnable = new boolean[14];
private int choice;
final int Ok_Option = 1;
final int Cancel_Option = 2;
JCheckBox[] chkInclude = new JCheckBox[12];
JCheckBox[] chkInclude = new JCheckBox[13];
String[] caption = {"Current known facts", "Data & statistical tables",
"Time plots", "Bivariate plots", "Observed-Fitted & Residual CPUE plots",
"Time plots", "Histogram plots", "Bivariate plots", "Observed-Fitted & Residual CPUE plots",
"Res f(E) vs V or Res f(V) vs E", "Jackknife plots", "CPUE=f() & Y=f() plots",
"MSY & MSE plots", "Modelization: Detailed results",
"Validation: Detailed results", "Questions, answers & warnings"};
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment