{"id":60,"date":"2026-02-28T15:30:20","date_gmt":"2026-02-28T15:30:20","guid":{"rendered":"https:\/\/staging.redpollbreedingbrothers.nl\/?page_id=60"},"modified":"2026-02-28T22:43:07","modified_gmt":"2026-02-28T22:43:07","slug":"vererving-calculator","status":"publish","type":"page","link":"https:\/\/staging.redpollbreedingbrothers.nl\/?page_id=60","title":{"rendered":"Vererving-calculator"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"60\" class=\"elementor elementor-60\">\n\t\t\t\t<div class=\"elementor-element elementor-element-51c0171 e-flex e-con-boxed e-con e-parent\" data-id=\"51c0171\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-50eeef4 elementor-widget elementor-widget-shortcode\" data-id=\"50eeef4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\r\n<style>\r\n#barmsijs-69f99f2902139{\r\n  max-width:1100px;\r\n  margin:20px auto;\r\n  padding:0; \/* geen extra binnenruimte *\/\r\n  background:transparent; \/* \ud83d\udd25 grijze achtergrond weg *\/\r\n  font-family:Arial, Helvetica, sans-serif;\r\n}\r\n\r\n\/* grid *\/\r\n#barmsijs-69f99f2902139 .grid{\r\n  display:grid;\r\n  grid-template-columns:repeat(auto-fit,minmax(260px,1fr));\r\n  gap:16px;\r\n}\r\n\r\n\/* kaarten *\/\r\n#barmsijs-69f99f2902139 .card{\r\n  background:#ffffff;\r\n  border:1px solid #e6e6e6;\r\n  border-radius:14px;\r\n  padding:16px;\r\n  box-shadow:0 4px 12px rgba(0,0,0,.04);\r\n}\r\n\r\n\/* velden *\/\r\n#barmsijs-69f99f2902139 select,\r\n#barmsijs-69f99f2902139 button{\r\n  width:100%;\r\n  padding:10px;\r\n  margin-top:6px;\r\n}\r\n\r\n\/* tabellen *\/\r\n#barmsijs-69f99f2902139 table{\r\n  width:100%;\r\n  border-collapse:collapse;\r\n  margin-top:12px;\r\n  background:#ffffff;\r\n  border-radius:12px;\r\n  overflow:hidden;\r\n}\r\n\r\n#barmsijs-69f99f2902139 th,\r\n#barmsijs-69f99f2902139 td{\r\n  padding:8px;\r\n  border-bottom:1px solid #eee;\r\n  text-align:left;\r\n}\r\n<\/style>\r\n\r\n<div id=\"barmsijs-69f99f2902139\">\r\n\r\n<h2>Barmsijs Vererving Calculator<\/h2>\r\n\r\n<div class=\"grid\">\r\n\r\n<!-- ================= MAN ================= -->\r\n<div class=\"card\">\r\n<h3>\u2642 Man<\/h3>\r\n\r\n<label>Basiskleur<\/label>\r\n<select class=\"m_base\">\r\n<option value=\"wild\">wildkleur<\/option>\r\n<option value=\"df_wild\">donkerfactor wildkleur (kobalt)<\/option>\r\n\r\n<option value=\"bruin\">bruin<\/option>\r\n<option value=\"df_bruin\">donkerfactor bruin (kobalt)<\/option>\r\n\r\n<option value=\"agaat\">agaat<\/option>\r\n<option value=\"df_agaat\">donkerfactor agaat (kobalt)<\/option>\r\n\r\n<option value=\"isabel\">bruin-agaat (isabel)<\/option>\r\n<option value=\"df_isabel\">donkerfactor bruin-agaat (isabel) (kobalt)<\/option>\r\n\r\n<option value=\"pastel\">pastel<\/option>\r\n<option value=\"df_pastel\">donkerfactor pastel (kobalt)<\/option>\r\n\r\n<option value=\"bruinpastel\">bruinpastel<\/option>\r\n<option value=\"df_bruinpastel\">donkerfactor bruinpastel (kobalt)<\/option>\r\n\r\n<option value=\"agaatpastel\">agaatpastel<\/option>\r\n<option value=\"df_agaatpastel\">donkerfactor agaatpastel (kobalt)<\/option>\r\n\r\n<option value=\"phaeo\">phaeo<\/option>\r\n<option value=\"df_phaeo\">donkerfactor phaeo (kobalt)<\/option>\r\n\r\n<option value=\"gepareld\">gepareld<\/option>\r\n<option value=\"df_gepareld\">donkerfactor gepareld (kobalt)<\/option>\r\n\r\n<option value=\"bont\">bont<\/option>\r\n<option value=\"df_bont\">donkerfactor bont (kobalt)<\/option>\r\n<\/select>\r\n\r\n<label>Factor (EF \/ DF)<\/label>\r\n<select class=\"m_df\">\r\n<option value=\"0\">geen<\/option>\r\n<option value=\"1\">EF<\/option>\r\n<option value=\"2\">DF<\/option>\r\n<\/select>\r\n\r\n<label>Split<\/label>\r\n<div class=\"m_split\">\r\n<label><input type=\"checkbox\" value=\"bruin\"> split bruin<\/label><br>\r\n<label><input type=\"checkbox\" value=\"agaat\"> split agaat<\/label><br>\r\n<label><input type=\"checkbox\" value=\"isabel\"> split bruin-agaat (isabel)<\/label><br>\r\n<label><input type=\"checkbox\" value=\"pastel\"> split pastel<\/label><br>\r\n<label><input type=\"checkbox\" value=\"phaeo\"> split phaeo<\/label><br>\r\n<label><input type=\"checkbox\" value=\"gepareld\"> split gepareld<\/label><br>\r\n<label><input type=\"checkbox\" value=\"bont\"> split bont<\/label><br>\r\n<\/div>\r\n<\/div>\r\n\r\n<!-- ================= POP ================= -->\r\n<div class=\"card\">\r\n<h3>\u2640 Pop<\/h3>\r\n\r\n<label>Basiskleur<\/label>\r\n<select class=\"f_base\">\r\n<option value=\"wild\">wildkleur<\/option>\r\n<option value=\"df_wild\">donkerfactor wildkleur (kobalt)<\/option>\r\n\r\n<option value=\"bruin\">bruin<\/option>\r\n<option value=\"df_bruin\">donkerfactor bruin (kobalt)<\/option>\r\n\r\n<option value=\"agaat\">agaat<\/option>\r\n<option value=\"df_agaat\">donkerfactor agaat (kobalt)<\/option>\r\n\r\n<option value=\"isabel\">bruin-agaat (isabel)<\/option>\r\n<option value=\"df_isabel\">donkerfactor bruin-agaat (isabel) (kobalt)<\/option>\r\n\r\n<option value=\"pastel\">pastel<\/option>\r\n<option value=\"df_pastel\">donkerfactor pastel (kobalt)<\/option>\r\n\r\n<option value=\"bruinpastel\">bruinpastel<\/option>\r\n<option value=\"df_bruinpastel\">donkerfactor bruinpastel (kobalt)<\/option>\r\n\r\n<option value=\"agaatpastel\">agaatpastel<\/option>\r\n<option value=\"df_agaatpastel\">donkerfactor agaatpastel (kobalt)<\/option>\r\n\r\n<option value=\"phaeo\">phaeo<\/option>\r\n<option value=\"df_phaeo\">donkerfactor phaeo (kobalt)<\/option>\r\n\r\n<option value=\"gepareld\">gepareld<\/option>\r\n<option value=\"df_gepareld\">donkerfactor gepareld (kobalt)<\/option>\r\n\r\n<option value=\"bont\">bont<\/option>\r\n<option value=\"df_bont\">donkerfactor bont (kobalt)<\/option>\r\n<\/select>\r\n\r\n<label>Factor (EF \/ DF)<\/label>\r\n<select class=\"f_df\">\r\n<option value=\"0\">geen<\/option>\r\n<option value=\"1\">EF<\/option>\r\n<option value=\"2\">DF<\/option>\r\n<\/select>\r\n\r\n<label>Split<\/label>\r\n<label>Split<\/label>\r\n<div class=\"f_split\">\r\n\r\n<label><input type=\"checkbox\" value=\"phaeo\"> split phaeo<\/label><br>\r\n<label><input type=\"checkbox\" value=\"gepareld\"> split gepareld<\/label><br>\r\n<label><input type=\"checkbox\" value=\"bont\"> split bont<\/label><br>\r\n\r\n<\/div>\r\n<\/div>\r\n\r\n<!-- ================= ACTIE ================= -->\r\n<div class=\"card\">\r\n<h3>Actie<\/h3>\r\n\r\n<label style=\"display:flex;gap:8px;align-items:center;margin-bottom:8px;\">\r\n<input type=\"checkbox\" class=\"toggle_co\">\r\nCrossing-over simuleren\r\n<\/label>\r\n\r\n<button class=\"calc\">Bereken<\/button>\r\n<\/div>\r\n\r\n<\/div>\r\n\r\n<div class=\"card\"><h3>\u2642 Zonen<\/h3><table><tbody class=\"sons\"><\/tbody><\/table><\/div>\r\n<div class=\"card\"><h3>\u2640 Dochters<\/h3><table><tbody class=\"daughters\"><\/tbody><\/table><\/div>\r\n<div class=\"card\"><h3>Totaal<\/h3><table><tbody class=\"total\"><\/tbody><\/table><\/div>\r\n\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n\r\nconst root=document.getElementById('barmsijs-69f99f2902139');\r\nconst CO_BR_AG = 0.10;\r\n\r\nfunction pct(x){\r\n  return (x*100).toFixed(2).replace(\/\\.00$\/,'')+'%';\r\n}\r\n\r\nfunction getSplits(sel){\r\n  return [...root.querySelectorAll(sel+' input:checked')].map(el=>el.value);\r\n}\r\nfunction has(arr,key){return arr.includes(key)}\r\n\r\nfunction getCO(){\r\n  return root.querySelector('.toggle_co').checked ? CO_BR_AG : 0;\r\n}\r\n\r\n\/* ================= Z GAMETEN ================= *\/\r\n\r\nfunction maleZGametes_CO(visBr, splitBr, visAg, splitAg){\r\n\r\n  const brAlleles = visBr ? [1,1] : (splitBr ? [1,0] : [0,0]);\r\n  const agAlleles = visAg ? [1,1] : (splitAg ? [1,0] : [0,0]);\r\n\r\n  const hasBoth = (visBr || splitBr) && (visAg || splitAg);\r\n\r\n  if(!hasBoth){\r\n    return [\r\n      {br: brAlleles[0], ag: agAlleles[0], p:0.5},\r\n      {br: brAlleles[1], ag: agAlleles[1], p:0.5}\r\n    ];\r\n  }\r\n\r\n  const co=getCO();\r\n\r\n  return [\r\n    {br: brAlleles[0], ag: agAlleles[0], p:0.5*(1-co)},\r\n    {br: brAlleles[1], ag: agAlleles[1], p:0.5*(1-co)},\r\n    {br: brAlleles[0], ag: agAlleles[1], p:0.5*co},\r\n    {br: brAlleles[1], ag: agAlleles[0], p:0.5*co},\r\n  ];\r\n}\r\n\r\nfunction maleZ_simple(vis,split){\r\n  if(vis) return [1,1];\r\n  if(split) return [1,0];\r\n  return [0,0];\r\n}\r\nfunction femaleZ(vis){return vis?1:0}\r\n\r\n\/* ================= DF ================= *\/\r\n\r\nfunction dfCross(m,f){\r\n  const gamM=m==2?['D','D']:m==1?['D','d']:['d','d'];\r\n  const gamF=f==2?['D','D']:f==1?['D','d']:['d','d'];\r\n  const out={0:0,1:0,2:0};\r\n\r\n  gamM.forEach(a=>{\r\n    gamF.forEach(b=>{\r\n      const g=[a,b].sort().join('');\r\n      let key=0;\r\n      if(g==='Dd') key=1;\r\n      if(g==='DD') key=2;\r\n      out[key]+=0.25;\r\n    });\r\n  });\r\n\r\n  return out;\r\n}\r\n\r\n\/* ================= FENOTYPE ================= *\/\r\n\r\nfunction phenotype(br,ag,pa,sex){\r\n\r\n  const visBr=sex==='M'?br===2:br===1;\r\n  const visAg=sex==='M'?ag===2:ag===1;\r\n  const visPa=sex==='M'?pa===2:pa===1;\r\n\r\n  const splitBr=sex==='M'&&br===1;\r\n  const splitAg=sex==='M'&&ag===1;\r\n  const splitPa=sex==='M'&&pa===1;\r\n\r\n  let base='wildkleur';\r\n\r\n  if(visBr&&visAg) base='bruin-agaat (isabel)';\r\n  else if(visAg) base='agaat';\r\n  else if(visBr) base='bruin';\r\n\r\n  if(visPa){\r\n    if(base==='wildkleur') base='pastel';\r\n    else base+=' pastel';\r\n  }\r\n\r\n  const splits=[];\r\n\r\n  if(splitBr&&splitAg&&!visBr&&!visAg){\r\n    splits.push('bruin-agaat (isabel)');\r\n  }else{\r\n    if(splitAg&&!visAg) splits.push('agaat');\r\n    if(splitBr&&!visBr) splits.push('bruin');\r\n  }\r\n\r\n  if(splitPa&&!visPa) splits.push('pastel');\r\n\r\n  if(splits.length) base+=' \/ '+splits.join(' \/ ');\r\n\r\n  return base;\r\n}\r\n\r\n\/* ================= HOOFD ================= *\/\r\n\r\nfunction calculate(){\r\n\r\n  const mBase=root.querySelector('.m_base').value;\r\n  const fBase=root.querySelector('.f_base').value;\r\n\r\n  const mDfSel=+root.querySelector('.m_df').value;\r\n  const fDfSel=+root.querySelector('.f_df').value;\r\n\r\n  const mDf=mBase.startsWith('df_')?mDfSel:0;\r\n  const fDf=fBase.startsWith('df_')?fDfSel:0;\r\n\r\n  const mSplits=getSplits('.m_split');\r\n\r\n  \/* zichtbare genen *\/\r\n\r\n  const m_vis_br=['bruin','df_bruin','isabel','df_isabel','bruinpastel','df_bruinpastel'].includes(mBase);\r\n  const m_vis_ag=['agaat','df_agaat','isabel','df_isabel','agaatpastel','df_agaatpastel'].includes(mBase);\r\n  const m_vis_pa=['pastel','df_pastel','bruinpastel','df_bruinpastel','agaatpastel','df_agaatpastel'].includes(mBase);\r\n\r\n  const f_vis_br=['bruin','df_bruin','isabel','df_isabel','bruinpastel','df_bruinpastel'].includes(fBase);\r\n  const f_vis_ag=['agaat','df_agaat','isabel','df_isabel','agaatpastel','df_agaatpastel'].includes(fBase);\r\n  const f_vis_pa=['pastel','df_pastel','bruinpastel','df_bruinpastel','agaatpastel','df_agaatpastel'].includes(fBase);\r\n\r\n  let m_split_br=has(mSplits,'bruin');\r\n  let m_split_ag=has(mSplits,'agaat');\r\n  if(has(mSplits,'isabel')){m_split_br=true;m_split_ag=true;}\r\n  const m_split_pa=has(mSplits,'pastel');\r\n\r\n  const maleGametes=maleZGametes_CO(m_vis_br,m_split_br,m_vis_ag,m_split_ag);\r\n  const mPaGam=maleZ_simple(m_vis_pa,m_split_pa);\r\n\r\n  const fBrGam=femaleZ(f_vis_br);\r\n  const fAgGam=femaleZ(f_vis_ag);\r\n  const fPaGam=femaleZ(f_vis_pa);\r\n\r\n  const df=dfCross(mDf,fDf);\r\n\r\n  const sons={},daughters={},total={};\r\n\r\n  function add(map,label,p){\r\n    if(p<=0) return;\r\n    map[label]=(map[label]||0)+p;\r\n    total[label]=(total[label]||0)+p;\r\n  }\r\n\r\n  Object.entries(df).forEach(([dfVal,pDf])=>{\r\n    maleGametes.forEach(g=>{\r\n      mPaGam.forEach(paAllele=>{\r\n\r\n        const pPair = pDf * g.p * 0.5;\r\n\r\n        let s_name=phenotype(g.br+fBrGam,g.ag+fAgGam,paAllele+fPaGam,'M');\r\n        if(dfVal==1) s_name='EF donkerfactor (kobalt) '+s_name;\r\n        if(dfVal==2) s_name='DF donkerfactor (kobalt) '+s_name;\r\n        add(sons,s_name,pPair);\r\n\r\n        let d_name=phenotype(g.br,g.ag,paAllele,'F');\r\n        if(dfVal==1) d_name='EF donkerfactor (kobalt) '+d_name;\r\n        if(dfVal==2) d_name='DF donkerfactor (kobalt) '+d_name;\r\n        add(daughters,d_name,pPair);\r\n\r\n      });\r\n    });\r\n  });\r\n\r\n  render('.sons',sons);\r\n  render('.daughters',daughters);\r\n  render('.total',total);\r\n}\r\n\r\nfunction render(sel,map){\r\n  const el=root.querySelector(sel);\r\n  el.innerHTML='';\r\n  Object.entries(map)\r\n    .sort((a,b)=>b[1]-a[1])\r\n    .forEach(([k,v])=>{\r\n      const tr=document.createElement('tr');\r\n      tr.innerHTML='<td>'+k+'<\/td><td><b>'+pct(v)+'<\/b><\/td>';\r\n      el.appendChild(tr);\r\n    });\r\n}\r\n\r\nroot.querySelector('.calc').addEventListener('click', calculate);\r\n\r\n})();\r\n<\/script>\r\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dbfe20f elementor-widget elementor-widget-button\" data-id=\"dbfe20f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Naar boven<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Naar boven<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-60","page","type-page","status-publish"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/staging.redpollbreedingbrothers.nl\/index.php?rest_route=\/wp\/v2\/pages\/60","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/staging.redpollbreedingbrothers.nl\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/staging.redpollbreedingbrothers.nl\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/staging.redpollbreedingbrothers.nl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/staging.redpollbreedingbrothers.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=60"}],"version-history":[{"count":10,"href":"https:\/\/staging.redpollbreedingbrothers.nl\/index.php?rest_route=\/wp\/v2\/pages\/60\/revisions"}],"predecessor-version":[{"id":211,"href":"https:\/\/staging.redpollbreedingbrothers.nl\/index.php?rest_route=\/wp\/v2\/pages\/60\/revisions\/211"}],"wp:attachment":[{"href":"https:\/\/staging.redpollbreedingbrothers.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=60"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}