Frequently Asked Questions (FAQ)

What does the numbers or means ?

The numbers follow this pattern :

  • the first number gives ISIS major version. If you got, you are in version 3. If you got you are in version 4.
  • the second gives the database version in this major version. If you got, you are in version 1 of the database. If you got you are in version 0.
  • the third number gives you the scripts version to use (isis-fish-4/isis-database)
  • the last number represents the minor version. In, the minor version is 1.

When you already got ISIS-Fish, you can use any other version with the same major, base and scripts numbers. It means that only the minor number changes.

If you want to use an ISIS-Fish version with an upper base number, ISIS-Fish will automagically convert your database into this version. You will not be able to use an ISIS-Fish version with a lower base number.

It is possible to use ISIS-Fish in two different major versions because they do not share the same configuration files. So they are two completely different installations.

You can launch version 3 and version 4 at the same time.

What are my limits when I write scripts ?

You have to never modify an object returned by a script method because a caching system is used. If you do so, you modify the cache object, and on the next call, you will get the modified object and not the one you want. For example, if you return a List, you have to, in the method that gets the list, do a copy of that List before modifying it. If you just read the List content, you have nothing to do.

Scripts : objects and syntax

Know ISIS objects and methods

Update scripts

This can be done via synchronisation with the server : File/Server synchronization. This action compares the scripts on the PC with those on the server and indicates the differences. You have then to check the scripts you want to update and validate.

Warning : If an error is indicated in a script, the synchronisation will modify the said script. If modifications happen betwen the local version and the server versions, the lines in error will be marked with '<<<<'. You will have the local version and the server version. You have to choose the version to keep and delete or comment the other one so that the script can work.

All the scripts are available here :

Local scripts

If you have local scripts, they are not synchronized.

Inherited scripts

If a local script have been written from a script on the server, it is necessary to keep track of the script of origin. So in cas the script of origin is modified on the server, the user can find the local inherited scripts and modify them back.

Add a contextual help on rules and analysis plans

In the rules or plan script (script editor),

  • at the imports levels, add : import fr.ifremer.isisfish.util.Doc
  • on top of the parameter to document (for example public Zone param_zone = null;), add @Doc("the parameter Zone correspond to ???")

Insert comments in a script

System.out.println ();

How to use APIs ?

cf tutorial .

How to create simulation plan scripts

cf tutorial

What is the structure of an analysis plan or management rules script ?

cf simulation procedure at the bottom of this page and this one

A parameter of my rule behaves strangely, what is happening ?

The rules parameters variables (thos which start by param_) are initialized at the beginning of each simulation and not each time step. So you have not to modify them but use intermediate variables.

User interfaces

Verifying fishery parameters

  • For all the fishery. In the region interface : bottom button to check.
    • blue : ok
    • orange : parameters with a problem
  • For an equation. In the equation editor : check button - syntax verification
  • For a script (rule, AnalysisPlan,...). In the script editor : check button - syntax verification. You can check the differences between your version and the server version using the server menu from the script editor interface.

What "tag" is for in the launcing interface, in the advanced parameters

Parameterize exports, the simulator or equations.

Example : In the simulator, simulate economical variables:

