C-----------------------------------------------------------------------
      Function LHAISA (slhadata)
C-----------------------------------------------------------------------

C     SLHA2Lib -> ISAJET interface
C     
C     This functions fills ISAJET common blocks with (N)MSSM parameters 
C     read by SLHA2Lib
C
C     Usage: 
C     - Read the SLAH2Lib manual
C     - Include the following among the declarations of the function that
C       calls this function:
C#include "SLHA.h"
C	integer error
C	double complex slhadata(nslhadata)
C	character*80 argv
C     - Read a spectrum or decay file the function that calls this 
C       function as:
C       call SLHARead(error, slhadata, 'LSHAFile.dat', 1)
C     - Call this function:
C       iLHAISA = LHAISA (slhadata)
C
C     C. Balazs, Aug. 8 2007, v1.0

      Implicit None

CsB   Local variables --- begin ----------------------------------------

      Integer LHAISA
      Integer I1,I2,J1,J2, ii,jj,kk
      Real sg

CsB   Local variables --- end ------------------------------------------
CsB   SLHAlib 2.1 common blocks --- begin ------------------------------

CsB > SLHALib common blocks begin
#include "SLHA.h"

	integer error
	double complex slhadata(nslhadata)

CsB   SLHAlib 2.1 common blocks --- end --------------------------------
CsB   ISAJET 7.69 common blocks --- begin ------------------------------

C     XSUGIN contains the inputs to SUGRA:
C     XSUGIN(1) = M_0        XSUGIN(2) = M_(1/2)  XSUGIN(3) = A_0
C     XSUGIN(4) = tan(beta)  XSUGIN(5) = sgn(mu)  XSUGIN(6) = M_t
C     XSUGIN(7) = SUG BC scale
C     XGMIN(1) = LAM         XGMIN(2)  = M_MES    XGMIN(3)  = XN5
C     XGMIN(4) = tan(beta)   XGMIN(5)  = sgn(mu)  XGMIN(6) = M_t
C     XGMIN(7) = CGRAV       XGMIN(8)  =RSL       XGMIN(9)  = DEL_HD
C     XGMIN(10)  = DEL_HU    XGMIN(11) = DY       XGMIN(12) = N5_1
C     XGMIN(13)  = N5_2      XGMIN(14) = N5_3
C     XNRIN(1) = M_N3        XNRIN(2) = M_MAJ     XNRIN(3) = ANSS 
C     XNRIN(4) = M_N3SS
C     XISAIN contains the MSSMi inputs in natural order.
      COMMON /SUGXIN/ XISAIN(24),XSUGIN(7),XGMIN(14),XNRIN(4),
     $XAMIN(7)
      REAL XISAIN,XSUGIN,XGMIN,XNRIN,XAMIN
      SAVE /SUGXIN/
