//
// D.Cussol
//
// 21/10/2002:
// Creation d'une classe relative aux Events INDRA
// Formation ROOT
//
#include "Event.h"
#include "TMath.h"
#include "Riostream.h"
ClassImp(Event)
////////////////////////////////////////////////////////////////////////////////
//
// Classe contenant les informations relatives a un evenement
//
////////////////////////////////////////////////////////////////////////////////
Int_t Event::nb=0;
Int_t Event::nb_crea=0;
Int_t Event::nb_dest=0;
TClonesArray *Event::sfrags=0;
//============================================================================
// Methodes de base
//============================================================================
//_____________________________________________________________________________
void Event::initEvent(void)
{
//
// Initialisation des champs de Event
// Cette methode privee n'est appelee que par les constructeurs
//
nb++;
mult=0;
if(!sfrags)
{
sfrags=new TClonesArray("Fragment",100);
for(Int_t i=0;i<100;i++)
Fragment *tmp = new((*sfrags)[i]) Fragment();
}
frags=sfrags;
nb_crea++;
}
//_____________________________________________________________________________
Event::Event(void):TNamed()
{
//
// Createur par default
//
Char_t *nom=new Char_t[80];
initEvent();
sprintf(nom,"Event_%d",nb);
SetName(nom);
SetTitle(nom);
delete [] nom;
}
//_____________________________________________________________________________
Event::Event(Char_t *nom)
{
//
// Constructeur avec un nom
//
initEvent();
SetName(nom);
SetTitle(nom);
}
//_____________________________________________________________________________
Event::~Event(void)
{
//
// Destructeur
//
nb--;
if(nb==0)
{
delete sfrags;
}
nb_dest++;
}
//============================================================================
// Acces directs aux champs
//============================================================================
//_____________________________________________________________________________
void Event::AddFragment(Fragment *f)
{
//
// Ajout d'un fragment a l'evenement
//
TClonesArray <ca=*frags;
Fragment *tmp=(Fragment *)ltca[mult];
if(tmp)
{
tmp->Set(f->GetA(),f->GetZ(),f->GetVit());
mult++;
}
}
//_____________________________________________________________________________
void Event::Reset(void)
{
//
// Remise a zero de l'evenement, vide la liste des fragments
//
if(frags) frags->Clear();
mult=0;
}
//_____________________________________________________________________________
Int_t Event::GetMult(void)
{
//
// Nombre de particules
//
return mult;
}
//_____________________________________________________________________________
Fragment *Event::GetFragment(Int_t i)
{
//
// Retourne le pointeur sur le i eme fragment de l'evenement
// ATTENTION: l'indice i varie de 1 au nombre total de particules.
//
// Exemple d'utilisation (evt est un pointeur sur un objet de type Event):
//
// Fragment *fra=evt->GetFragment(3); ! retourne le pointeur sur le 3eme fragment
//
Fragment *f=0;
if(frags)
if(i > 0 && i <= mult)
{
f=(Fragment *)frags->At(i-1);
}
else
{
cerr << "L'indice i doit etre comprit entre 1 et " << mult << "." <<
endl;
}
else
{
cerr << "Le TClonesArray est null..." << endl;
}
return f;
}
//============================================================================
// Acces calcules aux champs
//============================================================================
//_____________________________________________________________________________
Int_t Event::GetZtot(void)
{
//
// Somme des charges de tous les fragments de l'evenement
//
Fragment *f;
Int_t Z=0;
if(frags)
for(Int_t i=0;i<mult;i++)
{
f=(Fragment *)frags->At(i);
Z+=f->GetZ();
}
return Z;
}
//_____________________________________________________________________________
TVector3 Event::GetPtot(void)
{
//
// Somme des produits Charge*(module de la vitesse) pour tous les fragments de
// l'evenement
//
Fragment *f;
TVector3 pt(0.,0.,0.);
for(Int_t i=0;i<mult;i++)
{
f=(Fragment *)frags->At(i);
pt+=(f->GetZ())*(f->GetVit());
}
return pt;
}
//_____________________________________________________________________________
Double_t Event::GetEcin(void)
{
//
// Somme des energies cinetiques pour tous les fragments de l'evenement
//
Fragment *f;
Double_t ect=0;
if(frags)
for(Int_t i=0;i<mult;i++)
{
f=(Fragment *)frags->At(i);
ect+=f->GetEcin();
}
return ect;
}
//_____________________________________________________________________________
Double_t Event::GetEperp(void)
{
//
// Somme des energies cinetiques perpendiculaires au faisceau pour tous les
// fragments de l'evenement
//
Fragment *f;
Double_t ept=0;
if(frags)
for(Int_t i=0;i<mult;i++)
{
f=(Fragment *)frags->At(i);
ept+=f->GetEperp();
}
return ept;
}
//_____________________________________________________________________________
void Event::Print(Option_t* option) const
{
//
// Affichage de l'evenement
//
cout << "=====================================================" << endl;
cout << "Mult : " << mult << endl;
if(frags)
for(Int_t i=0;i<mult;i++)
{
cout << i+1 << " -> ";
((Fragment *)frags->At(i))->Print();
}
cout << 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.