#include "TClass.h"
#include "TH1F.h"
+#include "AliESDTrdTrack.h"
#include "AliLog.h"
#include "AliTRDgtuParam.h"
#include "AliTRDtrackGTU.h"
#include "AliESDTrdTrack.h"
ClassImp(AliTRDtrackGTU)
-
+
AliTRDtrackGTU::AliTRDtrackGTU() :
TObject(),
fStack(-1),
fSector(-1),
- fPt(0),
fPID(0),
fTracklets(0x0),
fTrackletMask(0),
delete fTracklets;
}
-void AliTRDtrackGTU::AddTracklet(AliTRDtrackletGTU *tracklet, Int_t layer)
+void AliTRDtrackGTU::AddTracklet(const AliTRDtrackletGTU * const tracklet, Int_t layer)
{
// add a tracklet to this track
fTrackletMask |= (1 << layer);
}
-AliTRDtrackletGTU* AliTRDtrackGTU::GetTracklet(Int_t layer)
+AliTRDtrackletGTU* AliTRDtrackGTU::GetTracklet(Int_t layer) const
{
// get a pointer to the tracklet in the layer specified
- return ((AliTRDtrackletGTU*) (*fTracklets)[layer]);
+ if (IsTrackletInLayer(layer))
+ return ((AliTRDtrackletGTU*) (*fTracklets)[layer]);
+ else
+ return 0x0;
}
Int_t AliTRDtrackGTU::GetNTracklets() const
return fNTracklets;
}
-Bool_t AliTRDtrackGTU::IsTrackletInLayer(Int_t layer) const
+Bool_t AliTRDtrackGTU::IsTrackletInLayer(Int_t layer) const
{
// checks for a tracklet in the given layer
if ( (GetTrackletMask() & (1 << layer)) != 0)
return kTRUE;
- else
+ else
return kFALSE;
}
-void AliTRDtrackGTU::SetFitParams(Float_t a, Float_t b, Float_t c)
+void AliTRDtrackGTU::SetFitParams(Float_t a, Float_t b, Float_t c)
{
// set the fit parameters
- fA = a;
+ fA = a;
fB = b;
fC = c;
}
-Int_t AliTRDtrackGTU::GetZSubChannel()
+Int_t AliTRDtrackGTU::GetZSubChannel()
{
// returns the z-subchannel
return fZSubChannel;
}
-Int_t AliTRDtrackGTU::GetYapprox()
+Int_t AliTRDtrackGTU::GetYapprox()
{
-// returns an approximated y-position for the track
-
- for (Int_t layer = 0; layer < AliTRDgtuParam::GetNLayers(); layer++)
- {
- if (IsTrackletInLayer(layer))
- return ((AliTRDtrackletGTU*) (*fTracklets)[layer])->GetYProj();
- }
- return 0;
+ // returns an approximated y-position for the track
+ // taken from the projected y-position of the tracklet in the reference layer
+ // in which the track was found
+
+ if ((fRefLayerIdx > -1) && (fRefLayerIdx < AliTRDgtuParam::GetNRefLayers()))
+ return ((AliTRDtrackletGTU*) (*fTracklets)[AliTRDgtuParam::GetRefLayer(fRefLayerIdx)])->GetYProj();
+ else
+ return 0;
}
AliESDTrdTrack* AliTRDtrackGTU::CreateTrdTrack() const
{
-// creates an AliESDTrdTrack to be added to the ESD
-
- AliESDTrdTrack *trk = new AliESDTrdTrack();
- trk->SetPt(1./128. * fPt);
- trk->SetPID(fPID);
- trk->SetDetector((Char_t) (fSector * 5 + fStack));
- if (fLabel >= 0)
- trk->SetLabel(fLabel);
- AliInfo(Form("setting detector to: %i (sector: %i, stack: %i), readback: %i", fSector * 30 + fStack * 6, fSector, fStack, trk->GetDetector()));
- return trk;
+ // creates an AliESDTrdTrack to be added to the ESD
+
+ AliESDTrdTrack *trk = new AliESDTrdTrack();
+ trk->SetA((Int_t) fA);
+ trk->SetLayerMask(fTrackletMask);
+ trk->SetPID(fPID);
+ trk->SetB((Int_t) fB);
+ trk->SetStack(fStack);
+ trk->SetSector(fSector);
+ if (fLabel >= 0)
+ trk->SetLabel(fLabel);
+
+ for (Int_t iLayer = 0; iLayer < AliTRDgtuParam::GetNLayers(); iLayer++) {
+ AliTRDtrackletGTU *trklGTU = GetTracklet(iLayer);
+ if (trklGTU) {
+ trk->SetTrackletIndex(trklGTU->GetIndex(), iLayer);
+ AliESDTrdTracklet *trkl = trklGTU->GetTrackletESD();
+ if (trkl)
+ trk->AddTrackletReference(trkl, iLayer);
+ }
+ }
+
+ return trk;
}
-Bool_t AliTRDtrackGTU::CookLabel()
+Bool_t AliTRDtrackGTU::CookLabel()
{
TH1F *h = new TH1F("trkref", "trkref", 100000, 0, 100000);
for (Int_t iTracklet = 0; iTracklet < 6; iTracklet++) {
+ if (!IsTrackletInLayer(iTracklet))
+ continue;
h->Fill( ((AliTRDtrackletGTU*) (*fTracklets)[iTracklet])->GetLabel());
}
if (h->GetEntries() > 0)
- fLabel = h->GetMaximumBin();
- else
+ fLabel = h->GetMaximumBin() - 1;
+ else
fLabel = -1;
delete h;
return (fLabel >= 0);