C          Frozen couplings from RG equations:
C     GSS( 1) = g_1        GSS( 2) = g_2        GSS( 3) = g_3
C     GSS( 4) = y_tau      GSS( 5) = y_b        GSS( 6) = y_t
C     GSS( 7) = M_1        GSS( 8) = M_2        GSS( 9) = M_3
C     GSS(10) = A_tau      GSS(11) = A_b        GSS(12) = A_t
C     GSS(13) = M_hd^2     GSS(14) = M_hu^2     GSS(15) = M_er^2
C     GSS(16) = M_el^2     GSS(17) = M_dnr^2    GSS(18) = M_upr^2
C     GSS(19) = M_upl^2    GSS(20) = M_taur^2   GSS(21) = M_taul^2
C     GSS(22) = M_btr^2    GSS(23) = M_tpr^2    GSS(24) = M_tpl^2
C     GSS(25) = mu         GSS(26) = B          GSS(27) = Y_N
C     GSS(28) = M_nr       GSS(29) = A_n        GSS(30) = vdq
C     GSS(31) = vuq
C          Masses:
C     MSS( 1) = glss     MSS( 2) = upl      MSS( 3) = upr
C     MSS( 4) = dnl      MSS( 5) = dnr      MSS( 6) = stl
C     MSS( 7) = str      MSS( 8) = chl      MSS( 9) = chr
C     MSS(10) = b1       MSS(11) = b2       MSS(12) = t1
C     MSS(13) = t2       MSS(14) = nuel     MSS(15) = numl
C     MSS(16) = nutl     MSS(17) = el-      MSS(18) = er-
C     MSS(19) = mul-     MSS(20) = mur-     MSS(21) = tau1
C     MSS(22) = tau2     MSS(23) = z1ss     MSS(24) = z2ss
C     MSS(25) = z3ss     MSS(26) = z4ss     MSS(27) = w1ss
C     MSS(28) = w2ss     MSS(29) = hl0      MSS(30) = hh0
C     MSS(31) = ha0      MSS(32) = h+
C          Unification:
C     MGUTSS  = M_GUT    GGUTSS  = g_GUT    AGUTSS  = alpha_GUT
      COMMON /SUGMG/ MSS(32),GSS(31),MGUTSS,GGUTSS,AGUTSS,FTGUT,
     $FBGUT,FTAGUT,FNGUT
      REAL MSS,GSS,MGUTSS,GGUTSS,AGUTSS,FTGUT,FBGUT,FTAGUT,FNGUT
      SAVE /SUGMG/
      
      COMMON/SSPAR/AMGLSS,AMULSS,AMURSS,AMDLSS,AMDRSS,AMSLSS
     $,AMSRSS,AMCLSS,AMCRSS,AMBLSS,AMBRSS,AMB1SS,AMB2SS
     $,AMTLSS,AMTRSS,AMT1SS,AMT2SS,AMELSS,AMERSS,AMMLSS,AMMRSS
     $,AMLLSS,AMLRSS,AML1SS,AML2SS,AMN1SS,AMN2SS,AMN3SS
     $,TWOM1,RV2V1,AMZ1SS,AMZ2SS,AMZ3SS,AMZ4SS,ZMIXSS(4,4)
     $,AMW1SS,AMW2SS
     $,GAMMAL,GAMMAR,AMHL,AMHH,AMHA,AMHC,ALFAH,AAT,THETAT
     $,AAB,THETAB,AAL,THETAL,AMGVSS,MTQ,MBQ,MLQ,FBMA,
     &VUQ,VDQ
      REAL AMGLSS,AMULSS,AMURSS,AMDLSS,AMDRSS,AMSLSS
     $,AMSRSS,AMCLSS,AMCRSS,AMBLSS,AMBRSS,AMB1SS,AMB2SS
     $,AMTLSS,AMTRSS,AMT1SS,AMT2SS,AMELSS,AMERSS,AMMLSS,AMMRSS
     $,AMLLSS,AMLRSS,AML1SS,AML2SS,AMN1SS,AMN2SS,AMN3SS
     $,TWOM1,RV2V1,AMZ1SS,AMZ2SS,AMZ3SS,AMZ4SS,ZMIXSS
     $,AMW1SS,AMW2SS
     $,GAMMAL,GAMMAR,AMHL,AMHH,AMHA,AMHC,ALFAH,AAT,THETAT
     $,AAB,THETAB,AAL,THETAL,AMGVSS,MTQ,MBQ,MLQ,FBMA,VUQ,VDQ
      REAL AMZISS(4)
      EQUIVALENCE (AMZISS(1),AMZ1SS)
      SAVE /SSPAR/

CsB   COMMON /SUGPAS/ XTANB,MSUSY,AMT,MGUT,MU,G2,GP,V,VP,XW,
      COMMON /SUGPAS/ XTANB,MSUSY,AMT,MGUT,musugra,G2,GP,V,VP,XW,
     $A1MZ,A2MZ,ASMZ,FTAMZ,FBMZ,B,SIN2B,FTMT,G3MT,VEV,HIGFRZ,
     $FNMZ,AMNRMJ,NOGOOD,IAL3UN,ITACHY,MHPNEG,ASM3,
     $VUMT,VDMT,ASMTP,ASMSS,M3Q
