public boolean[] annoutate(double[] docConcept) {
		boolean[] fired = new boolean[concepts];

		PriorityQueue<State> waiting = new PriorityQueue<SpreadingActivation.State>();

		for (int i = 0; i < docConcept.length; i++)
			if (isFired(docConcept[i]))
				waiting.add(new State(docConcept[i], i));

		while (!waiting.isEmpty()) {
			State s = waiting.poll();

			if (fired[s.id])
				continue;
			fired[s.id] = true;

			for (int i = 0; i < conceptToConceptGraph[s.id].length; i++) {
				if (isRelated(s.id, i) && !fired[i]) {
					docConcept[i] += docConcept[s.id]
							* conceptToConceptGraph[s.id][i] * decay;
					docConcept[i] = Math.min(docConcept[i], MAX);
					if (isFired(docConcept[i]))
						waiting.add(new State(docConcept[i], i));
				}
			}
		}

		return fired;
	}