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 ////////////////////////////////////////////////////////////////////////////
20 // Author: J. Klein (Jochen.Klein@cern.ch) //
22 ////////////////////////////////////////////////////////////////////////////
24 /* $Id: AliTRDtrackGTU.cxx 27566 2008-07-24 15:31:08Z cblume $ */
27 #include "TObjArray.h"
31 #include "AliESDTrdTrack.h"
33 #include "AliTRDgtuParam.h"
34 #include "AliTRDtrackGTU.h"
35 #include "AliTRDtrackletGTU.h"
36 #include "AliTRDtrackletMCM.h"
37 #include "AliESDTrdTrack.h"
39 ClassImp(AliTRDtrackGTU)
41 AliTRDtrackGTU::AliTRDtrackGTU() :
59 fTracklets = new TClonesArray("AliTRDtrackletGTU", 6);
60 for (Int_t iTracklet = 0; iTracklet < 6; iTracklet++)
61 new ((*fTracklets)[iTracklet]) AliTRDtrackletGTU();
62 // fTracklets->BypassStreamer(kFALSE);
65 AliTRDtrackGTU::~AliTRDtrackGTU()
73 void AliTRDtrackGTU::AddTracklet(const AliTRDtrackletGTU * const tracklet, Int_t layer)
75 // add a tracklet to this track
77 if ( (fTrackletMask & (1 << layer)) != 0 ) {
78 AliError(Form("Only one tracklet per layer (%i) possible! Mask: 0x%02x", layer, fTrackletMask));
82 new ((*fTracklets)[layer]) AliTRDtrackletGTU(*tracklet);
84 fTrackletMask |= (1 << layer);
87 AliTRDtrackletGTU* AliTRDtrackGTU::GetTracklet(Int_t layer) const
89 // get a pointer to the tracklet in the layer specified
91 if (IsTrackletInLayer(layer))
92 return ((AliTRDtrackletGTU*) (*fTracklets)[layer]);
97 Int_t AliTRDtrackGTU::GetNTracklets() const
99 // returns the number of tracklets in this track
104 Bool_t AliTRDtrackGTU::IsTrackletInLayer(Int_t layer) const
106 // checks for a tracklet in the given layer
108 if ( (GetTrackletMask() & (1 << layer)) != 0)
114 void AliTRDtrackGTU::SetFitParams(Float_t a, Float_t b, Float_t c)
116 // set the fit parameters
123 Int_t AliTRDtrackGTU::GetZSubChannel()
125 // returns the z-subchannel
127 if (fZSubChannel < 0) {
128 for (Int_t layer = 0; layer < AliTRDgtuParam::GetNLayers(); layer++)
130 if (IsTrackletInLayer(layer))
131 fZSubChannel = ((AliTRDtrackletGTU*) (*fTracklets)[layer])->GetSubChannel(GetZChannel());
137 Int_t AliTRDtrackGTU::GetYapprox()
139 // returns an approximated y-position for the track
140 // taken from the projected y-position of the tracklet in the reference layer
141 // in which the track was found
143 if ((fRefLayerIdx > -1) && (fRefLayerIdx < AliTRDgtuParam::GetNRefLayers()))
144 return ((AliTRDtrackletGTU*) (*fTracklets)[AliTRDgtuParam::GetRefLayer(fRefLayerIdx)])->GetYProj();
149 AliESDTrdTrack* AliTRDtrackGTU::CreateTrdTrack() const
151 // creates an AliESDTrdTrack to be added to the ESD
153 AliESDTrdTrack *trk = new AliESDTrdTrack();
154 trk->SetA((Int_t) fA);
155 trk->SetLayerMask(fTrackletMask);
157 trk->SetB((Int_t) fB);
158 trk->SetStack(fStack);
159 trk->SetSector(fSector);
161 trk->SetLabel(fLabel);
163 for (Int_t iLayer = 0; iLayer < AliTRDgtuParam::GetNLayers(); iLayer++) {
164 AliTRDtrackletGTU *trklGTU = GetTracklet(iLayer);
166 trk->SetTrackletIndex(trklGTU->GetIndex(), iLayer);
167 AliESDTrdTracklet *trkl = trklGTU->GetTrackletESD();
169 trk->AddTrackletReference(trkl, iLayer);
176 Bool_t AliTRDtrackGTU::CookLabel()
178 TH1F *h = new TH1F("trkref", "trkref", 100000, 0, 100000);
179 for (Int_t iTracklet = 0; iTracklet < 6; iTracklet++) {
180 if (!IsTrackletInLayer(iTracklet))
182 h->Fill( ((AliTRDtrackletGTU*) (*fTracklets)[iTracklet])->GetLabel());
184 if (h->GetEntries() > 0)
185 fLabel = h->GetMaximumBin() - 1;
189 return (fLabel >= 0);