[Isis-fish-users] Calcul du nombre d'oeufs produits - boucle sur les groupes
slehuta
Sigrid.Lehuta at ifremer.fr
Jeu 19 Mar 23:45:06 CET 2020
Bonsoir,
merci tout va bien.
C'est un bon début, c 'est vrai que cette equation est sioux...
Si tu ouvres l editeur, en en tete tu vois tous les objets auxquels tu
as accès dans l equation, en particulier N la matrice d abondance de la
pop. Parfois cela aide a comprendre ce que l equation qoit renvoyer. Ici
c'est particulierement pas simple (on travaille sur le manuel pour que
cela soit mieux expliqué) mais cette equation doit remplir une matrice a
1 dimension (zones de reproduction) nommée result et ne retourne rien.
Donc...
On declare sexRatio
double sexRatio = 0.5;
Je ne sais pas si tu as besoin d'une fecondité par groupe si oui
utilises le taux de reproduction dans l onglet trait de vie sinon
double fecParGonade = 5000;
On boucle donc sur les zones de reproduction puisqu il faut remplir une
valeur par zone dans result
for(Zone zr : zoneRepro){
on initialise prodOeufs
double prodOeufs = 0;
Comme tu l'as bien fait on boucle aussi sur les groupes, mais g est un
objet PopulationGroup il n'est pas comparable à un entier 4.
L'identifiant du groupe lui est un entier g.getId() est comparable à 4
(tu retrouveras ca dans l'API).
for(PopulationGroup g : groups){
if (g.getId() < 4) {
Ensuite si tu mets un return il va sortir de l'equation alors qu'il n a
pas finit de boucler sur les groupes et les zones et qu'il n a pas
rempli result ! Cette equation est traitre car elle n a pas besoin de
returner qqch, elle remplit simplement result donc on attend la fin pour
le return.
Comme on ne fait rien si g.getId()<4 je ferais l'inverse
if(g.getId()>3){
La matrice d abondance est une matrice [groupe x zones] pour acceder a
la valeur pour le groupe g dans la zone zr : N.getValue(g,zr);
pour le poids on utilise g.getMeanWeight()
double res = sexRatio * 2*fecParGonade
*g.getMeanWeight()*N.getValue(g,zr);
prodOeufs += res ; // equivalent à prodOeufs + res;
} // fin du if
} // fin de boucle groupe
result.setValue(zr,prodOeufs);
} // fin de boucle zone
return 0; // pour qu'il sorte de l equation
j espere que ca marche !
Le 2020-03-19 20:27, BACH Adrian a écrit :
> Bonsoir,
>
> J'espère que votre confinement se passe bien !
>
> Une petite question java : je voudrais calculer le nombre d'œufs produits pendant la période de fraye d'un seul mois sur une seule zone de pop avec le calcul suivant (champ 'équation de reproduction' dans le panneau 'Reproductions')
>
> // nombre d'oeufs produits = somme sur les groupes 4 à 7 du calcul sexRatio*fecondite*[nombre de poissons dans le groupe]*[leur poids]
>
> Je suis complètement nouveau en java donc je ne sais trop comment obtenir les valeurs entre crochets, mais je pensais à un truc comme ça :
>
> //double prodOeufs = 0;
>
> //
>
> //for(PopulationGroup g : pop.getPopulationGroup().get()){
>
> // if (g < 4) {
>
> // return 0;
>
> // } else {
>
> // double res = sexRatio * 2*fecParGonade * pop.getPopulationGroup(g).getMeanWeight() * pop.getPopulationGroup(g).getAboundance().sumAll();
>
> // prodOeufs = prodOeufs + res;
>
> // }
>
> //}
>
> //return prodOeufs;
>
> Mais j'obtiens les erreurs suivantes :
>
> 1. ERROR in D:\DATA\a.bach\isis-fish-4\isis-temp\tmp-20200319112700-1491086668\checkPopulationReproductionEquation1429431846243759405Equation.java (at line 23)
>
> if (g < 4) {
>
> ^^^^^
>
> The operator < is undefined for the argument type(s) PopulationGroup, int
>
> ----------
>
> 2. ERROR in D:\DATA\a.bach\isis-fish-4\isis-temp\tmp-20200319112700-1491086668\checkPopulationReproductionEquation1429431846243759405Equation.java (at line 26)
>
> double res = sexRatio * 2*fecParGonade * pop.getPopulationGroup(g).getMeanWeight() * pop.getPopulationGroup(g).getAboundance().sumAll();
>
> ^^^^^^^^^^^^^^^^^^
>
> The method getPopulationGroup() in the type Population is not applicable for the arguments (PopulationGroup)
>
> ----------
>
> 3. ERROR in D:\DATA\a.bach\isis-fish-4\isis-temp\tmp-20200319112700-1491086668\checkPopulationReproductionEquation1429431846243759405Equation.java (at line 26)
>
> double res = sexRatio * 2*fecParGonade * pop.getPopulationGroup(g).getMeanWeight() * pop.getPopulationGroup(g).getAboundance().sumAll();
>
> ^^^^^^^^^^^^^^^^^^
>
> The method getPopulationGroup() in the type Population is not applicable for the arguments (PopulationGroup)
>
> ----------
>
> 3 problems (3 errors)
>
> Pourriez-vous me donner un petit coup de main ou partager un script faisant sensiblement le même calcul ?
>
> Merci et bonne soirée,
>
> Adrian
> -------------------------
> Ce message et ses pièces jointes peuvent contenir des informations confidentielles ou privilégiées et ne doivent donc pas être diffusés, exploités ou copiés sans autorisation. Si vous avez reçu ce message par erreur, merci de le signaler à l'expéditeur et le détruire ainsi que les pièces jointes. Les messages électroniques étant susceptibles d'altération, Egis décline toute responsabilité si ce message a été altéré, déformé ou falsifié. Merci.
>
> This message and its attachments may contain confidential or privileged information that may be protected by law; they should not be distributed, used or copied without authorisation. If you have received this email in error, please notify the sender and delete this message and its attachments. As emails may be altered, Egis is not liable for messages that have been modified, changed or falsified. Thank you.
> -------------------------
>
> _______________________________________________
> Isis-fish-users mailing list
> Isis-fish-users at list.isis-fish.org
> http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://list.isis-fish.org/pipermail/isis-fish-users/attachments/20200319/ac956d8c/attachment-0002.html>
Plus d'informations sur la liste de diffusion Isis-fish-users