Non-buffering readers implemented, proper changes in analysis. Compiler warnings...
[u/mrichter/AliRoot.git] / HBTAN / AliHBTEvent.cxx
1 //__________________________________________________________
2 ///////////////////////////////////////////////////////////////////
3 //
4 // class AliHBTEvent
5 //
6 // This class is container for paticles coming from one event
7 //
8 // Piotr.Skowronski@cern.ch 
9 //
10 ///////////////////////////////////////////////////////////////////
11
12
13 #include "AliHBTEvent.h"
14 #include "AliHBTParticle.h"
15
16 ClassImp(AliHBTEvent)
17
18 const UInt_t AliHBTEvent::fgkInitEventSize = 100;
19
20 /**************************************************************************/ 
21  
22 AliHBTEvent::AliHBTEvent():
23  fSize(fgkInitEventSize),
24  fParticles(new AliHBTParticle* [fSize]),
25  fNParticles(0),
26  fOwner(kTRUE),
27  fRandomized(kFALSE)
28  {
29 //default constructor   
30   if(fgkInitEventSize<1) 
31    {
32     Fatal("AliHBTEvent::AliHBTEvent()",
33           "fgkInitEventSize has a stiupid value (%d). Change it to positive number and recompile",
34            fgkInitEventSize);
35
36    }
37  }
38 /**************************************************************************/ 
39  
40 AliHBTEvent::AliHBTEvent(const AliHBTEvent& source):
41  TObject(source),
42  fSize(source.fSize),
43  fParticles(new AliHBTParticle* [fSize]),
44  fNParticles(source.fNParticles),
45  fOwner(source.fNParticles),
46  fRandomized(source.fRandomized)
47 {
48 //copy constructor
49   for(Int_t i =0; i<fNParticles; i++)
50    {
51       fParticles[i] = new AliHBTParticle( *(source.fParticles[i]) );
52    }
53   
54 }
55 /**************************************************************************/ 
56
57 AliHBTEvent& AliHBTEvent::operator=(const AliHBTEvent source)
58 {
59   // assigment operator
60   Reset();
61   if (fParticles) delete [] fParticles;
62   fSize = source.fSize;
63   fParticles = new AliHBTParticle* [fSize];
64   fNParticles = source.fNParticles;
65   fOwner = source.fNParticles;
66   fRandomized = source.fRandomized;
67       
68   for(Int_t i =0; i<fNParticles; i++)
69    {
70       fParticles[i] = new AliHBTParticle( *(source.fParticles[i]) );
71    }
72   return *this;
73 }
74 /**************************************************************************/ 
75 AliHBTEvent::~AliHBTEvent()
76  {
77 //destructor   
78   this->Reset();//delete all particles
79   if(fParticles)
80    { 
81     delete [] fParticles; //and delete array itself
82    }
83   fParticles = 0x0;
84  }
85 /**************************************************************************/ 
86 void  AliHBTEvent::Reset()
87 {
88   //deletes all particles from the event
89   if(fParticles && fOwner)
90     {
91       for(Int_t i =0; i<fNParticles; i++)
92        {
93          for (Int_t j = i+1; j<fNParticles; j++)
94            if (fParticles[j] == fParticles[i]) fParticles[j] = 0x0;
95          delete fParticles[i];
96        }
97     }
98    fNParticles = 0;
99
100 /**************************************************************************/ 
101
102 AliHBTParticle* AliHBTEvent::GetParticleSafely(Int_t n)
103 {
104   //returns nth particle with range check
105   if( (n<0) || (fNParticles<=n) ) return 0x0;
106   else return fParticles[n];
107 }
108 /**************************************************************************/ 
109
110 void  AliHBTEvent:: AddParticle(AliHBTParticle* hbtpart)
111 {
112   //Adds new perticle to the event
113   if ( fNParticles+1 >= fSize) Expand(); //if there is no space in array, expand it
114   fParticles[fNParticles++] = hbtpart; //add a pointer
115 }
116 /**************************************************************************/ 
117
118 void  AliHBTEvent::AddParticle(TParticle* part, Int_t idx)
119 {
120   //Adds TParticle to event
121   AddParticle( new AliHBTParticle(*part,idx) );
122 }
123 /**************************************************************************/ 
124 void  AliHBTEvent::AddParticle(Int_t pdg, Int_t idx, 
125              Double_t px, Double_t py, Double_t pz, Double_t etot,
126              Double_t vx, Double_t vy, Double_t vz, Double_t time)
127 {
128   //adds particle to event
129   AddParticle(new  AliHBTParticle(pdg,idx,px,py,pz,etot,vx,vy,vz,time) );
130 }
131 /**************************************************************************/ 
132
133 void AliHBTEvent::Expand()
134 {
135 //expands the array with pointers to particles
136 //about the size defined in fgkInitEventSize
137
138  fSize+=fgkInitEventSize;
139  AliHBTParticle** tmpParticles = new AliHBTParticle* [fSize]; //create new array of pointers
140  //check if we got memory / if not Abort
141  if (!tmpParticles) Fatal("AliHBTEvent::Expand()","No more space in memory");
142
143
144  for(Int_t i = 0; i<fNParticles ;i++)
145   //copy pointers to the new array
146   {
147     tmpParticles[i] = fParticles[i];
148   }
149  delete [] fParticles; //delete old array
150   fParticles = tmpParticles; //copy new pointer to the array of pointers to particles
151 }