function Catchment_all(Par_fix,Par,forcing,Temp,H3Cat_WE,H3Cat_lanper,H3Catpre_per)
    @eval using Statistics
    @eval using StatsBase
  @eval using LinearAlgebra
include("Prezone_Cs")
# include("Prezone")
# ParCat=Par_fix[1:5]
# ParForest_fix=Par_fix[6:10]
# ParGrassland_fix=Par_fix[11:14]
# ParWetland=Par[15:16]
# ParForest=Par[1]
# ParGrassland=Par[2]
# ParWetland=Par[3]

forcing_pre1 = forcing[:,[4;6:7]]#check
forcing_pre2 = forcing[:,[9;11:12]]#check
forcing_pre3 = forcing[:,[14;16:17]]#check

# tmax=length(Qo)
# WE_pre1 = WE[:,2:4]
# WE_pre2 = WE[:,5:7]
# WE_pre3 = WE[:,8:10]
# WE_pre4 = WE[:,11:13]

H3Cat_WE_pre1 = H3Cat_WE[:,2:4]
H3Cat_WE_pre2 = H3Cat_WE[:,5:7]
H3Cat_WE_pre3 = H3Cat_WE[:,8:10]

# landscape_per_pre1 = landscape_per[:,1]
# landscape_per_pre2 = landscape_per[:,2]
# landscape_per_pre3 = landscape_per[:,3]
# landscape_per_pre4 = landscape_per[:,4]

H3Cat_lanper_pre1 = H3Cat_lanper[:,1]
H3Cat_lanper_pre2 = H3Cat_lanper[:,2]
H3Cat_lanper_pre3 = H3Cat_lanper[:,3]

triresult1=prezone_Cs(Par_fix,Par,forcing_pre1,Temp,H3Cat_WE_pre1,H3Cat_lanper_pre1)
triresult2=prezone_Cs(Par_fix,Par,forcing_pre2,Temp,H3Cat_WE_pre2,H3Cat_lanper_pre2)
triresult3=prezone_Cs(Par_fix,Par,forcing_pre3,Temp,H3Cat_WE_pre3,H3Cat_lanper_pre3)

# Qm_tri=triresult1[1].*H3Catpre_per[1]+triresult2[1].*H3Catpre_per[2]+triresult3[1].*H3Catpre_per[3]
# Con_Qm_tri=(triresult1[1].*triresult1[2].*H3Catpre_per[1]+triresult2[1].*triresult2[2].*H3Catpre_per[2]+triresult3[1].*triresult3[2].*H3Catpre_per[3])./Qm_tri
Su=triresult1[1].*H3Catpre_per[1]+triresult2[1].*H3Catpre_per[2]+triresult3[1].*H3Catpre_per[3]
Sf=triresult1[2].*H3Catpre_per[1]+triresult2[2].*H3Catpre_per[2]+triresult3[2].*H3Catpre_per[3]
Qf=triresult1[3].*H3Catpre_per[1]+triresult2[3].*H3Catpre_per[2]+triresult3[3].*H3Catpre_per[3]
Qs=triresult1[4].*H3Catpre_per[1]+triresult2[4].*H3Catpre_per[2]+triresult3[4].*H3Catpre_per[3]
 # E=triresult1[1].*H3Catpre_per[1]+triresult2[1].*H3Catpre_per[2]+triresult3[1].*H3Catpre_per[3]
 # Ss=triresult1[1].*H3Catpre_per[1]+triresult2[1].*H3Catpre_per[2]+triresult3[1].*H3Catpre_per[3]



return (Su,Sf,Qf,Qs)
# (NS_Q,NS_LOGQ,NS_FDCLOG,NS_AC,NS_RC,RE_RC_SA,RE_RC_SW,NS_Con)
 #,MSE_FDCLOG,MSE_RC,MSE_PD,MSE_RLD,MSE_DLD,MSE_AC  MSE_Con,
end