CsB   REAL XTANB,MSUSY,AMT,MGUT,MU,G2,GP,V,VP,XW,
      REAL XTANB,MSUSY,AMT,MGUT,musugra,G2,GP,V,VP,XW,
     $A1MZ,A2MZ,ASMZ,FTAMZ,FBMZ,B,SIN2B,FTMT,G3MT,VEV,HIGFRZ,
     $FNMZ,AMNRMJ,ASM3,VUMT,VDMT,ASMTP,ASMSS,M3Q
      INTEGER NOGOOD,IAL3UN,ITACHY,MHPNEG
      SAVE /SUGPAS/

C          Standard model parameters
C          AMUP,...,AMTP        = quark masses
C          AME,AMMU,AMTAU       = lepton masses
C          AMW,AMZ              = W,Z masses
C          GAMW,GAMZ            = W,Z widths
C          ALFAEM,SN2THW,ALFA3  = SM couplings
C          ALQCD4               = 4 flavor lambda
      COMMON/SSSM/AMUP,AMDN,AMST,AMCH,AMBT,AMTP,AME,AMMU,AMTAU
     $,AMW,AMZ,GAMW,GAMZ,ALFAEM,SN2THW,ALFA2,ALFA3,ALQCD4
      REAL AMUP,AMDN,AMST,AMCH,AMBT,AMTP,AME,AMMU,AMTAU
     $,AMW,AMZ,GAMW,GAMZ,ALFAEM,SN2THW,ALFA2,ALFA3,ALQCD4
      SAVE /SSSM/

      COMMON/CONST/PI,SQRT2,ALFA,GF,UNITS
      SAVE /CONST/
      REAL      PI,SQRT2,ALFA,GF,UNITS
CsB   ISAJET 7.69 common blocks --- end --------------------------------

C     Print *, ' Function LHAISA begin'
      LHAISA = 0

CsB   SM input parameters
c     ALEMI = DReal(SMInputs_AlfaMZ)  ! 'alpha_em^(-1)' ! (MZ) SM MSbar'
      GF    = DReal(SMInputs_GF)      ! 'G_Fermi'
c     AS    = DReal(SMInputs_AlfasMZ) ! 'alpha_s(M_Z)'
      AMZ   = DReal(SMInputs_MZ)      ! 'm_{Z}(pole)'
c     MBMB  = DReal(SMInputs_Mf(4,3)) ! 'm_{b}(m_{b})'
      AMTP  = DReal(SMInputs_Mf(3,3)) ! 'm_{top}(pole)'
      AMTAU = DReal(SMInputs_Mf(2,3)) ! 'm_{tau}(pole)'

CsB   MSSM GUT scale input
      XSUGIN(1) = DReal(MinPar_M0)      ! 'm_0'
      XSUGIN(2) = DReal(MinPar_M12)     ! 'm_{1/2}'
      XSUGIN(4) = DReal(MinPar_TB)      ! 'tan(beta)'
      XSUGIN(5) = DReal(MinPar_signMUE) ! 'sign(mu)'
      XSUGIN(3) = DReal(MinPar_A)       ! 'A_0'

      MSUSY  = DReal(ExtPar_Q)          ! 'SUSY scale' 
      HIGFRZ = MSUSY

CsB   SM mass parameters
      AMW  = DReal(Mass_MW)
      AMZ  = DReal(SMInputs_MZ)
c     AMTP = DReal(Mass_Mf(3,3))

