docs: private ConstraintNetwork[] samplingPeakCollection(HashMap<SymbolicVariableActivity, SpatialFluent> aTOsf) {
  
  
  
  		Vector<SymbolicVariableActivity> observation = new Vector<SymbolicVariableActivity>();
  		Vector<SymbolicVariableActivity> activities = new Vector<SymbolicVariableActivity>();
  		for (SymbolicVariableActivity act : aTOsf.keySet()) {
  			activities.add(act);
  			if(act.getTemporalVariable().getEST() == act.getTemporalVariable().getLST())
  				observation.add(act);
  		}
  		if (activities != null && !activities.isEmpty()) {
  
  			SymbolicVariableActivity[] groundVars = activities.toArray(new SymbolicVariableActivity[activities.size()]);			
  			Arrays.sort(groundVars, new ActivityComparator(true));
  			Vector<ConstraintNetwork> ret = new Vector<ConstraintNetwork>();
  			Vector<Vector<SymbolicVariableActivity>> overlappingAll = new Vector<Vector<SymbolicVariableActivity>>();
  
  			// if an activity is spatially inconsistent even with itself
  			for (SymbolicVariableActivity act : activities) {
  				if (isConflicting(new SymbolicVariableActivity[] { act }, aTOsf)) {
  					ConstraintNetwork temp = new ConstraintNetwork(null);
  					temp.addVariable(act);
  					ret.add(temp);
  				}
  			}
  
  			// groundVars are ordered activities
  			for (int i = 0; i < groundVars.length; i++) {
  				Vector<SymbolicVariableActivity> overlapping = new Vector<SymbolicVariableActivity>();
  				overlapping.add(groundVars[i]);
  				long start = (groundVars[i]).getTemporalVariable().getEST();
  				long end = (groundVars[i]).getTemporalVariable().getEET();
  				Bounds intersection = new Bounds(start, end);
  				for (int j = 0; j < groundVars.length; j++) {
  					if (i != j) {
  						start = (groundVars[j]).getTemporalVariable().getEST();
  						end = (groundVars[j]).getTemporalVariable().getEET();
  						Bounds nextInterval = new Bounds(start, end);
  						//						 System.out.println("nextinterval: " + groundVars[j] + " " +nextInterval);
  						//						 System.out.println("____________________________________");
  						Bounds intersectionNew = intersection.intersectStrict(nextInterval);
  						if (intersectionNew != null) {
  							overlapping.add(groundVars[j]);
  							if (isConflicting(overlapping.toArray(new SymbolicVariableActivity[overlapping.size()]), aTOsf)) {
  								overlappingAll.add(overlapping);
  								if(overlapping.containsAll(observation))
  									break;
  							}
  							else
  								intersection = intersectionNew;
  						}
  					}
  				}
  			}
  			if(overlappingAll.size() > 0){
  				Vector<Vector<SymbolicVariableActivity>> retActivities = new Vector<Vector<SymbolicVariableActivity>>();
  				Vector<SymbolicVariableActivity>  current = overlappingAll.get(0);
  				for (int i = 1; i < overlappingAll.size(); i++) {
  					if(!isEqual(current, overlappingAll.get(i))){
  						retActivities.add(current);
  						current = overlappingAll.get(i);
  					}
  				}
  				retActivities.add(current);
  
  				for (Vector<SymbolicVariableActivity> actVec : retActivities) {
  					ConstraintNetwork tmp = new ConstraintNetwork(null);
  					for (SymbolicVariableActivity act : actVec){
  						tmp.addVariable(act);
  					}
  					ret.add(tmp);					
  				}
  
  				//				System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
  				//				for (int i = 0; i < ret.size(); i++) {
  				//					System.out.println("ret: " + ret);
  				//				}
  				//				System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
  
  				//				return new ConstraintNetwork[]{ret.size()};
  				return ret.toArray(new ConstraintNetwork[ret.size()]);
  			}
  		}
  		return (new ConstraintNetwork[0]);
  	}