

class NbodyDefault:
  
    def __init__()				- bien rflchir...
    
    def init(self)				- ok
    
    def set_ftype(self,ftype='binary')
    
    def set_parameters(self,params)
    
    def set_unitsparameters(self,unitsparams)
    
    def set_local_system_of_units(self)
    
    def info(self)				- ok
    
    def spec_info(self)				- ok
    
    ---------------------------------------------------------------------
    
    def read(self)
    
    def open_and_read(self,name,readfct)
    
    def read_p(self,f)
    
    def read_m(self,f)
    
    def write(self)
    
    def write_p(self,f)
    
    def write_m(self,f)
    
    ---------------------------------------------------------------------
    
    def set_total_mass(self,mtot)
    
    def rename(self,p_name=None,m_name=None)
    
    
  #################################   		     
  #     					     
  # coordinate transformation				pas besoin de mpi, reste local     
  #						     
  #################################  
  
  
  def rxyz(self)				- ok
  def phi_xyz(self)				- ok
  def theta_xyz(self)				- ok
  def rxy(self)					- ok
  def cart2sph(self,pos=None)			- ok
  def sph2cart(self,pos=None)			- ok
  def vrxyz(self)				- ok
  def Vr(self)  				- ok
  def Vt(self)                                  - ok
  
  
  #################################   		     
  #     					     
  # physical values				     
  #						     
  #################################  
  
  
  nb.get_nt()					- ok	mpi
  nb.get_mt()					- ok	mpi
  nb.cm()					- ok	mpi
  nb.get_histocenter()				- ok	mpi
  nb.cv()					- ok	mpi
  nb.minert()					- ok	mpi
  nb.x_sigma()					- ok	mpi
  nb.v_sigma()					- ok	mpi
  nb.dv_mean()					- ok	mpi
  nb.Ekin()					- ok	mpi
  nb.ekin()					- ok	mpi
  nb.Epos()		   			# !! non mpi !!
  nb.epos()		   			# !! non mpi !! 
  nb.L()					- ok	
  nb.l()					- ok	
  nb.Ltot()					- ok	mpi
  nb.ltot() 					- ok	mpi 
  nb.Pot(self,x,eps)                            - ok    mpi		!!! prcision !!!
  nb.tork(nb.vel)                            	- ok    mpi
  nb.dens(rm=20000)                            	- ok    mpi
  nb.mdens(rm=20000)                            - ok    mpi
  nb.mr(rm=20000)                            	- ok    mpi
  nb.sdens(rm=20000)                            - ok    mpi
  nb.msdens(rm=20000)				- ok    mpi 
  
  nb.zprof(r=20000,zm=20000)						!!! not tested
  nb.sigma()								!!! not tested
  nb.zmodes()								!!! not tested
  nb.dmodes()								!!! not tested  
  
  nb.histovel()					- ok    mpi 
  
  ################################# 
  #
  # Thermodynamic functions
  #
  #################################  
  
  def Rho(self)					- ok
  def T(self)					- ok
  def A(self)					- ok
  def P(self)					- ok
  def Tcool(self,coolingfile=None)		- ok
  def Ne(self)					- ok
  def S(self)					- ok
  def Lum(self)					- ok
  
  #################################
  #
  # sph functions
  #
  #################################     
  
  !!! on traite qu'une particule (besoin de getindex)...  rflchir
  
  def weighted_numngb(self,num):					!!! need getindex !!!
  def real_numngb(self,num):						!!! need getindex !!!
  def usual_numngb(self,num):						!!! need getindex !!!
   
    
  #################################   		     
  #     					     
  # selection of particles				     
  #						     
  ################################# 
  
  def selectc(self,c):				- ajouter autres tableaux
  def sub(self,n1=0,n2=None):			- !!! compliqu !!!
  def reduc(self,n):				- !!! ok, mais compliqu pour etre exacte !!!
  def select():					- ok
  def selectp():				- ok
  def getindex(self,num):			- ok
  
  
  #################################   		     
  #     					     
  # add particles				     
  #						     
  ################################# 
  
  
  def append(self,new):  			- a tester... + pour gadget -> gas first... !!!
  def __add__(self,new):  			- a tester... + pour gadget -> gas first... !!!
  
  #################################   		     
  #     					     
  # geometrical operations				     
  #						     
  ################################# 
  
  def cmcenter(self):  							- ok
  def cvcenter(self):							- ok 
  def histocenter(self,rbox=50,nb=500):					- ok  
  def hdcenter(self):  							- ok 
  def translate(self,dx,mode='p'):                                      - ok   
  def rotate(self,angle=0,mode='a',axis='x'):				- ok   
  def rotate2(self,angle=0,axis=[1,0,0],point=[0,0,0]):			- ok   
  def align(self,axis,mode='a',sgn='+',fact=None): 			- ok    
  def align2(self,axis1=[1,0,0],axis2=[0,0,1],point=[0,0,0]):		- ok     
  def spin(self,omega=None,L=None,j=None,E=None):  			- ok   
  
  def newpos(self,x,y,z):    	  				  	- !!! inutilis !!!
  def newvel(self,vx,vy,vz):    					- !!! inutilis !!!
  
  
  #################################   		     
  #     					     
  # graphical operations				     
  #						     
  ################################# 
  
  
  
  
  
  
  
  
  
    
  Question :
  --------
  
  est-ce bien ncessaire d'avoir des particules de gaz dans l'ordre ???
  ---> oui, pour slection spcifique gadget
  ---> faire une fct de classement ? 
  ??? ---> cre une variable type ? et classer lors de l'criture (fct de classement) ???  
  ??? ---> directement utiliser npart , gnral ? il semble, oui...  
    
    
    
    
    

!!! indiquer dans une liste dans """format.py""" les autres variables importantes   !!!