CsB   cf. hep-ph/0605049 p5
      MSS( 1) = DReal(Mass_MGl)        ! glss 
      MSS( 2) = DReal(Mass_MSf(1,3,1)) ! upl  (cf. also hep-ph/0605049 p2)
      MSS( 3) = DReal(Mass_MSf(2,3,1)) ! upr
      MSS( 4) = DReal(Mass_MSf(1,4,1)) ! dnl 
      MSS( 5) = DReal(Mass_MSf(2,4,1)) ! dnr 
      MSS( 6) = DReal(Mass_MSf(1,4,2)) ! stl
      MSS( 7) = DReal(Mass_MSf(2,4,2)) ! str 
      MSS( 8) = DReal(Mass_MSf(1,3,2)) ! chl 
      MSS( 9) = DReal(Mass_MSf(2,3,2)) ! chr
      MSS(10) = DReal(Mass_MSf(1,4,3)) ! b1
      MSS(11) = DReal(Mass_MSf(2,4,3)) ! b2  
      MSS(12) = DReal(Mass_MSf(1,3,3)) ! t1
      MSS(13) = DReal(Mass_MSf(2,3,3)) ! t2  
      MSS(14) = DReal(Mass_MSf(1,1,1)) ! nuel
      MSS(15) = DReal(Mass_MSf(1,1,2)) ! numl
      MSS(16) = DReal(Mass_MSf(1,1,3)) ! nutl
      MSS(17) = DReal(Mass_MSf(1,2,1)) ! el- 
      MSS(18) = DReal(Mass_MSf(2,2,1)) ! er-
      MSS(19) = DReal(Mass_MSf(1,2,2)) ! mul-
      MSS(20) = DReal(Mass_MSf(2,2,2)) ! mur-
      MSS(21) = DReal(Mass_MSf(1,2,3)) ! tau1
      MSS(22) = DReal(Mass_MSf(2,2,3)) ! tau2
      MSS(23) = DReal(Mass_MNeu(1))    ! z1ss
      MSS(24) = DReal(Mass_MNeu(2))    ! z2ss
      MSS(25) = DReal(Mass_MNeu(3))    ! z3ss
      MSS(26) = DReal(Mass_MNeu(4))    ! z4ss
      MSS(27) = DReal(Mass_MCha(1))    ! w1ss
      MSS(28) = DReal(Mass_MCha(2))    ! w2ss
      MSS(29) = DReal(Mass_Mh0)        ! hl0 
      MSS(30) = DReal(Mass_MHH)        ! hh0
      MSS(31) = DReal(Mass_MA0)        ! ha0 
      MSS(32) = DReal(Mass_MHp)        ! h+

CsB   This is from ISALHA in ISAJET 7.74:
CsB   For the gaugino mixing matrices I follow ISAWIG1200 to the letter
CsB   Ascending mass order (rows) and in the order 
C     (bino, w3ino, higgs1, higgs2) (columns)
      DO I1=1,4
        DO I2=1,4
           sg = 1.
           If (I2.GT.2) sg = -1.
           J1 = 5 - I2
           J2 = I1
C         WRITE(LOUT,7021) I1, I2, sg*ZMIXSS(J1,J2)
          ZMIXSS(J1,J2) = sg*DReal(NMix_ZNeu(I1,I2))
        EndDo
      EndDo

C     cf. lines around "'UMIX','chargino U mixing matrix'" in ISAJET 7.74
c     THX = SIGN(-UMix_UCha(1,1),UMix_UCha(2,2))
c     THY = SIGN(-VMix_VCha(1,1),VMix_VCha(2,2))
      GAMMAL = DACos(DReal(-UMix_UCha(1,2)))
      GAMMAR = DACos(DReal(-VMix_VCha(1,2)))

C     cf. lines around "'STOPMIX','stop mixing matrix'" in ISAJET 7.74
      THETAT = DACos(DReal(StopMix_USf(1,1)))
      THETAB = DACos(DReal(SbotMix_USf(1,1)))
      THETAL = DACos(DReal(StauMix_USf(1,1)))

C     Higgs mixing angle
      ALFAH = -DReal(Alpha_Alpha)

C     Higgs mixing parameters
      muSuGra = DReal(HMix_MUE)             ! 'mu(Q)'
      XtanB   = DReal(HMix_TB)              ! 'tan(beta)(M_{GUT})'
      VEV     = DReal(HMix_VEV/Sqrt(2.))    ! 'Higgs vev at Q'