# P_cat=forcing_pre1[:,1].*H3Catpre_per[1]+forcing_pre2[:,1].*H3Catpre_per[2]+forcing_pre3[:,1].*H3Catpre_per[3]
#
# #for1953-2022
# Qo=forcing[1097:end,5]
# Con_Qo=forcing[10229:end,8]
#
# Con_Qm=Con_Qm_tri[10229:end]#from1979:3288;FROM1991:7671;from2000: 10958;from2001-10：11597
# P_cat=P_cat[1036:end]
# Qm=Qm_tri[1097:end]
#
# #for1953-1972
#  # Qo=forcing[1097:8401,5]
#  # Con_Qo=forcing[10229:end,8]
#  #
#  # Con_Qm=Con_Qm_tri[10229:end]#from1979:3288;FROM1991:7671;from2000: 10958;from2001-10：11597
#  # P_cat=P_cat[1036:8401]
#  # Qm=Qm_tri[1097:8401]
#
#  #for1973-1992
#   # Qo=forcing[8402:15706,5]
#   # Con_Qo=forcing[10229:end,8]
#   #
#   # Con_Qm=Con_Qm_tri[10229:end]#from1979:3288;FROM1991:7671;from2000: 10958;from2001-10：11597
#   # P_cat=P_cat[8341:15706]
#   # Qm=Qm_tri[8402:15706]
#
#   #for1993-2012
#    # Qo=forcing[15707:23011,5]
#    # Con_Qo=forcing[10229:end,8]
#    #
#    # Con_Qm=Con_Qm_tri[10229:end]#from1979:3288;FROM1991:7671;from2000: 10958;from2001-10：11597
#    # P_cat=P_cat[15646:23011]
#    # Qm=Qm_tri[15707:23011]
#
#    #for2013-2022
#     # Qo=forcing[23012:end,5]
#     # Con_Qo=forcing[10229:end,8]
#     #
#     # Con_Qm=Con_Qm_tri[10229:end]#from1979:3288;FROM1991:7671;from2000: 10958;from2001-10：11597
#     # P_cat=P_cat[22951:end]
#     # Qm=Qm_tri[23012:end]
#
#  ind1=findall(x->x>0,Qm)
#  # MSE_Q=msd(Qm[ind1],Qo[ind1])#obj1
#  errorup=sum((Qm[ind1]-Qo[ind1]).^2)
#  errordown=sum((Qo[ind1].-mean(Qo[ind1])).^2)
#  #DE's function: mean((1-NS)^2), 1-NS=up/down,lower, the better
#  NS_Q=errorup/errordown#here means not the real NS, is 1-NS
#
#  # errorup=sum((Qm[ind1]-Qo[ind1]).^2)
#  # errordown=sum((Qo[ind1].-mean(Qo[ind1])).^2)
#  # NS_Q=errorup/errordown
# # ind2=findall(x->!isnan(x),Con_Qo)
#  mm=forcing[10229:end,2]
#  ind2=findall(x->x!=0,diff(mm));
#  gap1=[0;ind2;length(mm)]
#  MonthCon_Qm_H3=zeros(length(gap1)-1,1);
#   # day_pre1_4[:,1:3]=pre_daily[:,1:3]
#   for j in 1:length(gap1)-1
#        index1=gap1[j]+1:gap1[j+1]
#
#        # MonthCon_Qm_H3[j]=mean(Con_Qm_H3[index1])
#        MonthCon_Qm_H3[j]=mean(Con_Qm[index1])
#     end
#     ind3=findall(x->x==15,forcing[10229:end,3])
#     Con_Qo=Con_Qo[ind3]
#     ind4=findall(x->!isnan(x),Con_Qo)
#    # MSE_Con=msd(MonthCon_Qm_H3[ind4],Con_Qo[ind4])
#    # error_con=MonthCon_Qm_H3[ind4]-Con_Qo[ind4]
#    #   MAE_Con= mean(abs,error_con)
#      errorup_Con=sum((MonthCon_Qm_H3[ind4]-Con_Qo[ind4]).^2)
#      errordown_Con=sum((Con_Qo[ind4].-mean(Con_Qo[ind4])).^2)
#      NS_Con=errorup_Con/errordown_Con
# # RMSE_Q= sqrt(MSE_Q)
#
# # MSE_LOGQ=msd(log.(Qm[ind1]),log.(Qo[ind1]))#obj2
# errorup=sum((log.(Qm[ind1])-log.(Qo[ind1])).^2)
# errordown=sum((log.(Qo[ind1]).-mean(log.(Qo[ind1]))).^2)
# NS_LOGQ=errorup/errordown
# # RMSE_LOGQ=sqrt(MSE_LOGQ)
# #Flow Duration Curve
# #Sort the data in descending order
# Qm_order=sort(Qm[ind1],rev = true)
# Qo_order=sort(Qo[ind1],rev = true)
# # Calculating the rank
# R_Qm=sortperm(Qm_order,rev = true)
# #Calculate the exceedence probability
# exceed_prob_Qm = [R_Qm[i]/length(Qm_order) for i in 1:length(Qm_order)]
# # MSE_FDCLOG=msd(log.(Qm_order),log.(Qo_order))#obj3
# errorup=sum((log.(Qm_order)-log.(Qo_order)).^2)
# errordown=sum((log.(Qo_order).-mean(log.(Qo_order))).^2)
# NS_FDCLOG=errorup/errordown
#
# # MSE_FDC=msd(Qm_order,Qo_order)#obj4
# #Runoff ratio (June_Nov,Dec_May)#obj5
# y=forcing[8341:15706,1]
# m=forcing[8341:15706,2]
# Qo_r=forcing[8341:15706,5]
# Qm_r=Qm_tri[8341:15706]
# ind5=findall(x->x==11,m);
# ind55=findall(x->x==12,m);
# y[ind5]=y[ind5].+1;
# y[ind55]=y[ind55].+1;
# m[ind5].=-1;
# m[ind55].=0;
#
# ind6=findall(x->x>0,diff(y));
# gap=[0;ind6];
# year=y[ind6];
# mean_season_Qo=zeros(length(year),2);
# mean_season_Qm=zeros(length(year),2);
# mean_season_P=zeros(length(year),2);
# for i in 1:length(year)
#     index=gap[i]+1:gap[i+1];
#     mm=m[index];
#     QQo=Qo_r[index];
#     QQm=Qm_r[index];
#     PP=P_cat[index];
#     ind7=findall(x->-1<=x<=4,mm);
#     ind8=findall(x->5<=x<=10,mm);
#     mean_season_Qo[i,1:2]=[mean(QQo[ind8]),mean(QQo[ind7])];
#     mean_season_Qm[i,1:2]=[mean(QQm[ind8]),mean(QQm[ind7])];
#     mean_season_P[i,1:2]=[mean(PP[ind8]),mean(PP[ind7])];
# end
# RC_SA_Qm=mean_season_Qm[:,1]./mean_season_P[:,1]
# RC_SW_Qm=mean_season_Qm[:,2]./mean_season_P[:,2]
# RC_SA_Qo=mean_season_Qo[:,1]./mean_season_P[:,1]
# RC_SW_Qo=mean_season_Qo[:,2]./mean_season_P[:,2]
# # MSE_RC_SA=msd(mean_season_Qm[:,1]./mean_season_P[:,1],mean_season_Qo[:,1]./mean_season_P[:,1])
# # MSE_RC_SW=msd(mean_season_Qm[:,2]./mean_season_P[:,2],mean_season_Qo[:,2]./mean_season_P[:,2])
# # MSE_RC=(MSE_RC_SA+MSE_RC_SW)/2#obj5
# RE_RC_SA=mean(abs,RC_SA_Qm-RC_SA_Qo)/mean(RC_SA_Qo)
# RE_RC_SW=mean(abs,RC_SW_Qm-RC_SW_Qo)/mean(RC_SW_Qo)
#
# errorup_SA=sum((RC_SA_Qm-RC_SA_Qo).^2)
# errordown_SA=sum((RC_SA_Qo.-mean(RC_SA_Qo+RC_SW_Qo)/2).^2)
# errorup_SW=sum((RC_SW_Qm-RC_SW_Qo).^2)
# errordown_SW=sum((RC_SW_Qo.-mean(RC_SA_Qo+RC_SW_Qo)/2).^2)
# NS_RC=(errorup_SA+errorup_SW)/(errordown_SA+errordown_SW)
#
# #Autocorrelation function of daily flow with time lags(from 1 to 100)
# AC_Qm=zeros(100,1)
# AC_Qo=zeros(100,1)
# for k in 1:100
#    AC_Qm_up=sum((Qm[1:(length(Qm)-k)].-mean(Qm)).*(Qm[(1+k):length(Qm)].-mean(Qm)))
#    AC_Qm[k]=AC_Qm_up/sum((Qm.-mean(Qm)).^2)
#    AC_Qo_up=sum((Qo[1:(length(Qo)-k)].-mean(Qo)).*(Qo[(1+k):length(Qo)].-mean(Qo)))
#    AC_Qo[k]=AC_Qo_up/sum((Qo.-mean(Qo)).^2)
# end
# # MSE_AC=msd(AC_Qm,AC_Qo)#obj8
# errorup=sum((AC_Qm-AC_Qo).^2)
# errordown=sum((AC_Qo.-mean(AC_Qo)).^2)
# NS_AC=errorup/errordown
# else
#   NS_Q=3.0
#    NS_Con=10.0
#   NS_LOGQ=3.0
#   NS_FDCLOG=3.0
#
#   RE_RC_SA=3.0
#   RE_RC_SW=3.0
#   # MSE_FDC=3.0
#   NS_RC=3.0
#   NS_AC=3.0
# end
