1 /**************************************************************************
2 * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 //-------------------------------------------------------------------------
20 // Author: Andreas Morsch, CERN
21 //-------------------------------------------------------------------------
23 #include <TLorentzVector.h>
24 #include "AliAODJet.h"
29 //______________________________________________________________________________
30 AliAODJet::AliAODJet() :
35 fVectorAreaCharged(0),
36 fRefTracks(new TRefArray())
41 fEffectiveArea[0] = 0.;
42 fEffectiveArea[1] = 0.;
43 fEffectiveAreaError[0] = fEffectiveAreaError[1] = 0;
46 AliAODJet::AliAODJet(Double_t px, Double_t py, Double_t pz, Double_t e):
51 fVectorAreaCharged(0),
52 fRefTracks(new TRefArray())
57 fEffectiveArea[0] = 0.;
58 fEffectiveArea[1] = 0.;
59 fEffectiveAreaError[0] = fEffectiveAreaError[1] = 0;
60 fMomentum = new TLorentzVector(px, py, pz, e);
63 AliAODJet::AliAODJet(TLorentzVector & p):
68 fVectorAreaCharged(0),
69 fRefTracks(new TRefArray())
74 fEffectiveArea[0] = 0.;
75 fEffectiveArea[1] = 0.;
76 fEffectiveAreaError[0] = fEffectiveAreaError[1] = 0;
77 fMomentum = new TLorentzVector(p);
81 //______________________________________________________________________________
82 AliAODJet::~AliAODJet()
86 delete fVectorAreaCharged;
90 //______________________________________________________________________________
91 AliAODJet::AliAODJet(const AliAODJet& jet) :
93 fNeutralFraction(jet.fNeutralFraction),
94 fTrigger(jet.fTrigger),
96 fVectorAreaCharged(0),
100 fBackgEnergy[0] = jet.fBackgEnergy[0];
101 fBackgEnergy[1] = jet.fBackgEnergy[1];
102 fEffectiveArea[0] = jet.fEffectiveArea[0];
103 fEffectiveArea[1] = jet.fEffectiveArea[1];
104 fEffectiveAreaError[0] = jet.fEffectiveAreaError[0];
105 fEffectiveAreaError[1] = jet.fEffectiveAreaError[1];
106 if(jet.fMomentum)fMomentum = new TLorentzVector(*jet.fMomentum);
107 if(jet.fVectorAreaCharged)fVectorAreaCharged = new TLorentzVector(*jet.fVectorAreaCharged);
108 fRefTracks = new TRefArray(*jet.fRefTracks);
111 //______________________________________________________________________________
112 AliAODJet& AliAODJet::operator=(const AliAODJet& jet)
114 // Assignment operator
117 fBackgEnergy[0] = jet.fBackgEnergy[0];
118 fBackgEnergy[1] = jet.fBackgEnergy[1];
119 fEffectiveArea[0] = jet.fEffectiveArea[0];
120 fEffectiveArea[1] = jet.fEffectiveArea[1];
121 fEffectiveAreaError[0] = jet.fEffectiveAreaError[0];
122 fEffectiveAreaError[1] = jet.fEffectiveAreaError[1];
123 fNeutralFraction = jet.fNeutralFraction;
124 fTrigger = jet.fTrigger;
128 if(fMomentum)*fMomentum = *jet.fMomentum;
129 else fMomentum = new TLorentzVector(*jet.fMomentum);
132 if(jet.fVectorAreaCharged){
133 if(fVectorAreaCharged)*fVectorAreaCharged = *jet.fVectorAreaCharged;
134 else fVectorAreaCharged = new TLorentzVector(*jet.fVectorAreaCharged);
137 fRefTracks = new TRefArray(*jet.fRefTracks);
143 void AliAODJet::Print(Option_t* /*option*/) const
145 // Print information of all data members
146 printf("Jet 4-vector:\n");
147 printf(" E = %13.3f\n", E() );
148 printf(" Px = %13.3f\n", Px());
149 printf(" Py = %13.3f\n", Py());
150 printf(" Pz = %13.3f\n", Pz());
151 printf("Background Energy:\n");
152 printf("Charged: %13.3f\n", ChargedBgEnergy());
153 printf("Neutral: %13.3f\n", NeutralBgEnergy());
154 printf("Total: %13.3f\n", TotalBgEnergy());
155 printf("Effective Area: \n");
156 printf("Charged: %13.3f\n", EffectiveAreaCharged());
157 printf("Neutral: %13.3f\n", EffectiveAreaNeutral());
160 void AliAODJet::SetPxPyPzE(Double_t px, Double_t py, Double_t pz, Double_t e){
162 // Set the four Momentum from outside
163 // MomentumVector()->SetPxPyPzE() cannot be used since pointer can be 0x0
167 fMomentum = new TLorentzVector(px,py,pz,e);
170 fMomentum->SetPxPyPzE(px,py,pz,e);
174 Double_t AliAODJet::DeltaR(const AliVParticle* part){
176 // Helper function to calculate the distance between two jets
177 // or a jet and particle
179 Double_t dPhi = Phi() - part->Phi();
180 if(dPhi>TMath::Pi())dPhi = dPhi - 2.*TMath::Pi();
181 if(dPhi<(-1.*TMath::Pi()))dPhi = dPhi + 2.*TMath::Pi();
182 Double_t dEta = Eta() - part->Eta();
183 Double_t dR = TMath::Sqrt(dPhi*dPhi+dEta*dEta);
188 void AliAODJet::AddTrack(TObject *tr) {
189 // Add a track to the list of referenced tracks
190 if (fRefTracks->GetEntries() == 0) {
191 fRefTracks->Delete();
192 new(fRefTracks) TRefArray(TProcessID::GetProcessWithUID(tr));