public void evaluate() {
		List<Thread> threads = new ArrayList<>();
		Input input = parser.getData(Input.class, "example1.xml");

		Masterdata masterData = parser.getData(Masterdata.class, "metadata.xml");

		Flight flight = input.getFlight();
		Aircraft aircraft = new Finder().inList(masterData.getAircrafts().getAircraft(), input.getFlight());
		AircraftType aircraftType = new Finder().inList(masterData.getAircraftTypes().getAircraftType(), aircraft);
		Airline airline = new Finder().inList(masterData.getAirlines().getAirline(), aircraft);

		ExchangeData cDOW = new ExchangeData(new CancalableCountDownLatch(1), BigDecimal.ONE);
		ExchangeData cZFW = new ExchangeData(new CancalableCountDownLatch(3), BigDecimal.ONE);
		ExchangeData cTOW = new ExchangeData(new CancalableCountDownLatch(2), BigDecimal.ONE);
		ExchangeData cTXW = new ExchangeData(new CancalableCountDownLatch(1), BigDecimal.ONE);
		ExchangeData cLAW = new ExchangeData(new CancalableCountDownLatch(1), BigDecimal.ONE);

		ThreadGroup tg = new ThreadGroup("LH");
		Thread caluculationDOW = new Thread(tg, new CalculationDOW(aircraft, flight, aircraftType, cDOW), "DOW");
		threads.add(caluculationDOW);

		Thread caluculationZFW = new Thread(tg, new CalculationZFW(flight, aircraftType, cDOW, cZFW), "ZFW");
		threads.add(caluculationZFW);

		Thread caluculationTOW = new Thread(tg, new CalculationTOW(flight, aircraftType, cZFW, cTOW), "TOW");
		threads.add(caluculationTOW);

		Thread caluculationTXW = new Thread(tg, new CalculationTXW(flight, aircraftType, cZFW, cTXW), "TXW");
		threads.add(caluculationTXW);

		Thread caluculationLAW = new Thread(tg, new CalculationLAW(flight, aircraftType, cTOW, cLAW), "LAW");
		threads.add(caluculationLAW);

		Thread caluculationUnderload = new Thread(tg, new CalculationUnderload(aircraftType, airline, cZFW, cTXW, cTOW, cLAW), "Underload");
		threads.add(caluculationUnderload);

		for (Thread thread : threads) {
			thread.start();
		}

		for (Thread thread : threads) {
			try {
				thread.join();
			} catch (InterruptedException e) {
				logger.error(thread.getName() + " is inperrupted", e);
			}

		}
		result.clear();
		result = ThreadProcessor.getResult();
	}