]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PMD/AliPMDtracker.cxx
bugfix: boundery check for static hit array
[u/mrichter/AliRoot.git] / PMD / AliPMDtracker.cxx
CommitLineData
7dcaf913 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// //
18// Date : March 25 2004 //
19// This reads the file PMD.RecPoints.root(TreeR), //
20// calls the Clustering algorithm and stores the //
21// clustering output in PMD.RecPoints.root(TreeR) //
22// //
23//-----------------------------------------------------//
24
25#include <Riostream.h>
26#include <TMath.h>
27#include <TBRIK.h>
28#include <TNode.h>
29#include <TTree.h>
30#include <TGeometry.h>
31#include <TObjArray.h>
32#include <TClonesArray.h>
33#include <TFile.h>
34#include <TBranch.h>
35#include <TNtuple.h>
36#include <TParticle.h>
37
38#include "AliPMDcluster.h"
39#include "AliPMDclupid.h"
40#include "AliPMDrecpoint1.h"
41#include "AliPMDUtility.h"
42#include "AliPMDDiscriminator.h"
26f1ae17 43#include "AliPMDEmpDiscriminator.h"
7dcaf913 44#include "AliPMDtracker.h"
45
46#include "AliESDPmdTrack.h"
af885e0f 47#include "AliESDEvent.h"
ecee2a1a 48#include "AliLog.h"
7dcaf913 49
50ClassImp(AliPMDtracker)
51
52AliPMDtracker::AliPMDtracker():
53 fTreeR(0),
54 fRecpoints(new TClonesArray("AliPMDrecpoint1", 1000)),
55 fPMDcontin(new TObjArray()),
56 fPMDcontout(new TObjArray()),
7dcaf913 57 fPMDutil(new AliPMDUtility()),
58 fPMDrecpoint(0),
59 fPMDclin(0),
60 fPMDclout(0),
7dcaf913 61 fXvertex(0.),
62 fYvertex(0.),
63 fZvertex(0.),
64 fSigmaX(0.),
65 fSigmaY(0.),
66 fSigmaZ(0.)
67{
68 //
69 // Default Constructor
70 //
71}
a48edddd 72//--------------------------------------------------------------------//
73AliPMDtracker:: AliPMDtracker(const AliPMDtracker & /* tracker */):
2332574a 74 TObject(/* tracker */),
75 fTreeR(0),
76 fRecpoints(NULL),
77 fPMDcontin(NULL),
78 fPMDcontout(NULL),
79 fPMDutil(NULL),
80 fPMDrecpoint(0),
81 fPMDclin(0),
82 fPMDclout(0),
83 fXvertex(0.),
84 fYvertex(0.),
85 fZvertex(0.),
86 fSigmaX(0.),
87 fSigmaY(0.),
88 fSigmaZ(0.)
a48edddd 89{
90 // copy constructor
91 AliError("Copy constructor not allowed");
92}
93
94//--------------------------------------------------------------------//
95AliPMDtracker& AliPMDtracker::operator=(const AliPMDtracker & /* tracker */)
96{
97 // assignment operator
98 AliError("Assignment operator not allowed");
99 return *this;
100}
101
7dcaf913 102//--------------------------------------------------------------------//
103AliPMDtracker::~AliPMDtracker()
104{
105 // Destructor
106 if (fRecpoints)
107 {
108 fRecpoints->Delete();
109 delete fRecpoints;
110 fRecpoints=0;
111 }
112 if (fPMDcontin)
113 {
114 fPMDcontin->Delete();
115 delete fPMDcontin;
116 fPMDcontin=0;
117 }
118 if (fPMDcontout)
119 {
120 fPMDcontout->Delete();
121 delete fPMDcontout;
122 fPMDcontout=0;
123 }
316c6cd9 124 delete fPMDutil;
7dcaf913 125}
126//--------------------------------------------------------------------//
127void AliPMDtracker::LoadClusters(TTree *treein)
128{
129 // Load the Reconstructed tree
130 fTreeR = treein;
131}
132//--------------------------------------------------------------------//
af885e0f 133void AliPMDtracker::Clusters2Tracks(AliESDEvent *event)
7dcaf913 134{
135 // Converts digits to recpoints after running clustering
136 // algorithm on CPV plane and PREshower plane
137 //
138
139 Int_t idet;
140 Int_t ismn;
26f1ae17 141 Float_t clusdata[6];
7dcaf913 142
143 TBranch *branch = fTreeR->GetBranch("PMDRecpoint");
ecee2a1a 144 if (!branch)
145 {
146 AliError("PMDRecpoint branch not found");
147 return;
148 }
7dcaf913 149 branch->SetAddress(&fRecpoints);
150
26f1ae17 151 Int_t nmodules = (Int_t) branch->GetEntries();
152
ecee2a1a 153 AliDebug(1,Form("Number of modules filled in treeR = %d",nmodules));
7dcaf913 154 for (Int_t imodule = 0; imodule < nmodules; imodule++)
155 {
26f1ae17 156 branch->GetEntry(imodule);
7dcaf913 157 Int_t nentries = fRecpoints->GetLast();
ecee2a1a 158 AliDebug(2,Form("Number of clusters per modules filled in treeR = %d"
159 ,nentries));
7dcaf913 160 for(Int_t ient = 0; ient < nentries+1; ient++)
161 {
162 fPMDrecpoint = (AliPMDrecpoint1*)fRecpoints->UncheckedAt(ient);
163 idet = fPMDrecpoint->GetDetector();
164 ismn = fPMDrecpoint->GetSMNumber();
165 clusdata[0] = fPMDrecpoint->GetClusX();
166 clusdata[1] = fPMDrecpoint->GetClusY();
167 clusdata[2] = fPMDrecpoint->GetClusADC();
168 clusdata[3] = fPMDrecpoint->GetClusCells();
26f1ae17 169 clusdata[4] = fPMDrecpoint->GetClusSigmaX();
170 clusdata[5] = fPMDrecpoint->GetClusSigmaY();
171
172 fPMDclin = new AliPMDrecpoint1(idet,ismn,clusdata);
7dcaf913 173 fPMDcontin->Add(fPMDclin);
174 }
175 }
176
26f1ae17 177 AliPMDDiscriminator *pmddiscriminator = new AliPMDEmpDiscriminator();
178 pmddiscriminator->Discrimination(fPMDcontin,fPMDcontout);
7dcaf913 179
50555ba1 180 const Float_t kzpos = 361.5; // middle of the PMD
01c4d84a 181
7dcaf913 182 Int_t det,smn;
183 Float_t xpos,ypos;
7dcaf913 184 Float_t adc, ncell, rad;
01c4d84a 185 Float_t xglobal = 0., yglobal = 0., zglobal = 0;
7dcaf913 186 Float_t pid;
187
7dcaf913 188
189 Int_t nentries2 = fPMDcontout->GetEntries();
ecee2a1a 190 AliDebug(1,Form("Number of clusters coming after discrimination = %d"
191 ,nentries2));
7dcaf913 192 for (Int_t ient1 = 0; ient1 < nentries2; ient1++)
193 {
194 fPMDclout = (AliPMDclupid*)fPMDcontout->UncheckedAt(ient1);
195
196 det = fPMDclout->GetDetector();
197 smn = fPMDclout->GetSMN();
198 xpos = fPMDclout->GetClusX();
199 ypos = fPMDclout->GetClusY();
200 adc = fPMDclout->GetClusADC();
201 ncell = fPMDclout->GetClusCells();
202 rad = fPMDclout->GetClusRadius();
203 pid = fPMDclout->GetClusPID();
204
7dcaf913 205 //
206 /**********************************************************************
207 * det : Detector, 0: PRE & 1:CPV *
01c4d84a 208 * smn : Serial Module Number 0 to 23 for each plane *
7dcaf913 209 * xpos : x-position of the cluster *
210 * ypos : y-position of the cluster *
211 * THESE xpos & ypos are not the true xpos and ypos *
212 * for some of the unit modules. They are rotated. *
213 * adc : ADC contained in the cluster *
214 * ncell : Number of cells contained in the cluster *
215 * rad : radius of the cluster (1d fit) *
7dcaf913 216 **********************************************************************/
217 //
01c4d84a 218
219 fPMDutil->RectGeomCellPos(smn,xpos,ypos,xglobal,yglobal);
26f1ae17 220
221 if (det == 0)
222 {
50555ba1 223 zglobal = kzpos + 1.6; // PREshower plane
26f1ae17 224 }
225 else if (det == 1)
226 {
50555ba1 227 zglobal = kzpos - 1.7; // CPV plane
26f1ae17 228 }
229
7dcaf913 230 // Fill ESD
231
232 AliESDPmdTrack *esdpmdtr = new AliESDPmdTrack();
233
234 esdpmdtr->SetDetector(det);
26f1ae17 235 esdpmdtr->SetClusterX(xglobal);
236 esdpmdtr->SetClusterY(yglobal);
237 esdpmdtr->SetClusterZ(zglobal);
7dcaf913 238 esdpmdtr->SetClusterADC(adc);
26f1ae17 239 esdpmdtr->SetClusterCells(ncell);
7dcaf913 240 esdpmdtr->SetClusterPID(pid);
241
242 event->AddPmdTrack(esdpmdtr);
243 }
7dcaf913 244}
245//--------------------------------------------------------------------//
246void AliPMDtracker::SetVertex(Double_t vtx[3], Double_t evtx[3])
247{
248 fXvertex = vtx[0];
249 fYvertex = vtx[1];
250 fZvertex = vtx[2];
251 fSigmaX = evtx[0];
252 fSigmaY = evtx[1];
253 fSigmaZ = evtx[2];
254}
255//--------------------------------------------------------------------//
7dcaf913 256void AliPMDtracker::ResetClusters()
257{
258 if (fRecpoints) fRecpoints->Clear();
259}
260//--------------------------------------------------------------------//