]> git.uio.no Git - u/mrichter/AliRoot.git/blob - JETAN/AliLeading.cxx
Leading particles selected within fiducial eta range.
[u/mrichter/AliRoot.git] / JETAN / AliLeading.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 //---------------------------------------------------------------------
17 // Class to find and store the leading particle in event and
18 // store its correlation to associated particles
19 // Author: jgcn@mda.cinvestav.mx
20 //---------------------------------------------------------------------
21
22 #include <Riostream.h>
23 #include <TMath.h>
24 #include <TClonesArray.h>
25 #include <TLorentzVector.h>
26
27 #include "AliLeading.h"
28 #include "AliJetReader.h"
29 #include "AliJetReaderHeader.h"
30
31 ClassImp(AliLeading)
32
33 ////////////////////////////////////////////////////////////////////////
34
35 AliLeading::AliLeading() 
36 {
37   //
38   // Constructor
39   //
40   fNassoc=0;
41   fLeading = new TLorentzVector(0.,0.,0.,0.);
42   fLow = -TMath::Pi()/2.0;
43   fnBin=45;
44   fCorr = TArrayI(fnBin);
45 }
46
47 ////////////////////////////////////////////////////////////////////////
48
49 AliLeading::~AliLeading()
50 {
51   //
52   // Destructor
53   //
54   delete fLeading;
55 }
56
57 ////////////////////////////////////////////////////////////////////////
58
59 void AliLeading::FindLeading(AliJetReader *reader)
60
61 {
62   //
63   // find leading particle in the array of lorentz vectors
64   // lvArray and fill the correlation histogram
65   //
66
67     
68   AliJetReaderHeader* header = reader->GetReaderHeader();
69     
70   TClonesArray* lvArray = reader->GetMomentumArray();
71   Int_t nIn = lvArray->GetEntries();
72   fNassoc = nIn-1;
73
74   if (fNassoc < 0) return;
75
76   // find max
77   Double_t ptMax = 0.0;
78   Int_t idxMax = -1;
79   for (Int_t i = 0; i < nIn; i++){
80       TLorentzVector *lv = (TLorentzVector*) lvArray->At(i);
81       if (lv->Pt()   > ptMax                       && 
82           lv->Eta()  > header->GetFiducialEtaMin() &&
83           lv->Eta()  < header->GetFiducialEtaMax()) 
84       {
85           ptMax  = lv->Pt();
86           idxMax = i;
87       }
88   }
89   
90   // fill correlation array
91   fLeading = (TLorentzVector*) lvArray->At(idxMax);
92   for (Int_t i = 0; i < nIn; i++) {
93       if (i == idxMax) continue;
94       TLorentzVector *lv = (TLorentzVector*) lvArray->At(i);
95       Double_t dphi = fLeading->DeltaPhi(*lv);
96       if (dphi < fLow) dphi = 2.0 * TMath::Pi() + dphi;
97       // find bin and fill array
98       
99       Int_t iBin = (Int_t) TMath::Floor((dphi - fLow)
100                                         *((Double_t) fnBin) / (2.0 * TMath::Pi()));
101       fCorr.AddAt(fCorr.At(iBin)+1,iBin);
102   }
103 }
104
105 ////////////////////////////////////////////////////////////////////////
106
107 void AliLeading::Reset()
108
109 {
110 // Reset leding particle information
111   fLeading->SetPxPyPzE(0., 0., 0., 0.);
112   fNassoc=0;
113   fCorr.Reset();
114 }
115
116 ////////////////////////////////////////////////////////////////////////
117
118 void AliLeading::PrintLeading()
119
120 {
121 // Print leading particle information
122   if (fNassoc<0) {
123     cout << " No leading particle in this event" << endl;
124     return;
125   }
126   cout << " Leading particle: " << endl;
127   cout << "    (px,py,pz,e) = (" << fLeading->Px() << ","
128        << fLeading->Py() << "," << fLeading->Pz() << ","
129        << fLeading->E() << ")" << endl;
130   cout << "    (pt,eta,phi) = (" << fLeading->Pt() << ","
131        << fLeading->Eta() << "," << fLeading->Phi() << ")" << endl;
132   cout << "    " << fNassoc << " associated particles." << endl;
133 }