def METHOD_NAME(ipar,tab):
	### calculate Z, Ms, fgas, tau_sf based on input parameters
	if len(tab.shape) == 1: # in case only one row
		NN = 1
		KK = tab.shape[0] # the number of input galaxy properties
		tab = tab.reshape((1,KK))
	else:
		NN = tab.shape[0]
		KK = tab.shape[1]
	if len(ipar[ipar!=0]) != KK:
		print("ERROR: the number of input parameters mismatch the number of active parameters") # it sounds confusing
		return np.zeros(0)
	tab_tmp = np.zeros((NN,len(ipar)))
	X = np.zeros((NN,4))
	tab_tmp[:,:] = 1 # avoid RuntimeWarning
	j = 0
	for i in range(len(ipar)):
		if ipar[i] == 1 and i!=1:  #legacy: no Ms for particle-based data
			tab_tmp[:,i] = tab[:,j]
			j += 1
	Z = np.log10(tab_tmp[:,0]/0.0134)
	sfr = tab_tmp[:,2]
	Mg = tab_tmp[:,3]
	tau_sf = Mg/sfr # depletion time 
	X[:,0] = Z #legacy: no Ms for particle-based data
	X[:,3] = np.log10(tau_sf)
	X,_ = filt_gal_prop(X,ipar,[])
	return X