if (!"false".equalsIgnoreCase(param.getTagValue().get("ecoResult"))) {
  control.setText("Add economics results");
  saveGravityModel(date, resManager, gravityModel);

Here the tag is called ecoResult

Effort description

The variables 'Fishing operation number' and 'gear number per operation' are taken into account in the equations for the "effort standardisation by trip" this way:

StdEffortPerHour = Fstd * FishingOperationNumber * GearNumberPerOperation.

So they have to be fille din when Fstd is computed at FishingOperation*gear scale.

If Fstd is computed at trip scale, you HAVE TO put 1 in both variable (or catches will be nil). The "fishingOperationLength" variable is not used in equations.


Trip types :

  • Trip length in hours
  • Minimum time between two trips : unused

Vessel type

  • Trip max length : unused
  • speed in km/h
  • activity interval : unused

Enter a management rule application month in the simulation launching interface

That is the number of the month that is queried, so a number between 0 and 11 (0 : january, 11 : december). Otherwise you will have a bug !

Did the simulation run ?

  • Ensure the simulation is in "simulation finished" state in the simulation queue
  • Select the simulation in the table (or in simulation result interface) and click on "see the logs"
  • Select fatal, error and warning : If something appears, there is a bug. Below ERROR is the exception. You have to look into the stacktrace and watch for a line with ifremer.isisfish and see what it says.

See Numbers and biomasses in the results window

Small tweak : In the results window, the numbers, biomass of a population for a month is the number/biomass at the end of the previous time step.

You do not use the correct repository for your ISIS-Fish version

The following message appear

You don't use correct repository script for your application version
Do you want to switch your repository ?

This message appear when you use a new major version of ISIS-Fish. It simply asks you if you want to use the new script version that works with your new version.

Modeling tips

Split males and females with different growth

We create consecutive length classes for males and others for the females that will follow. For examples, for males we got those classes:

60-70 70-77 77-110 110-166

and for females

60-70 70-78 78-86

you click on 'recruit classes'. For the first length, enter '60'. Then for the max lengths, enter : '70;77;110;166;70;78;86' and validate. That will create a 4th class with minimal length of 166 and maximal length of 70 !

In the population group interface, modify the minimal length of the 4th class (the first female class) : from 166 to 60. You save and that's all !!!

To do not take into account the trip time in the effort

The tip consists in entering a huge vessel speed (fo example 10^9). The trip length becomes really small ~0.


Seasons definition for a population

In ISIS, the seasons correspond to a modification of the parameters linked to events having an effect on the population (Reproduction, class change, migration,...)

To define seasons, you have to place different events on a time line. Seasons will be the consecutive months between two events.

Biological and migration events chronology at year scale

Warning : class change and reproduction happens each month of the season whereas the migration happens on the first month of the season. You do not have to specify a season for recruitment as it can happen at any time in the season.

FIXME Mail de Stéphanie du 11/07/07 : le changement de classe pour une population structurée en age ne se fait qu'une fois dans la saison, le code pourrait etre modifié pour éviter d'avoir à définir une saison d'un mois pour le changement de classe. Il y a des avantages et inconvénients (cf réponse d'Hilaire) On abandonne ?

Take care to modelisation hypothesis

ISIS base hypothesis : all the state variables are supposed homogeneous at the defined zone scale - For example If a class of a pop is distributed on Zpop at a time step t, then this class number of individuals is homogeneously distributed on Zpop. An effort on a part of Zpop impacts all the individuals of the zone by diluting on all the zone pop:

(N(Zpop,t+1) ~= N(Zpop,t)-F(met)*(N(Zpop,t))).

Would it be pertinent to make an impact on only the intersection between the metier zone and the pop zone?:

(N(Zpop,t+1) ~= N(Zpop,t)-F(met)*(N(Zpop,t)*(inter(Zmet,Zpop)/Zpop))

If we want to evaluate the impact of an AMP included in Zpop,

  • Not distinguishing 2 population zones in Zpop [Z1=Zpop-Zg et Z2=Zg], will have as consequence that the Z2 abundance will be impacted by the possible catches in Z1 (because at each time step, the catches that could happen in Z1 will impact the Zpop abundance:
    N(Zpop,t+1) ~= N(Zpop,t)-F(met)*(N(Zpop,t))

    and with the homogeneous hypothesis in Zpop, the individuals numbers in Z2 will be equals to N(Zpop,t+1)*Z2/Zpop.

  • Distinguishing 2 population zones Z1=Zpop-Zg and Z2=Zg, leads to Z2 abundance not being impacted by the Z1 catches (allows to model the fact that fishes in Z2 are pledged to this zone):
    N(Z1,t+1) ~= N(Z1,t)-F(met)* N(Z1,t), N(Z2,t+1)= N(Z2,t+1)-exp(-M/12) N(Z2,t) (if no migrations)
  • To describe a refuge phenomenon, it might be good to add a migration of individuals in Z1 and Z2 in density dependency... ?

Impact of a MPA zone if the MPA is included in the pop zone

  • If only one pop zone Zpop
  • If Zg included in Zpop
  • If the metier impacting the pop is distributed on Zmet=Zpop
  • If the metier reallocates its effort on the remaining zone : Zmet-Zg=Z1,

N(Zpop,t+1) = N(Zpop,t)-F(met)/(F(met)+M/12)exp(-F(met)+M/12)*N(Zpop,t), N(Z1,t+1) = N(Zpop,t+1)*Z1/Zpop, N(Z2,t+1) = N(Zpop,t+1)*Z2/Zpop,

  • If Zg grows up (for example nZg=kZg), F(met) does not change, the individuals number

N(Zpop,t+1) = N(Zpop,t)-{F(met)/(F(met)+M/12)*exp(-F(met)+M/12)}* N(Zpop,t) N(Z1,t+1) = N(Zpop,t+1)*[Zpop-kZg]/Zpop, N(Z2,t+1) = N(Zpop,t+1)*kZg/Zpop,

ie with a modelisation of the distribution zone of the pop in one zone (ie no heterogeneity between the part of the pop zone in the MPA and the other), a zone size change cannot have any impact

If we do the suggested hypothesis : N(Zpop,t+1) ~= N(Zpop,t)-F(met)*(N(Zpop,t)*(inter(Zmet,Zpop)/Zpop)).

In this case, the impact (difference between the individuals number for the big MPA - individual numbers for the small MPA) = (k-1)* Zg)/Zpop F(met)/(F(met)+M/12)*exp(-F(met)+M/12)}* N(Zpop,t)

