]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TRD/AliTRDtrackGTU.cxx
various updates in the resolution performance/calibration tasks
[u/mrichter/AliRoot.git] / TRD / AliTRDtrackGTU.cxx
CommitLineData
52c19022 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// A GTU track //
19// //
20// Author: J. Klein (Jochen.Klein@cern.ch) //
21// //
22////////////////////////////////////////////////////////////////////////////
23
24/* $Id: AliTRDtrackGTU.cxx 27566 2008-07-24 15:31:08Z cblume $ */
25
26#include "TObject.h"
27#include "TObjArray.h"
4cc89512 28#include "TClass.h"
29#include "TH1F.h"
52c19022 30
31#include "AliLog.h"
32#include "AliTRDgtuParam.h"
33#include "AliTRDtrackGTU.h"
34#include "AliTRDtrackletGTU.h"
4cc89512 35#include "AliTRDtrackletMCM.h"
52c19022 36#include "AliESDTrdTrack.h"
37
38ClassImp(AliTRDtrackGTU)
39
40AliTRDtrackGTU::AliTRDtrackGTU() :
41 TObject(),
42 fStack(-1),
43 fSector(-1),
44 fPt(0),
45 fPID(0),
46 fTracklets(0x0),
47 fTrackletMask(0),
48 fNTracklets(0),
49 fRefLayerIdx(-1),
50 fZChannel(-1),
51 fZSubChannel(-1),
52 fA(0),
53 fB(0),
4cc89512 54 fC(0),
55 fLabel(-1)
52c19022 56{
4cc89512 57// default ctor
58
52c19022 59 fTracklets = new TClonesArray("AliTRDtrackletGTU", 6);
60 for (Int_t iTracklet = 0; iTracklet < 6; iTracklet++)
61 new ((*fTracklets)[iTracklet]) AliTRDtrackletGTU();
62// fTracklets->BypassStreamer(kFALSE);
63}
64
65AliTRDtrackGTU::~AliTRDtrackGTU()
66{
4cc89512 67// dtor
68
52c19022 69 fTracklets->Delete();
70 delete fTracklets;
71}
72
73void AliTRDtrackGTU::AddTracklet(AliTRDtrackletGTU *tracklet, Int_t layer)
74{
4cc89512 75// add a tracklet to this track
76
52c19022 77 if ( (fTrackletMask & (1 << layer)) != 0 ) {
78 AliError(Form("Only one tracklet per layer (%i) possible! Mask: 0x%02x", layer, fTrackletMask));
79 return;
80 }
81
82 new ((*fTracklets)[layer]) AliTRDtrackletGTU(*tracklet);
83 fNTracklets++;
84 fTrackletMask |= (1 << layer);
85}
86
87AliTRDtrackletGTU* AliTRDtrackGTU::GetTracklet(Int_t layer)
88{
4cc89512 89// get a pointer to the tracklet in the layer specified
90
80f93426 91 if (IsTrackletInLayer(layer))
92 return ((AliTRDtrackletGTU*) (*fTracklets)[layer]);
93 else
94 return 0x0;
52c19022 95}
96
97Int_t AliTRDtrackGTU::GetNTracklets() const
98{
4cc89512 99// returns the number of tracklets in this track
100
52c19022 101 return fNTracklets;
102}
103
104Bool_t AliTRDtrackGTU::IsTrackletInLayer(Int_t layer) const
105{
4cc89512 106// checks for a tracklet in the given layer
107
52c19022 108 if ( (GetTrackletMask() & (1 << layer)) != 0)
109 return kTRUE;
110 else
111 return kFALSE;
112}
113
114void AliTRDtrackGTU::SetFitParams(Float_t a, Float_t b, Float_t c)
115{
4cc89512 116// set the fit parameters
117
52c19022 118 fA = a;
119 fB = b;
120 fC = c;
121}
122
123Int_t AliTRDtrackGTU::GetZSubChannel()
124{
4cc89512 125// returns the z-subchannel
126
52c19022 127 if (fZSubChannel < 0) {
128 for (Int_t layer = 0; layer < AliTRDgtuParam::GetNLayers(); layer++)
129 {
130 if (IsTrackletInLayer(layer))
131 fZSubChannel = ((AliTRDtrackletGTU*) (*fTracklets)[layer])->GetSubChannel(GetZChannel());
132 }
133 }
134 return fZSubChannel;
135}
136
137Int_t AliTRDtrackGTU::GetYapprox()
138{
4cc89512 139// returns an approximated y-position for the track
140
52c19022 141 for (Int_t layer = 0; layer < AliTRDgtuParam::GetNLayers(); layer++)
142 {
143 if (IsTrackletInLayer(layer))
144 return ((AliTRDtrackletGTU*) (*fTracklets)[layer])->GetYProj();
145 }
146 return 0;
147}
148
149AliESDTrdTrack* AliTRDtrackGTU::CreateTrdTrack() const
150{
4cc89512 151// creates an AliESDTrdTrack to be added to the ESD
152
52c19022 153 AliESDTrdTrack *trk = new AliESDTrdTrack();
154 trk->SetPt(1./128. * fPt);
155 trk->SetPID(fPID);
4cc89512 156 trk->SetDetector((Char_t) (fSector * 5 + fStack));
157 if (fLabel >= 0)
158 trk->SetLabel(fLabel);
159 AliInfo(Form("setting detector to: %i (sector: %i, stack: %i), readback: %i", fSector * 30 + fStack * 6, fSector, fStack, trk->GetDetector()));
52c19022 160 return trk;
161}
4cc89512 162
163Bool_t AliTRDtrackGTU::CookLabel()
164{
165 TH1F *h = new TH1F("trkref", "trkref", 100000, 0, 100000);
166 for (Int_t iTracklet = 0; iTracklet < 6; iTracklet++) {
80f93426 167 if (!IsTrackletInLayer(iTracklet))
168 continue;
4cc89512 169 h->Fill( ((AliTRDtrackletGTU*) (*fTracklets)[iTracklet])->GetLabel());
170 }
171 if (h->GetEntries() > 0)
80f93426 172 fLabel = h->GetMaximumBin() - 1;
4cc89512 173 else
174 fLabel = -1;
175 delete h;
176 return (fLabel >= 0);
177}