]>
Commit | Line | Data |
---|---|---|
8089a083 | 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 | ||
1b446896 | 13 | #include "AliHBTEvent.h" |
14 | #include "AliHBTParticle.h" | |
15 | ||
16 | ClassImp(AliHBTEvent) | |
17 | ||
8089a083 | 18 | const UInt_t AliHBTEvent::fgkInitEventSize = 100; |
1b446896 | 19 | |
1b446896 | 20 | /**************************************************************************/ |
21 | ||
88cb7938 | 22 | AliHBTEvent::AliHBTEvent(): |
23 | fSize(fgkInitEventSize), | |
24 | fParticles(new AliHBTParticle* [fSize]), | |
25 | fNParticles(0), | |
26 | fOwner(kTRUE), | |
27 | fRandomized(kFALSE) | |
1b446896 | 28 | { |
d74e6a27 | 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 | } | |
1b446896 | 37 | } |
38 | /**************************************************************************/ | |
bed069a4 | 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 | /**************************************************************************/ | |
1b446896 | 56 | |
bed069a4 | 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 | /**************************************************************************/ | |
1b446896 | 75 | AliHBTEvent::~AliHBTEvent() |
76 | { | |
d74e6a27 | 77 | //destructor |
78 | this->Reset();//delete all particles | |
79 | if(fParticles) | |
80 | { | |
81 | delete [] fParticles; //and delete array itself | |
82 | } | |
83 | fParticles = 0x0; | |
1b446896 | 84 | } |
85 | /**************************************************************************/ | |
86 | void AliHBTEvent::Reset() | |
87 | { | |
8089a083 | 88 | //deletes all particles from the event |
cea431b6 | 89 | if(fParticles && fOwner) |
1b446896 | 90 | { |
91 | for(Int_t i =0; i<fNParticles; i++) | |
bed069a4 | 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 | } | |
1b446896 | 97 | } |
98 | fNParticles = 0; | |
efaf00f8 | 99 | fRandomized = kFALSE; |
1b446896 | 100 | } |
d74e6a27 | 101 | /**************************************************************************/ |
1b446896 | 102 | |
103 | AliHBTParticle* AliHBTEvent::GetParticleSafely(Int_t n) | |
d74e6a27 | 104 | { |
105 | //returns nth particle with range check | |
106 | if( (n<0) || (fNParticles<=n) ) return 0x0; | |
107 | else return fParticles[n]; | |
108 | } | |
1b446896 | 109 | /**************************************************************************/ |
110 | ||
111 | void AliHBTEvent:: AddParticle(AliHBTParticle* hbtpart) | |
d74e6a27 | 112 | { |
113 | //Adds new perticle to the event | |
114 | if ( fNParticles+1 >= fSize) Expand(); //if there is no space in array, expand it | |
115 | fParticles[fNParticles++] = hbtpart; //add a pointer | |
116 | } | |
1b446896 | 117 | /**************************************************************************/ |
d74e6a27 | 118 | |
8089a083 | 119 | void AliHBTEvent::AddParticle(TParticle* part, Int_t idx) |
d74e6a27 | 120 | { |
121 | //Adds TParticle to event | |
122 | AddParticle( new AliHBTParticle(*part,idx) ); | |
123 | } | |
1b446896 | 124 | /**************************************************************************/ |
d74e6a27 | 125 | void AliHBTEvent::AddParticle(Int_t pdg, Int_t idx, |
126 | Double_t px, Double_t py, Double_t pz, Double_t etot, | |
127 | Double_t vx, Double_t vy, Double_t vz, Double_t time) | |
128 | { | |
129 | //adds particle to event | |
130 | AddParticle(new AliHBTParticle(pdg,idx,px,py,pz,etot,vx,vy,vz,time) ); | |
131 | } | |
1b446896 | 132 | /**************************************************************************/ |
133 | ||
134 | void AliHBTEvent::Expand() | |
d74e6a27 | 135 | { |
136 | //expands the array with pointers to particles | |
137 | //about the size defined in fgkInitEventSize | |
138 | ||
139 | fSize+=fgkInitEventSize; | |
140 | AliHBTParticle** tmpParticles = new AliHBTParticle* [fSize]; //create new array of pointers | |
141 | //check if we got memory / if not Abort | |
142 | if (!tmpParticles) Fatal("AliHBTEvent::Expand()","No more space in memory"); | |
143 | ||
144 | ||
145 | for(Int_t i = 0; i<fNParticles ;i++) | |
146 | //copy pointers to the new array | |
147 | { | |
148 | tmpParticles[i] = fParticles[i]; | |
149 | } | |
150 | delete [] fParticles; //delete old array | |
151 | fParticles = tmpParticles; //copy new pointer to the array of pointers to particles | |
152 | } | |
fe1a3526 | 153 | /**************************************************************************/ |
154 | ||
155 | void AliHBTEvent::SwapParticles(Int_t i, Int_t j) | |
156 | { | |
157 | //swaps particles positions; used by AliHBTEvent::Blend | |
158 | if ( (i<0) || (i>=fNParticles)) return; | |
159 | if ( (j<0) || (j>=fNParticles)) return; | |
160 | ||
161 | AliHBTParticle* tmp = fParticles[i]; | |
162 | fParticles[i] = fParticles[j]; | |
163 | fParticles[j] = tmp; | |
164 | } |