Additional remark : superposition of population zones

?''To check again, but a priori : ''

If necessary, it is possible to create population zones that overlap for the same population. If the natural mortality is the same for both zones, the catches in the intersection zone will be rightly computed. If the natural mortality is the same in both zones, the effort E(str, met, grp) and then the fishing mortality F(str, met, grp) and the catches rate CR(str, met, grp) are computed independently for each pop zone but identical, so we got :

  • pop zone 1 : E -> F -> CR
  • pop zone 2 : E -> F -> CR

and the catches will be B1*CR + B2*CR = (B1+B2)*CR

(and that works whether we are in the by cell model or by zone model)

Catchability in ISIS-Fish

The catchability in ISIS-Fish is the biological part of the parameter (disponibility) as stated by Mahévas et al. 2001 = accessibility*vulnerability. The part due to boat and gear is taken into account explicitly in ISIS-Fish by the selectivity/targeting/fishing efficiency/etc parameters. The disponibility parameter usually represents the probability variations of the catches due to to the change of spatial distribution. Those variations are modeled explicitly in ISIS as the model is spatialised. So the parameter compensate for the other causes of probability variations of the catches by effort unit related to the fish behaviour (schooling aggregation, burying, vertical distribution change,...).

see Mahevas, S., Trenkel, V.M., Doray, M. and Peyronnet, A. 2011. Hake catchability by the french trawler fleet in the bay of biscay: estimating technical and biological components. ICES JOURNAL OF MARINE SCIENCE 68: pp. 107-118 Laurec, A., et J. C. Le Guen. Dynamique des populations marines exploitées Tome1 : Concepts et Modèles. Centre National pour l’Exploitation des Océans, 1981. 602. Gascuel: citing: Anonyme, 1979. Monitoring of fish stock abundance : the use of catch and effort data. FAO Fish. Tech. Paper. 155 : 101 p. Chadwick M., R.N. O'Boyle, 1990. L'analyse des données de captures et d'effort. In: Méthodes d'évaluation des stocks halieutiques, Brêthes J.C., R.N. O'Boyle éd., Univ. Québec à Rimouski, Vol. I et II, 77-101.


What happens at t=0 ?

During a simulation, the first time step is particular, and all the events usually happening in january do not necessary happen : Lors d'une simulation, le premier pas de temps est particulier, et tous les événements se déroulant habituellement en janvier n'arrivent pas forcement :

  • migration happens
  • class change does not happen

FIXME will it be modified ???

:-( Take care while entering initial fish numbers an results from january from year 0. They are not comparable with those from other years of simulation.

Simulation by cell

To do a simulation by cell, in the simulation (or sensitivity analysis) launching interface, in the "Advanced Parameters" tab, we can add an "effortByCell" tag which value is true.

Sensitivity analysis

ISIS-Fish closes itself when I launch a sensitivity analysis

It comes from an incomplete R configuration. Report to the point "Sensitivity analysis does not work"

From ISIS-Fish version, an error should show up in the logs (debug.txt) and ISIS-Fish should not close itself.

Sensitivity analysis does not work

THe most common mistake come from an incomplete R configuration for ISIS-Fish.

You should have R 2.9.0 version.

On Windows, you should configurate the two environment variables :

  • R_HOME to C:Program FilesRR-2.9.2
  • PATH must contain : %R_HOME%bin

Tips and tricks

Fill in a table from a txt or csv file

In user interfaces, you have to right-click on the table to fill and choose 'import from a file'.

Big integers are problematic

You have to write 39E3 instead of 39000

Why 41/1000 gives 0 ?

In my rule, I divide 41 by 1000 and the result is 0, why ?

In Java, everything is typed. What is done in this operation is an euclidian division, 41 and 1000 being integers. To have the result of a "classic" division, you have to do 41.0/1000.0. Both numbers being decimals (float or double), the number will be with decimal (double or float).

More generally, in Java, on an operation between two types, Java keeps the bigger precision. For exemple, betwwen two integers, you will have an integer between two doubles, you will have a double, but between an intyeger and a double, you will have a double. You can have more info here (in french) :

How do I do an exponential (or any other "evolved" mathematical function)

For most of usual mathematical operation, you have to use static methods from Math class.

More info (in french) :