//
// D.Cussol 
//
// 21/10/2002:
// Creation d'une classe relative aux fragments INDRA 
// Formation ROOT
//

#include "Fragment.h"
#include "TMath.h"
#include "Riostream.h"

ClassImp(Fragment)
////////////////////////////////////////////////////////////////////////////////
//
// Classe contenant les informations relatives a un fragment
//
////////////////////////////////////////////////////////////////////////////////

Int_t	Fragment::nb=0;
Int_t	Fragment::nb_crea=0;
Int_t	Fragment::nb_dest=0;
Double_t	Fragment::mnuc=931.5;

//============================================================================
// Methodes de base
//============================================================================
//_____________________________________________________________________________
 void Fragment::initFragment(void)
	{
//
// Initialisation des champs de Fragment
// Cette methode privee n'est appelee que par les constructeurs
//
        if(!this->IsOnHeap()) nb++;
	Z=0;
	A=0;
	v.SetXYZ(0.,0.,1.);

	nb_crea++;
	}

//_____________________________________________________________________________
 Fragment::Fragment(void):TObject()
	{
//
// Createur par default
//
	initFragment();
	}
	
//_____________________________________________________________________________
 Fragment::~Fragment(void)
       {
// 
// Destructeur
//
        nb--;
	nb_dest++;
       }
//============================================================================
// Acces directs aux champs
//============================================================================
//_____________________________________________________________________________
 void Fragment::Set(Int_t aa, Int_t zz, TVector3 vit)
	{
//
// Methode d'attribution de valeur des champs
//
	A=aa;
	Z=zz;
	v=vit;
	}

//_____________________________________________________________________________
 void Fragment::SetA(Int_t aa)
	{
//
// Methode d'attribution de A
//
	A=aa;
	}

//_____________________________________________________________________________
 void Fragment::SetZ(Int_t zz)
	{
//
// Methode d'attribution de Z
//
	Z=zz;
	}

//_____________________________________________________________________________
 void Fragment::SetVit(TVector3 vit)
	{
//
// Methode d'attribution de la vitesse. Les coordonnées doivent etre en cm/ns.
//
	v=vit;
	}

//_____________________________________________________________________________
 void Fragment::SetVit(Double_t vx, Double_t vy, Double_t vz)
	{
//
// Methode d'attribution de la vitesse. Les coordonnées doivent etre en cm/ns.
//
	v.SetXYZ(vx,vy,vz);
	}

//_____________________________________________________________________________
 Int_t Fragment::GetA(void)
	{
//
// Retourne le nombre de nucleons (nombre de masses)
//
	return A;
	}

//_____________________________________________________________________________
 Int_t Fragment::GetZ(void)
	{
//
// Retourne la charge
//
	return Z;
	}

//_____________________________________________________________________________
 TVector3 Fragment::GetVit(void)
	{
//
// Retourne la vitesse. Les coordonnees sont en cm/ns
//	
	return v;
	}

//============================================================================
// Acces calcules aux champs
//============================================================================
//_____________________________________________________________________________
 void Fragment::SetEnergie(Double_t e)
	{
//
// Attribution de l'energie cinetique en MeV
//	
	if(A > 0)
	 {
	 Double_t vitesse=TMath::Sqrt(2.*e/GetMasse())*30.;
	 if(v.Mag()==0) v.SetXYZ(0.,0.,1.);
	 v.SetMag(vitesse);
	 }
	else
	 {
	 cerr << "Attribuer le nombre de nucleons avant l'energie..." << endl;
	 }
	}

//_____________________________________________________________________________
 void Fragment::SetTheta(Double_t theta)
	{
//
// Attribution de l'angle polaire Theta en degres
//	
	Double_t the=theta*TMath::Pi()/180.;
	v.SetTheta(the);
	}

//_____________________________________________________________________________
 void Fragment::SetPhi(Double_t phi)
	{
//
// Attribution de l'angle Phi en degres
//	
	Double_t p=phi*TMath::Pi()/180.;
	v.SetPhi(p);
	}

//_____________________________________________________________________________
 Double_t  Fragment::GetMasse(void)
	{
//
// Retourne la masse en MeV/c2
//	
	return A*mnuc;
	}

//_____________________________________________________________________________
 Double_t  Fragment::GetTheta(void)
	{
//
// Retourne l'angle polaire Theta en degres
//	
	return v.Theta()*180./TMath::Pi();
	}

//_____________________________________________________________________________
 Double_t  Fragment::GetPhi(void)
	{
//
// Retourne l'angle Phi en degres
//	
	return v.Phi()*180./TMath::Pi();
	}

//_____________________________________________________________________________
 Double_t Fragment::GetEcin(void)
	{
// 
// Retourne l'energie cinetique en MeV
//
	return GetMasse()*v.Mag2()/1800.;
	}

//_____________________________________________________________________________
 Double_t Fragment::GetEperp(void)
	{
//
// Retourne l'energie cinetique perpendiculaire en MeV.
//
	return GetMasse()*v.Perp2()/1800.;
	}

//_____________________________________________________________________________
 Double_t Fragment::GetRayon(void)
	{
//
// Retourne le rayon theorique (1.2*A^(1./3.)) en fm. 
//
	return 1.2*TMath::Power((Double_t)A,1./.3);
	}

//_____________________________________________________________________________
 Double_t Fragment::GetEgoutliq(void)
	{
//
// Calcul de l'energie du fondamental "Goutte Liquide" en MeV.
//
	Double_t av=16.;
	Double_t as=18.;
	Double_t ac=0.72;
	Double_t aa=23.5;
	
	return av*A
	       -as*TMath::Power((Double_t)A,2./.3)
	       -ac*Z*(Z-1.)/TMath::Power((Double_t)A,1./3.)
	       -aa*TMath::Power(A-2*Z,2)/(Double_t)A;
	}	

//_____________________________________________________________________________
 void Fragment::Print(Option_t* option) const
	{
//
// Affichage
//
	Char_t mes[80];
	sprintf(mes,"%3d, %2d : %8.2f %8.2f %8.2f",A,Z,v.X(),v.Y(),v.Z());
	cout << mes << endl;
	}



ROOT page - Class index - Class Hierarchy - Top of the page

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.