//
//
// Logs:
//
//  $Log: LSpace.h,v $
//  Revision 1.4  2003/06/26 14:46:16  cvs
//  found a bug in LSpace::GetEnergy() with fbias. Bug successfully resolved :)
//
//  Revision 1.3  2003/06/26 11:24:25  cvs
//  modified particle moving with LMiki and faster LDisorder operations
//
//  Revision 1.2  2003/06/26 09:27:11  cvs
//  added log fields...
//

#ifndef _LSPACE___
#define _LSPACE___

#include "Config.h"
#include "Util.h"
#include "LParticle.h"
#include "Lattice.h"
#include <Rtypes.h>

class LSpace {
protected:
  int fx,fy,fz; //space size

  Lattice* fspace; //!lattice
  LParticle* fe; //!particle in a space
  Float_t* fbias; //[fz] bias array

public:
  LSpace();
  LSpace(const int x,const int y,const int z);
  virtual ~LSpace();

  LParticle* AddParticle(const int i,const int j,const int k);
  LParticle* GetParticle() const {return fe;}
  Lattice* GetLattice() const {return fspace;}
  //  void SetParticle(LParticle* e){fe=e;}
  //  void SetLattice(Lattice* space){fspace=space;}
  int IsInside(const LParticle *e) const;



  int GetX() const {return fx;};
  int GetY() const {return fy;};
  int GetZ() const {return fz;};

  float GetEnergy(int i,int j,int k) const;
  float GetEnergyDifference(int i,int j,int k,int di,int dj,int dk) const;
  float GetBias(const int k)const ;
  void SetBias(const int k,const float bias) ;
  float* GetBias()const {return fbias;}
  void SetBias(const float* bias);
  float Distance(const int x,const int y,const  int z) const;
  float Distance(const int idx);

  ClassDef(LSpace,0)  //Space for bulk material simulation
};





#endif //_LSPACE___








