class Ring
{
  private:
    int NElement ;
    Element* element[NElementMAX] ;

    int NLResonator, NAcceleration ;
    int NTResonator ;
    int NLattice ; 
    int NLDevice ;
    int NTDevice ; 
    LResonator lresonator[NLResonatorMAX] ;
    TResonator tresonator[NTResonatorMAX] ;
    Acceleration  acceleration[NAccelerationMAX] ;
    Lattice lattice[NLatticeMAX] ;

    LDevice ldevice[NLDeviceMAX] ;
    TDevice tdevice[NTDeviceMAX] ;

    int CBISTOP ; 
    int NumOfMonitorBunch ; 
    int MonBunchNo[NBunchMAX] ; 
    int MonBunch[NBunchMAX] ; 

    Beam beam ;
    Current current ;

    int TDamping ;

    double TBunch  ;
    double Time ;
    int NTurn, SamplingStep ;
    int TurnNo, BunchNo ;
     int OKL_1, OKL_10, OKT_1, OKT_10 ;
     double de_rms1, de_rms10, de_rms100 , tL_1, tL_10, tL_100, grate_L ; 
     double Amp1,  Amp10,  Amp100  , tT_1, tT_10, tT_100, grate_T ; 
   
     int OUT_L ;
     int OUT_T  ;

  public:
    int get_NTurn(){ return NTurn ; } ;

    void InputData( Input input ) ;
    void SetData() ;
    void Initialize( Input input ) ;
    void Turn() ;
    void Output() ;
    void CBIOUT() ;
    void OutputPerTurn( Bunch* bunch, int BunchNo ) ; 
    void SnapShot( Bunch* bunch, int BunchNo, double Time ) ; 
}; 
