private void sortDACSpartitions(OneMutation mutArray[], int initDepth, int majorSplitPos[], int numPartitions[], 
			PrunedRotamers<Boolean> prunedRotAtRes, Index3 indexMap[][], int numMutable, int strandMut[][],
			double pruningE, double initEw, RotamerSearch rsP) {
		
		RotamerSearch rs = rsP; //no changes should be made to the original RotamerSearch object
		rsP = null;
		
		System.out.print("Computing a lower bound on the conformational energy for each partition..");
		for (int m=0; m<mutArray.length; m++){ //for each partition
			
			if(m%100 == 0)
				System.out.println("Starting Partition.. "+m+" out of "+mutArray.length+" ");
			
			PrunedRotamers<Boolean> prunedForPartition = new PrunedRotamers<Boolean>(prunedRotAtRes,false); //no changes should be made to prunedRotAtRes[]
			Iterator<RotInfo<Boolean>> iter1 = prunedRotAtRes.iterator();
			while(iter1.hasNext()){
				RotInfo<Boolean> ri = iter1.next();
				prunedForPartition.set(ri, new Boolean(ri.state));
			}
			//System.arraycopy(prunedRotAtRes, 0, prunedForPartition, 0, prunedRotAtRes.length);
			
			mutArray[m].setSortScores(true); //sort by lower bounds
			
			//artificially set to pruned all rotamers at the splitting position, other than the current partitioning rotamer for the given partitioning position
			for (int i=0; i<initDepth; i++){ //first, set all other rotamers for the partitioning positions to pruned
				Index3 curPart = mutArray[m].index[i];
				for (int j=0; j<numPartitions[i]; j++){
					Index3 curInd = indexMap[i][j];					
					if (curInd!=curPart) { //not the rotamer for the current partition
						if (!prunedForPartition.get(curInd)) //rotamer not already pruned
							prunedForPartition.set(curInd, true);
					}
				}
			}
			
			//compute a lower bound on the conformational energies for this partition
			rs.DoMinBounds(numMutable,strandMut,pruningE,prunedForPartition,initEw, false, false, true);
			mutArray[m].score = new BigDecimal(rs.getBoundForPartition());
		}
		System.out.println("done");
		
		//sort the partitions
		System.out.print("Sorting partitions by their lower energy bounds..");
		//RyanQuickSort rqs = new RyanQuickSort();
		//rqs.Sort(mutArray);
		//rqs = null;
		Arrays.sort(mutArray);
		System.out.println("done");
		System.out.println("MinBoundOfMinPartition: "+mutArray[0].score);
	}