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 /* $Id: AliTRDtrackInfo.cxx 27496 2008-07-22 08:35:45Z cblume $ */
18 ////////////////////////////////////////////////////////////////////////////
20 // Reconstruction QA //
23 // Markus Fasel <M.Fasel@gsi.de> //
25 ////////////////////////////////////////////////////////////////////////////
27 #include "AliTrackReference.h"
28 #include "AliExternalTrackParam.h"
29 #include "AliTRDseedV1.h"
30 #include "AliTRDtrackV1.h"
35 #include "AliTRDtrackInfo.h"
37 ClassImp(AliTRDtrackInfo)
39 //___________________________________________________
40 AliTRDtrackInfo::AliTRDtrackInfo():
52 // Default constructor
56 memset(fTrackRefs, 0, sizeof(AliTrackReference *) * 12);
59 //___________________________________________________
60 AliTRDtrackInfo::AliTRDtrackInfo(Int_t pdg):
76 memset(fTrackRefs, 0, sizeof(AliTrackReference *) * 12);
79 //___________________________________________________
80 AliTRDtrackInfo::AliTRDtrackInfo(const AliTRDtrackInfo &trdInfo):
81 TObject((const TObject&)trdInfo)
83 ,fStatus(trdInfo.fStatus)
85 ,fLabel(trdInfo.fLabel)
86 ,fNClusters(trdInfo.fNClusters)
87 ,fNTrackRefs(trdInfo.fNTrackRefs)
95 memset(fTrackRefs, 0, sizeof(AliTrackReference *) * 12);
96 for(Int_t ien = 0; ien < 12; ien++){
97 if(trdInfo.fTrackRefs[ien])
98 fTrackRefs[ien] = new AliTrackReference(*(trdInfo.fTrackRefs[ien]));
100 if(trdInfo.fOP) fOP = new AliExternalTrackParam(*trdInfo.fOP);
101 if(trdInfo.fTRDtrack) fTRDtrack = new AliTRDtrackV1(*trdInfo.fTRDtrack);
104 //___________________________________________________
105 AliTRDtrackInfo::~AliTRDtrackInfo()
112 for(Int_t ien = 0; ien < 12; ien++){
113 if(fTrackRefs[ien]) delete fTrackRefs[ien];
115 if(fTRDtrack) delete fTRDtrack;
119 //___________________________________________________
120 AliTRDtrackInfo& AliTRDtrackInfo::operator=(const AliTRDtrackInfo &trdInfo)
127 fStatus = trdInfo.fStatus;
129 fLabel = trdInfo.fLabel;
130 fNClusters = trdInfo.fNClusters;
131 fNTrackRefs = trdInfo.fNTrackRefs;
134 memset(fTrackRefs, 0, sizeof(AliTrackReference *) * 12);
135 for(Int_t ien = 0; ien < 12; ien++){
136 if(trdInfo.fTrackRefs[ien])
138 fTrackRefs[ien] = new AliTrackReference(*(trdInfo.fTrackRefs[ien]));
140 new(&fTrackRefs[ien]) AliTrackReference(*(trdInfo.fTrackRefs[ien]));
144 fOP = new AliExternalTrackParam(*trdInfo.fOP);
146 new(fOP) AliExternalTrackParam(*trdInfo.fOP);
148 if(trdInfo.fTRDtrack){
150 fTRDtrack = new AliTRDtrackV1(*trdInfo.fTRDtrack);
152 new(fTRDtrack) AliTRDtrackV1(*trdInfo.fTRDtrack);
158 //___________________________________________________
159 void AliTRDtrackInfo::Delete(const Option_t *)
171 if(fOP) delete fOP; fOP = 0x0;
172 if(fTRDtrack) delete fTRDtrack; fTRDtrack = 0x0;
173 for(Int_t ien = 0; ien < 12; ien++){
175 delete fTrackRefs[ien];
177 memset(fTrackRefs, 0, sizeof(AliTrackReference *) * 12);
181 //___________________________________________________
182 void AliTRDtrackInfo::SetTRDtrack(const AliTRDtrackV1 *track)
189 fTRDtrack = new AliTRDtrackV1(*track);
191 new(fTRDtrack)AliTRDtrackV1(*track);
192 fTRDtrack->SetOwner();
193 // Make a copy for the object in order to avoid ownership problems
196 //___________________________________________________
197 void AliTRDtrackInfo::AddTrackRef(const AliTrackReference *tref)
200 // Add track reference
203 if(fNTrackRefs >= 12){
207 // Make a copy for the object in order to avoid ownership problems
208 fTrackRefs[fNTrackRefs++] = new AliTrackReference(*tref);
211 //___________________________________________________
212 AliTRDseedV1* AliTRDtrackInfo::GetTracklet(Int_t idx) const
215 // Returns a tracklet
218 if(!fTRDtrack) return 0x0;
219 return idx < 6 ? const_cast<AliTRDseedV1 *>(fTRDtrack->GetTracklet(idx)) : 0x0;
222 //___________________________________________________
223 AliTrackReference * AliTRDtrackInfo::GetTrackRef(Int_t idx) const
226 // Returns a track reference
229 return idx < 12 ? fTrackRefs[idx] : 0x0;
232 //___________________________________________________
233 Int_t AliTRDtrackInfo::GetNumberOfClusters() const
236 // Returns the number of clusters
240 if(!fTRDtrack) return 0;
241 if(fTRDtrack->GetNumberOfTracklets() == 0) return n;
242 AliTRDseedV1 *tracklet = 0x0;
243 for(Int_t ip=0; ip<6; ip++){
244 if(!(tracklet = const_cast<AliTRDseedV1 *>(fTRDtrack->GetTracklet(ip)))) continue;
251 //___________________________________________________
252 void AliTRDtrackInfo::SetOuterParam(const AliExternalTrackParam *op)
255 // Set outer track parameters
259 if(fOP) new(fOP) AliExternalTrackParam(*op);
261 fOP = new AliExternalTrackParam(*op);
264 //___________________________________________________
265 Int_t AliTRDtrackInfo::GetNTracklets() const
268 // Return the number of tracklets
271 if(!fTRDtrack) return 0x0;
272 return fTRDtrack->GetNumberOfTracklets();