def METHOD_NAME(Shift,Array,Peak_Shifts,Peak_Heights,Width,Minimum_Height=0):
	"""
	Given a raman Shift and spectrum Array, with guesses for possible Peak_Shifts and Peak_Heights with a single guess for the Width, attempts to fit the peaks.
	Fits rejected if Height<Minimum_Height
	"""
	Number_Of_Peaks=len(Peak_Shifts)
	def Generate_Peak_Selections(Number,Options):
		Levels=Options-Number
		Output=[list(range(Options))]
		for i in range(Levels):
			New_Output=[]
			for j in Output:
				for k in range(len(j)):
					New=sorted(j[:k]+j[k+1:])
					if New not in New_Output:
						New_Output.append(New)
			Output=New_Output
		return Output
	while Number_Of_Peaks>0:
		Options=Generate_Peak_Selections(Number_Of_Peaks,len(Peak_Shifts))
		Parameters=[]
		for Option in Options:
			Initial=[0.]
			L_Bounds=[-np.inf]
			U_Bounds=[np.inf]
			for i in Option:
				Initial+=[Peak_Heights[i],Peak_Shifts[i],Width]
				L_Bounds+=[0,np.min(Shift),0]
				U_Bounds+=[np.inf,np.max(Shift),np.inf]
				#print Initial
			try:
				Params=spo.curve_fit(Multi_L_Constant,Shift,Array,Initial,bounds=(L_Bounds,U_Bounds))
				Params=[Params[0],np.sqrt(np.diag(Params[1]))]
				#print Params
				Fail=False
				n=1
				while n<len(Params[0]):
					if (Params[0][n]-Params[0][0])<Minimum_Height:
						Fail=True
					n+=3
				if True in (Params[0][1:]<np.abs(Params[1][1:])).tolist():
					Fail=True
				n=1
				while n<len(Params[0])-3:
					if (Params[0][n+2]+Params[0][n+5])>abs((Params[0][n+1]-Params[0][n+4])):
						Fail=True
					n+=3
				if Fail is False:
					Parameters.append(Params[0])
			except RuntimeError:
					Dump=None
		if len(Parameters)>0:
			Loss=[]
			for i in Parameters:
				Loss.append(np.sum(np.abs(Array-Multi_L_Constant(Shift,*i))))
			return Parameters[np.argmin(Loss)]
		Number_Of_Peaks-=1
	return None