/// <summary> /// /// </summary> /// <param name="mainParams"></param> /// <param name="Inits"></param> /// <param name="sName"></param> /// <param name="iSearchBefore"></param> /// <returns></returns> private TAnimalParamSet findGenotype(TAnimalParamSet mainParams, TSingleGenotypeInits[] Inits, string sName, int iSearchBefore) { TAnimalParamSet Result; TAnimalParamSet foundParams; int Idx; Idx = 0; while ((Idx < iSearchBefore) && (sName.ToLower() != Inits[Idx].sGenotypeName.ToLower())) Idx++; if (Idx < iSearchBefore) Result = ParamsFromGenotypeInits(mainParams, Inits, Idx); else { foundParams = mainParams.Match(sName); if (foundParams != null) Result = new TAnimalParamSet(null, foundParams); else throw new Exception("Breed name \"" + sName + "\" not recognised"); } return Result; }
/// <summary> /// Convert the Stock geno object to TSingleGenotypeInits /// </summary> /// <param name="aValue"></param> /// <param name="Inits"></param> public void Value2GenotypeInits(TStockGeno aValue, ref TSingleGenotypeInits Inits) { int Idx; Inits.sGenotypeName = aValue.name; Inits.sDamBreed = aValue.dam_breed; Inits.sSireBreed = aValue.sire_breed; Inits.iGeneration = aValue.generation; Inits.SRW = aValue.srw; Inits.PotFleeceWt = aValue.ref_fleece_wt; Inits.MaxFibreDiam = aValue.max_fibre_diam; Inits.FleeceYield = aValue.fleece_yield; Inits.PeakMilk = aValue.peak_milk; Inits.DeathRate[FALSE] = aValue.death_rate; Inits.DeathRate[TRUE] = aValue.wnr_death_rate; // Catch weaner death rates that are missing from v1.3 input data... if (Inits.DeathRate[TRUE] == 0.0) Inits.DeathRate[TRUE] = Inits.DeathRate[FALSE]; for (int i = 0; i < Inits.Conceptions.Length; i++) Inits.Conceptions[0] = 0.0; for (Idx = 1; Idx <= aValue.conception.Length; Idx++) Inits.Conceptions[Idx-1] = aValue.conception[Idx-1]; }
/// <summary> /// Initialises a TGenotypeInits so that most parameters revert to their /// defaults. Can't be done as a constant because MISSING is a typed value /// </summary> /// <param name="Genotype"></param> public void MakeEmptyGenotype(ref TSingleGenotypeInits Genotype) { Genotype.sGenotypeName = "Medium Merino"; Genotype.sDamBreed = ""; Genotype.sSireBreed = ""; Genotype.iGeneration = 0; Genotype.SRW = StdMath.DMISSING; Genotype.PotFleeceWt = StdMath.DMISSING; Genotype.MaxFibreDiam = StdMath.DMISSING; Genotype.FleeceYield = StdMath.DMISSING; Genotype.PeakMilk = StdMath.DMISSING; Genotype.DeathRate[FALSE] = StdMath.DMISSING; Genotype.DeathRate[TRUE] = StdMath.DMISSING; Genotype.Conceptions[1] = StdMath.DMISSING; Genotype.Conceptions[2] = 0.0; Genotype.Conceptions[3] = 0.0; }
/// <summary> /// Always makes a copy /// </summary> /// <param name="mainParams"></param> /// <param name="Inits"></param> /// <param name="iGenotype"></param> /// <returns></returns> public TAnimalParamSet ParamsFromGenotypeInits(TAnimalParamSet mainParams, TSingleGenotypeInits[] Inits, int iGenotype) { TAnimalParamSet Result; //bool bWeaner; if (Inits[iGenotype].sDamBreed == String.Empty) Result = findGenotype(mainParams, Inits, Inits[iGenotype].sGenotypeName, 0); else if (Inits[iGenotype].iGeneration == 0) Result = findGenotype(mainParams, Inits, Inits[iGenotype].sDamBreed, 0); else Result = TAnimalParamSet.CreateFactory(Inits[iGenotype].sGenotypeName, findGenotype(mainParams, Inits, Inits[iGenotype].sDamBreed, iGenotype), findGenotype(mainParams, Inits, Inits[iGenotype].sSireBreed, iGenotype)); Result.sName = Inits[iGenotype].sGenotypeName; if (bIsGiven(Inits[iGenotype].SRW)) Result.BreedSRW = Inits[iGenotype].SRW; if (bIsGiven(Inits[iGenotype].PotFleeceWt)) Result.PotentialGFW = Inits[iGenotype].PotFleeceWt; if (bIsGiven(Inits[iGenotype].MaxFibreDiam)) Result.MaxMicrons = Inits[iGenotype].MaxFibreDiam; if (bIsGiven(Inits[iGenotype].FleeceYield)) Result.FleeceYield = Inits[iGenotype].FleeceYield; if (bIsGiven(Inits[iGenotype].PeakMilk)) Result.PotMilkYield = Inits[iGenotype].PeakMilk; for (int iWeaner = 0; iWeaner <= 1; iWeaner++) { if (Inits[iGenotype].DeathRate[iWeaner] != StdMath.DMISSING) // A zero death rate is permissible Result.SetAnnualDeaths(iWeaner == 1, Inits[iGenotype].DeathRate[iWeaner]); } if (bIsGiven(Inits[iGenotype].Conceptions[1])) Result.Conceptions = Inits[iGenotype].Conceptions; return Result; }
/// <summary> /// Add more genotypes /// </summary> /// <param name="BreedInits"></param> public void addGenotypes(TSingleGenotypeInits[] BreedInits) { int Idx, Jdx; Idx = FGenotypes.Length; Array.Resize(ref FGenotypes, Idx + BreedInits.Length); for (Jdx = 0; Jdx <= BreedInits.Length - 1; Jdx++) FGenotypes[Idx + Jdx] = ParamsFromGenotypeInits(FBaseParams, BreedInits, Jdx); }