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 // Alex Bercuci <A.Bercuci@gsi.de> //
24 // Markus Fasel <M.Fasel@gsi.de> //
26 ////////////////////////////////////////////////////////////////////////////
28 #include "AliTrackReference.h"
29 #include "AliExternalTrackParam.h"
30 #include "AliTRDseedV1.h"
31 #include "AliTRDtrackV1.h"
36 #include "AliTRDtrackInfo.h"
38 ClassImp(AliTRDtrackInfo)
39 ClassImp(AliTRDtrackInfo::AliMCinfo)
40 ClassImp(AliTRDtrackInfo::AliESDinfo)
42 //___________________________________________________
43 AliTRDtrackInfo::AliTRDtrackInfo():
52 // Default constructor
57 //___________________________________________________
58 AliTRDtrackInfo::AliTRDtrackInfo(const AliTRDtrackInfo &trdInfo):
59 TObject((const TObject&)trdInfo)
60 ,fNClusters(trdInfo.fNClusters)
63 ,fMC(new AliMCinfo(*trdInfo.fMC))
70 if(trdInfo.fOP) fOP = new AliExternalTrackParam(*trdInfo.fOP);
72 if(trdInfo.fMC) fMC = new AliMCinfo(*trdInfo.fMC);
74 if(trdInfo.fTRDtrack){
75 fTRDtrack = new AliTRDtrackV1(*trdInfo.fTRDtrack);
76 if(trdInfo.fTRDtrack->IsOwner()) fTRDtrack->SetOwner();
80 //___________________________________________________
81 AliTRDtrackInfo::AliMCinfo::AliMCinfo()
87 memset(fTrackRefs, 0, sizeof(AliTrackReference *) * 12);
90 //___________________________________________________
91 AliTRDtrackInfo::AliMCinfo::AliMCinfo(const AliMCinfo &mc)
94 ,fNTrackRefs(mc.fNTrackRefs)
96 memset(fTrackRefs, 0, sizeof(AliTrackReference *) * 12);
97 for(Int_t ien = 0; ien < 12; ien++){
98 if(mc.fTrackRefs[ien])
99 fTrackRefs[ien] = new AliTrackReference(*(mc.fTrackRefs[ien]));
103 //___________________________________________________
104 AliTRDtrackInfo::AliESDinfo::AliESDinfo()
111 memset(fTRDr, 0, AliPID::kSPECIES*sizeof(Double32_t));
114 //___________________________________________________
115 AliTRDtrackInfo::AliESDinfo::AliESDinfo(const AliESDinfo &esd)
117 ,fStatus(esd.fStatus)
118 ,fTRDpidQuality(esd.fTRDpidQuality)
119 ,fTRDnSlices(esd.fTRDnSlices)
122 memcpy(fTRDr, esd.fTRDr, AliPID::kSPECIES*sizeof(Double32_t));
125 fTRDslices = new Double32_t[fTRDnSlices];
126 memcpy(fTRDslices, esd.fTRDslices, fTRDnSlices*sizeof(Double32_t));
131 //___________________________________________________
132 AliTRDtrackInfo::~AliTRDtrackInfo()
139 if(fTRDtrack) delete fTRDtrack;
142 //___________________________________________________
143 AliTRDtrackInfo::AliMCinfo::~AliMCinfo()
146 for(Int_t ien = 0; ien < 12; ien++){
147 if(fTrackRefs[ien]) delete fTrackRefs[ien];
148 fTrackRefs[ien] = 0x0;
152 //___________________________________________________
153 AliTRDtrackInfo::AliESDinfo::~AliESDinfo()
156 delete [] fTRDslices;
163 //___________________________________________________
164 AliTRDtrackInfo& AliTRDtrackInfo::operator=(const AliTRDtrackInfo &trdInfo)
170 fNClusters = trdInfo.fNClusters;
176 fOP = new AliExternalTrackParam(*trdInfo.fOP);
178 new(fOP) AliExternalTrackParam(*trdInfo.fOP);
183 fMC = new AliMCinfo(*trdInfo.fMC);
185 new(fMC) AliMCinfo(*trdInfo.fMC);
188 if(trdInfo.fTRDtrack){
190 fTRDtrack = new AliTRDtrackV1(*trdInfo.fTRDtrack);
192 new(fTRDtrack) AliTRDtrackV1(*trdInfo.fTRDtrack);
193 if(trdInfo.fTRDtrack->IsOwner()) fTRDtrack->SetOwner();
199 //___________________________________________________
200 AliTRDtrackInfo::AliMCinfo& AliTRDtrackInfo::AliMCinfo::operator=(const AliMCinfo &mc)
204 fNTrackRefs = mc.fNTrackRefs;
206 AliTrackReference **itr = &fTrackRefs[0];
207 AliTrackReference* const *jtr = &mc.fTrackRefs[0];
208 for(Int_t ien = 0; ien < 12; ien++, itr++, jtr++){
210 if(!(*itr)) (*itr) = new AliTrackReference(*(*jtr));
211 else new(&(*itr)) AliTrackReference(*(*jtr));
217 //___________________________________________________
218 AliTRDtrackInfo::AliESDinfo& AliTRDtrackInfo::AliESDinfo::operator=(const AliESDinfo &esd)
221 fStatus = esd.fStatus;
222 fTRDpidQuality = esd.fTRDpidQuality;
223 fTRDnSlices = esd.fTRDnSlices;
226 memcpy(fTRDr, esd.fTRDr, AliPID::kSPECIES*sizeof(Double32_t));
229 fTRDslices = new Double32_t[fTRDnSlices];
230 memcpy(fTRDslices, esd.fTRDslices, fTRDnSlices*sizeof(Double32_t));
236 //___________________________________________________
237 void AliTRDtrackInfo::Delete(const Option_t *)
244 if(fOP) delete fOP; fOP = 0x0;
245 if(fMC) delete fMC; fMC = 0x0;
246 if(fTRDtrack) delete fTRDtrack; fTRDtrack = 0x0;
250 //___________________________________________________
251 void AliTRDtrackInfo::SetTRDtrack(const AliTRDtrackV1 *track)
258 fTRDtrack = new AliTRDtrackV1(*track);
260 new(fTRDtrack)AliTRDtrackV1(*track);
261 fTRDtrack->SetOwner();
262 // Make a copy for the object in order to avoid ownership problems
265 //___________________________________________________
266 void AliTRDtrackInfo::AddTrackRef(const AliTrackReference *tref)
269 // Add track reference
273 if(fMC->fNTrackRefs >= 12){
277 // Make a copy for the object in order to avoid ownership problems
278 fMC->fTrackRefs[fMC->fNTrackRefs++] = new AliTrackReference(*tref);
281 //___________________________________________________
282 AliTrackReference * AliTRDtrackInfo::GetTrackRef(Int_t idx) const
285 // Returns a track reference
288 return (idx>=0 && idx < 12) ? fMC->fTrackRefs[idx] : 0x0;
291 //___________________________________________________
292 Int_t AliTRDtrackInfo::GetNumberOfClusters() const
295 // Returns the number of clusters
299 if(!fTRDtrack) return 0;
300 if(fTRDtrack->GetNumberOfTracklets() == 0) return n;
301 AliTRDseedV1 *tracklet = 0x0;
302 for(Int_t ip=0; ip<6; ip++){
303 if(!(tracklet = const_cast<AliTRDseedV1 *>(fTRDtrack->GetTracklet(ip)))) continue;
310 //___________________________________________________
311 void AliTRDtrackInfo::SetOuterParam(const AliExternalTrackParam *op)
314 // Set outer track parameters
318 if(fOP) new(fOP) AliExternalTrackParam(*op);
320 fOP = new AliExternalTrackParam(*op);
323 //___________________________________________________
324 Int_t AliTRDtrackInfo::GetNTracklets() const
327 // Return the number of tracklets
330 if(!fTRDtrack) return 0x0;
331 return fTRDtrack->GetNumberOfTracklets();
334 //___________________________________________________
335 void AliTRDtrackInfo::SetSlices(Int_t n, Double32_t *s)
337 if(fESD.fTRDnSlices != n){
338 fESD.fTRDnSlices = 0;
339 delete [] fESD.fTRDslices;
340 fESD.fTRDslices = 0x0;
343 if(!fESD.fTRDnSlices){
344 fESD.fTRDnSlices = n;
345 fESD.fTRDslices = new Double32_t[n];
348 memcpy(fESD.fTRDslices, s, n*sizeof(Double32_t));