class RingInput 
{
  public:
    int NLResonator ;
    int NAcceleration ;
    int NTResonator ;
    int NLDevice ;
    int NTDevice ;
    int NumOfMonitorBunch ;
    int MonBunchNo[NBunchMAX] ;

    double Current ;
    int NTurn ;
    int SamplingStep ; 
    int TDamping ;
    int CBISTOP ; 
};

class CurrentInput 
{
  public:
    double SettlingTime, RiseTime, CurrentMax ;
};

class BeamInput 
{
  public:
    int NBunch, NBunchNonZeroQ ;
    double a0, ap0, de0, tau0, E0  ;
    double a_rms0, ap_rms0, de_rms0, tau_rms0  ;
    double NuBeta0 ;
};

class BunchInput 
{
  public:
    int NParticle ;
    double a_rms0, ap_rms0, de_rms0, tau_rms0 ;
};

class LatticeInput 
{
 public:
  double Eref, Tref, NuBeta0, Eta, Je ;
  double Chrom0, Chrom1, FreqChrom1, PhaseChrom1 ;
  double DNuDa2 ;  
  double U0, Uid ;
  double de_rms_Natural, Emittance_Natural ;
  int LDamping, LExcitation ; 
  int TExcitation ; 
} ;

class ResoInput
{
 public:
  double RperQ, Q, FreqRes ;
  double Beta, Alpha, Gamma ; 
  double NuBeta0 ;
} ;

class AccInput 
{
 public:
  double Vg0, FreqAcc, Phase ;
  int Harmonics ;
  double Je ; 
  int TDamping ;
} ;

class LDeviceInput 
{
 public:
  char Name[20] ;
  double Param1, Param2, Param3 ; 
  double Tref ;
  int AccHarmonics ;
} ;

class TDeviceInput 
{
 public:
  char Name[20] ;
  double Param1, Param2, Param3 ; 
  double Beta, Alpha, NuBeta0 ; 
  double Tref ;
} ;

class GaussianDistInput  
{
 public:
    int long iseed ;
} ;
