Jump to content

calculating inbreeding


Yranac

Recommended Posts

Hi everyone.

 

i am trying to calculate inbreeding in a canary pedigree page http://www.pedigricced.com i tried with the code from this old post:

 

https://forums.phpfreaks.com/topic/292600-calculating-inbreeding-on-a-10-generation-pedigree/

 

but i am not really sure it is working properly, Could i get some help? some recent version?

 

i post my code, i only changed the fill of the array, i fill it with

$badape2 = $pajaro->arraycompleto($con);

all the rest is same code...

 

<?php
function coeficiente_consanguinidad($dogid, $padre = 0, $madre = 0){
include_once('class/conexion.php');
include_once('class/pajaro.php');


$con = new conexion();
$con->conectar();
$con->selecciona_db();


$pajaro = new pajaro();


$badape2 = $pajaro->arraycompleto($con);


if($padre != 0 && $madre != 0){
$badape2[$dogid] = array($padre, $madre, "pajaro virtual");
}
//print_r($badape2);
//
// ARRAY OF DOGS
//   id => [sire, dam, name]
//
/*$badape2 = array ( 
    5722 => array ( 0 => 2292, 1 => 3266, 2 => 'Nimh\'s Delorean', ), 
    2292 => array ( 0 => 2743, 1 => 2289, 2 => 'Dog B', ), 
    2743 => array ( 0 => 0, 1 => 0, 2 => 'Dog C', ), 
    2289 => array ( 0 => 0, 1 => 0, 2 => 'Dog E', ), 
    3266 => array ( 0 => 2743, 1 => 3263, 2 => 'Dog F', ), 
    3263 => array ( 0 => 0, 1 => 0, 2 => 'Dog H', )
);*/
//var_dump($badape2);


//
// CALCULATE INBREEDING COEFFICIENTS
//
//echo "<pre>\n";
return COI($dogid, $badape2);
//echo "</pre>\n";


}
//
// FUNCTIONS
//


function getAncestors($id, &$badape2, &$ancests, $path)
{   
    if ($id==0) return;


    $ancests[$id][] = $path;
    if (isset($badape2[$id]) ) {
        
        getAncestors($badape2[$id][0], $badape2, $ancests, $path.$badape2[$id][0].',');
        getAncestors($badape2[$id][1], $badape2, $ancests, $path.$badape2[$id][1].',');
    }
}


function COI($id, &$badape2)
{
    if ($id==0) return 0;
    $sires = $dams = array();
    getAncestors($badape2[$id][0], $badape2, $sires, '');
    getAncestors($badape2[$id][1], $badape2, $dams, '');
    $result=0;
    
    foreach ($sires as $did=>$dists) {
        if (isset($dams[$did])) {
            $distd = $dams[$did];
            foreach ($dists as $paths) {
                foreach ($distd as $pathd) {
                    $ds = count(explode(',', $paths));
                    $dd = count(explode(',', $pathd));
                    if ($paths==$pathd && $ds>2) continue;
                    $sumd = $ds + $dd-1;
                    $intermed = pow(0.5, $sumd) * (1 + COI($did, $badape2));
                    $result += $intermed;
                  //printf("| %5s | %8.4f | %12s | %12s |\n", $badape2[$did][2], $intermed, $paths, $pathd);
                }
            }
        }
    }
    return $result;
}


function generaciones_equivalentes($codpajaro, $nivel){
$retorno = 0;
$divisor = $nivel * 2; //cada vez que llamamos a la función el "peso" del pajaro es menor en el numero de generaciones equivalentes
include_once('class/conexion.php');
include_once('class/pajaro.php');


$con = new conexion();
$con->conectar();
$con->selecciona_db();


$pajaro = new pajaro();
$pajaro->porcodigo($con, $codpajaro);


if($pajaro->idpadre != 0){
$retorno = $retorno + (1 / $divisor) + generaciones_equivalentes($pajaro->idpadre, $divisor);
}
if($pajaro->idmadre != 0){
$retorno = $retorno + (1 / $divisor) + generaciones_equivalentes($pajaro->idmadre, $divisor);
}
return $retorno;
}
?>
 
thanks for help
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.