public double historicalEventExecute( double historicalEventTime){
		historicalEvent tempEvent;
		double gen = historicalEventTime;
		if(currentEvent == null){
			System.out.println("Sorry no historical event to execute");
			return 0;
		}
		else{
			dem.dgLog(10 , currentEvent.getGen(), currentEvent.getLabel());
			switch(currentEvent.getType()){
			case HE_POP_SIZE:
				dem.setPopSizeByName(currentEvent.getGen(), currentEvent.getPopIndex()[0], (int) currentEvent.getParams()[0]);
				break;
			
			case HE_POP_SIZE_EXP:
				dem.setPopSizeByName(currentEvent.getGen(), currentEvent.getPopIndex()[0], (int) (currentEvent.getParams()[1]+.5));
				historicalNextExp(currentEvent);
				break;
			case HE_BOTTLENECK:
				bottleneck.bottleNeckExecute(currentEvent.getPopIndex()[0],currentEvent.getParams()[0], (int) currentEvent.getGen());
				break;
			case HE_ADMIX:
				dem.moveNodesByName(currentEvent.getPopIndex()[0], currentEvent.getPopIndex()[1], currentEvent.getParams()[0], currentEvent.getGen());
				break;
			case HE_MIGRATION:
				migFactory.migrateDelete(currentEvent.getPopIndex()[1], currentEvent.getPopIndex()[0]);
				migFactory.migrateAdd(currentEvent.getPopIndex()[1],currentEvent.getPopIndex()[0], currentEvent.getParams()[0]);
				break;
			case HE_SPLIT:
				dem.moveNodesByName(currentEvent.getPopIndex()[1], currentEvent.getPopIndex()[0], 1, currentEvent.getGen());
				dem.endPopByName(currentEvent.getPopIndex()[1]);
				break;
			case HE_SWEEP:
				gen = sweeper.sweepExecute(currentEvent.getPopIndex()[0], currentEvent.getParams()[0], currentEvent.getGen(), currentEvent.getParams()[1], currentEvent.getParams()[2]);
				break;
		}
			tempEvent = currentEvent;
			currentEvent = currentEvent.getNext();
			this.historicalFree(tempEvent);
			return gen;
		}
		
	}