c     MSS(31) = DReal(Sqrt(HMix_MA02))      ! 'm_A(Q)'

C     Gauge and Yukawa couplings at low scale
      GSS( 1) = DReal(Gauge_g1/SQRT(.6)) ! 'g`'
      GSS( 2) = DReal(Gauge_g2)          ! 'g_2'
      GSS( 3) = DReal(Gauge_g3)          ! 'g_3'
      GSS( 6) = DReal(Yu_Yf(3,3))        ! 'y_t' 
      GSS( 5) = DReal(Yd_Yf(3,3))        ! 'y_b'
      GSS( 4) = DReal(Ye_Yf(3,3))        ! 'y_tau'
      GSS( 7) = DReal(MSoft_M1)          ! 'M_1'
      GSS( 8) = DReal(MSoft_M2)          ! 'M_2'
      GSS( 9) = DReal(MSoft_M3)          ! 'M_3'
      GSS(10) = DReal(Ae_Atau)           ! 'A_e', 'A_mu', 'A_tau'
      GSS(11) = DReal(Ad_Ab)             ! 'A_d', 'A_s', 'A_b'
      GSS(12) = DReal(Au_At)             ! 'A_u', 'A_c', 'A_t'
      GSS(13) = DReal(MSoft_MHd2)**2     ! M_hd^2    
      GSS(14) = DReal(MSoft_MHu2)**2     ! M_hu^2    
      GSS(15) = DReal(MSoft_MSE(1))**2   ! M_er^2
      GSS(16) = DReal(MSoft_MSL(1))**2   ! M_el^2    
      GSS(17) = DReal(MSoft_MSD(1))**2   ! M_dnr^2   
      GSS(18) = DReal(MSoft_MSU(1))**2   ! M_upr^2
      GSS(19) = DReal(MSoft_MSQ(1))**2   ! M_upl^2   
      GSS(20) = DReal(MSoft_MSE(3))**2   ! M_taur^2  
      GSS(21) = DReal(MSoft_MSL(3))**2   ! M_taul^2
      GSS(22) = DReal(MSoft_MSD(3))**2   ! M_btr^2   
      GSS(23) = DReal(MSoft_MSU(3))**2   ! M_tpr^2   
      GSS(24) = DReal(MSoft_MSQ(3))**2   ! M_tpl^2
c     GSS(25) =  ! mu        
c     GSS(26) =  ! B         
c     GSS(27) =  ! Y_N
c     GSS(28) =  ! M_nr      
c     GSS(29) =  ! A_n       
c     GSS(30) =  ! vdq
c     GSS(31) =  ! vuq

C     Fill ISAJET common block SSPAR
      AMGLSS = DReal(Mass_MGl)        ! glss 
      AMULSS = DReal(Mass_MSf(1,3,1)) ! upl  
      AMURSS = DReal(Mass_MSf(2,3,1)) ! upr  
      AMDLSS = DReal(Mass_MSf(1,4,1)) ! dnl  
      AMDRSS = DReal(Mass_MSf(2,4,1)) ! dnr  
      AMSLSS = DReal(Mass_MSf(1,4,2)) ! stl  
      AMSRSS = DReal(Mass_MSf(2,4,2)) ! str  
      AMCLSS = DReal(Mass_MSf(1,3,2)) ! chl  
      AMCRSS = DReal(Mass_MSf(2,3,2)) ! chr  
c     AMBLSS 
c     AMBRSS 
      AMB1SS = DReal(Mass_MSf(1,4,3)) ! b1   
      AMB2SS = DReal(Mass_MSf(2,4,3)) ! b2   
c     AMTLSS 
c     AMTRSS 
      AMT1SS = DReal(Mass_MSf(1,3,3)) ! t1   
      AMT2SS = DReal(Mass_MSf(2,3,3)) ! t2   
      AMELSS = DReal(Mass_MSf(1,2,1)) ! el-  
      AMERSS = DReal(Mass_MSf(2,2,1)) ! er-  
      AMMLSS = DReal(Mass_MSf(1,2,2)) ! mul- 
      AMMRSS = DReal(Mass_MSf(2,2,2)) ! mur- 
      AMLLSS = DReal(Mass_MSf(1,2,3)) ! tau1 
      AMLRSS = DReal(Mass_MSf(2,2,3)) ! tau2 
