def ineligible_siblings
      ineligibles = []
      if gclass.ineligibility_level >= PEDIGREE
        ineligibles |= ancestors | descendants | siblings | [self]
        ineligibles |= (father ? gclass.all_with(:father).where("father_id != ?", father) : [])
        ineligibles |= (mother ? gclass.all_with(:mother).where("mother_id != ?", mother) : [])
      end
      if gclass.ineligibility_level >= PEDIGREE_AND_DATES
        [:father,:mother].each do |parent|
          if p = send(parent)
            # if a parent is present ineligible siblings are parent's ineligible children
            ineligibles |= p.ineligible_children
          elsif parent_fertility_range = send("#{parent}_fertility_range")
            # if it's possible to estimate parent's fertility period
            remainings = gclass.all - ineligibles
            # includes all individuals whose estimated birth period doesn't overlap parent's fertility period
            ineligibles |= remainings.find_all do |indiv|
              if ibr = indiv.birth_range
                !parent_fertility_range.overlaps? ibr
              else
                false
              end
            end
          end
        end
      end
      ineligibles
    end
def ineligible_siblings
      ineligibles = []
      if gclass.ineligibility_level >= PEDIGREE
        ineligibles |= ancestors | descendants | siblings | [self]
        ineligibles |= (father ? gclass.all_with(:father).where("father_id != ?", father) : [])
        ineligibles |= (mother ? gclass.all_with(:mother).where("mother_id != ?", mother) : [])
      end
      if gclass.ineligibility_level >= PEDIGREE_AND_DATES
        [:father,:mother].each do |parent|
          if p = send(parent)
            # if a parent is present ineligible siblings are parent's ineligible children
            ineligibles |= p.ineligible_children
          elsif parent_fertility_range = send("#{parent}_fertility_range")
            # if it's possible to estimate parent's fertility period
            remainings = gclass.all - ineligibles
            # includes all individuals whose estimated birth period doesn't overlap parent's fertility period
            ineligibles |= remainings.find_all do |indiv|
              if ibr = indiv.birth_range
                !parent_fertility_range.overlaps? ibr
              else
                false
              end
            end
          end
        end
      end
      ineligibles
    end
list of individual who cannot be siblings according to the ineligibility level in use.
 At `:pedigree` level it returns `self` along with their full siblings, ancestors, descendants and all individuals with different father or mother.
 At `:pedigree_and_dates` level it also includes all individuals who cannot be siblings for age reasons. For each parent, if it is known
 it includes parent's ineligible children, otherwise it tries to estimate parent's fertility period: if it's possible it includes all individuals whose estimated birth period doesn't overlap parent's fertility period.
 @return [Array]