public node[] recombExecute(double gen,int popIndex, doublePointer location){
		/*  pick location */  
		  double loc;
		  double temp;
		  double temp1;
		  recombStructure temprecomb = recombs;
		  double rr = 0;
		  double end;
				       
		  /* choosing location.. */
		  temp1 = random.randomDouble();
		  temp = (double) (temp1 * (recombRate));

		  while (temprecomb != null && temprecomb.startBase < length && rr < temp) {
		    if (temprecomb.next == null || 
			temprecomb.next.startBase > length) {
		      rr += (length - temprecomb.startBase) * temprecomb.rate;
		    }
		    else {
		      rr += (temprecomb.next.startBase - temprecomb.startBase) * 
			temprecomb.rate;			
		    }

		    if (rr < temp) {
		      temprecomb = temprecomb.next;
		    }
		  }

		  if (temprecomb.next == null || temprecomb.next.startBase > length)
		    end = length;
		  else end = temprecomb.next.startBase;

		  loc = (double)((int) (end - (rr - temp) / temprecomb.rate)) / length;
		  location.setDouble(loc);

		  return dem.recombineByIndex(popIndex, gen, loc);
	}