private String composeCommand() {
		outName = "result_" + System.currentTimeMillis() + ".tab";
		StringBuffer buffer = new StringBuffer("DC -verb");  // Working with verbose output
		
		// Add PDB-file name
		buffer.append(" -pdb ");
		buffer.append(pdbFile.getAbsolutePath());
		
		// Add RDC input file name
		buffer.append(" -inD ");
		buffer.append(rdcFile.getAbsolutePath());
		
		// Add output file name
		buffer.append(" -outD ");
		buffer.append(outName);
		
		// Give special treatment to the easy case of fixing Saupe components
		if(fixingSaupe) {
			buffer.append(" -saupe ");
			buffer.append(saupeString);
			return buffer.toString();
		}
		
		// If necessary specify tensor parameters to be fixed
		// Notice that Da and orientation should note be fixed simultaneously!
		if(fixingDa) {
			float scaledDa = Da / 21585.20f; // DC uses fractional Da, rather than Da in Hz
			buffer.append(" -dadr");
			buffer.append(" -da " + String.format("%.6e", scaledDa));
			if(fixingRh) 
				buffer.append(" -dr " + String.format("%.6e", scaledDa*Rh));
		} else if(fixingOrientation) {
			if(fixingRh) {
				// Fixing both orientation and rhombicity
				buffer.append(" -rotrh");
				buffer.append(" -rh " + String.format("%.3f", Rh));
			} else {
				// Fixing orientation only
				buffer.append(" -rot");				
			}
			buffer.append(" -psi " + String.format("%.2f", psi));
			buffer.append(" -theta " + String.format("%.2f", theta));
			buffer.append(" -phi " + String.format("%.2f", phi));
		}
		
		if(fixingDa && useInitialOrientation) {
			buffer.append(" -psi " + String.format("%.2f", initPsi));
			buffer.append(" -theta " + String.format("%.2f", initTheta));
			buffer.append(" -phi " + String.format("%.2f", initPhi));			
		}
		
		return buffer.toString();
	}