Bug correction
[u/mrichter/AliRoot.git] / ANALYSIS / AliAOD.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id$ */
17
18 /////////////////////////////////////////////////////////////
19 //
20 // base class for AOD containers
21 //
22 /////////////////////////////////////////////////////////////
23
24 #include <TParticle.h>
25 #include "AliAOD.h"
26 #include "AliAODParticle.h"
27 #include "AliTrackPoints.h"
28
29 ClassImp(AliAOD)
30
31 AliAOD::AliAOD():
32  fParticles(10),
33  fIsRandomized(kFALSE),
34  fPrimaryVertexX(0.0),
35  fPrimaryVertexY(0.0),
36  fPrimaryVertexZ(0.0)
37 {
38  //ctor
39  SetOwner(kTRUE);
40 }
41
42 /**************************************************************************/
43
44 void  AliAOD::AddParticle(TParticle* part, Int_t idx)
45 {
46   //Adds TParticle to event
47   if (part == 0x0) 
48    {
49      Error("AddParticle(TParticle*,Int_t)","pointer to particle is NULL");
50      return;
51    }
52   AddParticle( new AliAODParticle(*part,idx) );
53 }
54 /**************************************************************************/
55
56 void  AliAOD::AddParticle(Int_t pdg, Int_t idx,
57                           Double_t px, Double_t py, Double_t pz, Double_t etot,
58                           Double_t vx, Double_t vy, Double_t vz, Double_t time)
59 {
60   //adds particle to event
61   AddParticle(new  AliAODParticle(pdg,idx,px,py,pz,etot,vx,vy,vz,time));
62 }
63 /**************************************************************************/
64
65 void AliAOD::SwapParticles(Int_t i, Int_t j)
66 {
67 //swaps particles positions; used by AliHBTEvent::Blend
68   if ( (i<0) || (i>=GetNumberOfParticles()) ) return;
69   if ( (j<0) || (j>=GetNumberOfParticles()) ) return;
70
71   AliVAODParticle* tmp = (AliVAODParticle*)fParticles.At(i);
72   fParticles.AddAt(fParticles.At(j),i);
73   fParticles.AddAt(tmp,j);
74 }
75 /**************************************************************************/
76
77 void  AliAOD::Reset()
78 {
79   //deletes all particles from the event
80    for(Int_t i =0; i<GetNumberOfParticles(); i++)
81     {
82       for (Int_t j = i+1; j<GetNumberOfParticles(); j++)
83         if ( fParticles.At(j) == fParticles.At(i) ) fParticles.RemoveAt(j);
84       delete fParticles.RemoveAt(i);
85     }
86 //   fRandomized = kFALSE;
87 }
88 /**************************************************************************/
89
90 void AliAOD::GetPrimaryVertex(Double_t&x, Double_t&y, Double_t&z)
91 {
92 //returns positions of the primary vertex
93   x = fPrimaryVertexX;
94   y = fPrimaryVertexY;
95   z = fPrimaryVertexZ;
96 }
97 /**************************************************************************/
98
99 void AliAOD::SetPrimaryVertex(Double_t x, Double_t y, Double_t z)
100 {
101 //Sets positions of the primary vertex 
102   fPrimaryVertexX = x;
103   fPrimaryVertexY = y;
104   fPrimaryVertexZ = z;
105 }
106 /**************************************************************************/
107
108 Int_t AliAOD::GetNumberOfCharged(Double_t etamin, Double_t etamax) const
109 {
110   //reurns number of charged particles within given pseudorapidity range
111   Int_t n = 0;
112   Int_t npart = fParticles.GetEntries();
113   for (Int_t i = 0; i < npart; i++)
114    {
115      AliVAODParticle* p = (AliVAODParticle*)fParticles.At(i);
116      Double_t eta = p->Eta();
117      if ( (eta < etamin) || (eta > etamax) ) continue;
118      if (p->Charge() != 0.0) n++;
119    }
120   return n;
121 }
122 /**************************************************************************/
123
124 void AliAOD::Move(Double_t x, Double_t y, Double_t z)
125 {
126  //moves all spacial coordinates about this vector
127  // vertex
128  // track points
129  // and whatever will be added to AOD and AOD particles that is a space coordinate
130
131   fPrimaryVertexX += x;
132   fPrimaryVertexY += y;
133   fPrimaryVertexZ += z;
134
135   Int_t npart = fParticles.GetEntries();
136   for (Int_t i = 0; i < npart; i++)
137    {
138      AliVAODParticle* p = (AliVAODParticle*)fParticles.At(i);
139      AliTrackPoints* tp  = p->GetTPCTrackPoints();
140      if (tp) tp->Move(x,y,z);
141      tp  = p->GetITSTrackPoints();
142      if (tp) tp->Move(x,y,z);
143    }
144 }