c     AML1SS 
c     AML2SS 
      AMN1SS = DReal(Mass_MSf(1,1,1)) ! nuel 
      AMN2SS = DReal(Mass_MSf(1,1,2)) ! numl 
      AMN3SS = DReal(Mass_MSf(1,1,3)) ! nutl 
c     TWOM1  
c     RV2V1  
      AMZ1SS = DReal(Mass_MNeu(1))    ! z1ss
      AMZ2SS = DReal(Mass_MNeu(2))    ! z2ss
      AMZ3SS = DReal(Mass_MNeu(3))    ! z3ss
      AMZ4SS = DReal(Mass_MNeu(4))    ! z4ss                           
      AMW1SS = DReal(Mass_MCha(1))    ! w1ss
      AMW2SS = DReal(Mass_MCha(2))    ! w2ss
      AMHL   = DReal(Mass_Mh0)        ! hl0 
      AMHH   = DReal(Mass_MHH)        ! hh0 
      AMHA   = DReal(Mass_MA0)        ! ha0 
      AMHC   = DReal(Mass_MHp)        ! h+  

c     AAT
c     AAB
c     AAL
c
c     AMGVSS
c     MTQ
c     MBQ
c     MLQ
c     FBMA
c     
c     VUQ
c     VDQ

CsB   NMSSM case
!     Print *, ' ModSel_Model,ModSel_Content:', 
!    ,           ModSel_Model,ModSel_Content
      If (DReal(ModSel_Content).Eq.1.) then ! WARNING: This isn't SLHA2 compatible ! 
        muSuGra = DReal(ExtPar_MUEeff) ! 'mu_eff'
        If      (Abs(DReal(NMHMix_UH(1,1))/
     /               DReal(NMHMix_UH(2,2))).GT.(0.9) .And.
     .           Abs(DReal(NMHMix_UH(1,1))/
     /               DReal(NMHMix_UH(2,2))).LT.1.1 ) then
           ii = 1
           jj = 2
           kk = 2
        Else If (Abs(DReal(NMHMix_UH(1,1))/
     /            DReal(NMHMix_UH(3,2))).GT.(0.9) .And.
     .        Abs(DReal(NMHMix_UH(1,1))/
     /            DReal(NMHMix_UH(3,2))).LT.1.1 ) then
           ii = 1
           jj = 2
           kk = 3
        End If
        If (Sign(DReal(NMHMix_UH(ii,ii)),
     ,           DReal(NMHMix_UH(kk,jj))).GT.0.) then
          ALFAH = ASin( Sign(1.,DReal(NMHMix_UH(ii,ii)))*
     *                          DReal(NMHMix_UH(ii,jj)) )
        Else
          ALFAH = ASin(-Sign(1.,DReal(NMHMix_UH(kk,ii)))*
     *                          DReal(NMHMix_UH(ii,jj)) )
        End If
!       Print*, ' Filling NMSSM mixings...'
        DO I1=1,4
          DO I2=1,4
             sg = 1.
             If (I2.GT.2) sg = -1.
             J1 = 5 - I2
             J2 = I1
C           WRITE(LOUT,7021) I1, I2, sg*ZMIXSS(J1,J2)
            ZMIXSS(J1,J2) = sg*DReal(NMNMix_ZNeu(I1,I2))
          EndDo
        EndDo
      End If

      LHAISA = 1

CsB   Diagnosis, testing
c     Print*, ' MSS(29)-MSS(32):', MSS(29),MSS(30),MSS(31),MSS(32)
c     Print*, ' SMInputs_Mf(3,3):', DReal(SMInputs_Mf(3,3))

      Return
      End
