public void masterMutationSearchHelper(int depth, int maxDepth,
		int strandMut[][], Set<OneMutation> mutSet, double minVol, double maxVol, String curAAnames[], 
		double rotamerVolumes[][][]) {
	
		if (depth >= maxDepth) {
			// If we've arrived here then we're ready to
			//  compute a volume and approximate energy
			if(debug){
				System.out.print(".");
			}
			double curVolume = 0.0f;
			for (int i=0; i<maxDepth; i++){
				int str = mutRes2Strand[i];
				curVolume += rotamerVolumes[str][strandRot[str].rl.getAARotamerIndex(curAAnames[i])][0]; //use the rotamer with index 0
			}
			if ((curVolume > minVol) && (curVolume < maxVol)) {
				// Add mutation to mutation array
				OneMutation tMut = new OneMutation();
				assignAANums(strandMut);
				tMut.score = new BigDecimal("0.0");  // Added when aap removed 6/23/03
				tMut.resTypes = new String[maxDepth];
				for(int q=0;q<maxDepth;q++) {
					tMut.resTypes[q] = curAAnames[q];
				}
				tMut.vol = curVolume;
				/*if (curConfNum >= mutArray.length) {
					// If there's no space left, make space in mutArray
					OneMutation newArray[] = new OneMutation[mutArray.length + 5000];
					System.arraycopy(mutArray, 0, newArray, 0, mutArray.length);
					mutArray = newArray;
				}*/
				getNumConfForMut(tMut);
				mutSet.add(tMut);
				curConfNum++;
			}
			return;
		}

		// Check with allowed AAs
		int str = mutRes2Strand[depth];
		int strResNum = strandMut[str][mutRes2StrandMutIndex[depth]];
		
		
		for(int q=0;q<strandRot[str].getNumAllowable(strResNum);q++) {
			curAAnames[depth] = strandRot[str].rl.getAAName(strandRot[str].getIndexOfNthAllowable(strResNum,q));
			masterMutationSearchHelper(depth+1,maxDepth,strandMut,mutSet,minVol,maxVol,curAAnames,rotamerVolumes);
		}
	}