1 /***************************************************************************
2 * Copyright(c) 1998-1999, 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 **************************************************************************/
16 //-----------------------------------------------------//
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) //
23 //-----------------------------------------------------//
25 #include <Riostream.h>
30 #include <TGeometry.h>
31 #include <TObjArray.h>
32 #include <TClonesArray.h>
36 #include <TParticle.h>
38 #include "AliPMDcluster.h"
39 #include "AliPMDclupid.h"
40 #include "AliPMDrecpoint1.h"
41 #include "AliPMDUtility.h"
42 #include "AliPMDDiscriminator.h"
43 #include "AliPMDEmpDiscriminator.h"
44 #include "AliPMDtracker.h"
46 #include "AliESDPmdTrack.h"
47 #include "AliESDEvent.h"
50 ClassImp(AliPMDtracker)
52 AliPMDtracker::AliPMDtracker():
54 fRecpoints(new TClonesArray("AliPMDrecpoint1", 10)),
55 fPMDcontin(new TObjArray()),
56 fPMDcontout(new TObjArray()),
57 fPMDutil(new AliPMDUtility()),
69 // Default Constructor
72 //--------------------------------------------------------------------//
73 AliPMDtracker:: AliPMDtracker(const AliPMDtracker & /* tracker */):
74 TObject(/* tracker */),
91 AliError("Copy constructor not allowed");
94 //--------------------------------------------------------------------//
95 AliPMDtracker& AliPMDtracker::operator=(const AliPMDtracker & /* tracker */)
97 // assignment operator
98 AliError("Assignment operator not allowed");
102 //--------------------------------------------------------------------//
103 AliPMDtracker::~AliPMDtracker()
110 fRecpoints->Delete();
119 fPMDcontin->Delete();
126 fPMDcontout->Clear();
128 fPMDcontout->Delete();
135 //--------------------------------------------------------------------//
136 void AliPMDtracker::LoadClusters(TTree *treein)
138 // Load the Reconstructed tree
141 //--------------------------------------------------------------------//
142 void AliPMDtracker::Clusters2Tracks(AliESDEvent *event)
144 // Converts digits to recpoints after running clustering
145 // algorithm on CPV plane and PREshower plane
152 TBranch *branch = fTreeR->GetBranch("PMDRecpoint");
155 AliError("PMDRecpoint branch not found");
158 branch->SetAddress(&fRecpoints);
160 Int_t nmodules = (Int_t) branch->GetEntries();
162 AliDebug(1,Form("Number of modules filled in treeR = %d",nmodules));
163 for (Int_t imodule = 0; imodule < nmodules; imodule++)
165 branch->GetEntry(imodule);
166 Int_t nentries = fRecpoints->GetLast();
167 AliDebug(2,Form("Number of clusters per modules filled in treeR = %d"
169 for(Int_t ient = 0; ient < nentries+1; ient++)
171 fPMDrecpoint = (AliPMDrecpoint1*)fRecpoints->UncheckedAt(ient);
172 idet = fPMDrecpoint->GetDetector();
173 ismn = fPMDrecpoint->GetSMNumber();
174 clusdata[0] = fPMDrecpoint->GetClusX();
175 clusdata[1] = fPMDrecpoint->GetClusY();
176 clusdata[2] = fPMDrecpoint->GetClusADC();
177 clusdata[3] = fPMDrecpoint->GetClusCells();
178 clusdata[4] = fPMDrecpoint->GetClusSigmaX();
179 clusdata[5] = fPMDrecpoint->GetClusSigmaY();
181 fPMDclin = new AliPMDrecpoint1(idet,ismn,clusdata);
182 fPMDcontin->Add(fPMDclin);
186 AliPMDDiscriminator *pmddiscriminator = new AliPMDEmpDiscriminator();
187 pmddiscriminator->Discrimination(fPMDcontin,fPMDcontout);
189 const Float_t kzpos = 361.5; // middle of the PMD
193 Float_t adc, ncell, rad;
194 Float_t xglobal = 0., yglobal = 0., zglobal = 0;
198 Int_t nentries2 = fPMDcontout->GetEntries();
199 AliDebug(1,Form("Number of clusters coming after discrimination = %d"
201 for (Int_t ient1 = 0; ient1 < nentries2; ient1++)
203 fPMDclout = (AliPMDclupid*)fPMDcontout->UncheckedAt(ient1);
205 det = fPMDclout->GetDetector();
206 smn = fPMDclout->GetSMN();
207 xpos = fPMDclout->GetClusX();
208 ypos = fPMDclout->GetClusY();
209 adc = fPMDclout->GetClusADC();
210 ncell = fPMDclout->GetClusCells();
211 rad = fPMDclout->GetClusRadius();
212 pid = fPMDclout->GetClusPID();
215 /**********************************************************************
216 * det : Detector, 0: PRE & 1:CPV *
217 * smn : Serial Module Number 0 to 23 for each plane *
218 * xpos : x-position of the cluster *
219 * ypos : y-position of the cluster *
220 * THESE xpos & ypos are not the true xpos and ypos *
221 * for some of the unit modules. They are rotated. *
222 * adc : ADC contained in the cluster *
223 * ncell : Number of cells contained in the cluster *
224 * rad : radius of the cluster (1d fit) *
225 **********************************************************************/
228 fPMDutil->RectGeomCellPos(smn,xpos,ypos,xglobal,yglobal);
232 zglobal = kzpos + 1.6; // PREshower plane
236 zglobal = kzpos - 1.7; // CPV plane
241 AliESDPmdTrack *esdpmdtr = new AliESDPmdTrack();
243 esdpmdtr->SetDetector(det);
244 esdpmdtr->SetClusterX(xglobal);
245 esdpmdtr->SetClusterY(yglobal);
246 esdpmdtr->SetClusterZ(zglobal);
247 esdpmdtr->SetClusterADC(adc);
248 esdpmdtr->SetClusterCells(ncell);
249 esdpmdtr->SetClusterPID(pid);
251 event->AddPmdTrack(esdpmdtr);
254 //--------------------------------------------------------------------//
255 void AliPMDtracker::SetVertex(Double_t vtx[3], Double_t evtx[3])
264 //--------------------------------------------------------------------//
265 void AliPMDtracker::ResetClusters()
267 if (fRecpoints) fRecpoints->Clear();
269 //--------------------------------------------------------------------//