static void SetLimitNoTracklets(Bool_t b) { fgLimitNoTracklets = b; }
static Bool_t GetLimitNoTracklets() { return fgLimitNoTracklets; }
+ static void SetMaxNoTracklets(Int_t max) { fgMaxNoTracklets = max; }
+ static Int_t GetMaxNoTracklets() { return fgMaxNoTracklets; }
+
// z-channel map
Int_t GenerateZChannelMap(); // could have different modes (for beam-beam, cosmics, ...)
Bool_t DisplayZChannelMap(Int_t zchannel = -1, Int_t subch = 0) const;
// instead of geometry derived quantities
static Bool_t fgUseGTUmerge; // use merge algorithm exactly as in hardware
static Bool_t fgLimitNoTracklets; // limit the number of tracklets per layer
+ static Int_t fgMaxNoTracklets; // max number of tracklets per layer if limited
static const Bool_t fgZChannelMap[5][16][6][16]; // z-channel tables as in GTU
static const Float_t fgkRadius[6]; // layer radius as used in the GTU code
static const Float_t fgkThickness; // drift length as used in the GTU code
delete [] fTracks;
for (Int_t layer = 0; layer < fGtuParam->GetNLayers(); layer++) {
delete [] fZChannelTracklets[layer];
- // delete [] fTrackletsPostInput[layer];
+ delete fTrackletsPostInput[layer];
}
delete [] fZChannelTracklets;
- // delete [] fTrackletsPostInput;
+ delete [] fTrackletsPostInput;
for (Int_t iLink = 0; iLink < fGtuParam->GetNLinks(); iLink++) {
delete fTracklets[iLink];
// ----- Z-channel units -----
AliDebug(1,"--------- Running Z-channel units ----------");
for (Int_t layer = 0; layer < fGtuParam->GetNLayers(); layer++) {
- fZChannelTracklets[layer] = new TList[fGtuParam->GetNZChannels()];
if (!RunZChannelUnit(layer)) {
AliError(Form("Z-Channel unit in layer %i failed", layer));
return kFALSE;
Int_t iTrkl0 = 0; // A-side tracklet
Int_t iTrkl1 = 0; // B-side tracklet
- while ((iTrkl0 < fTracklets[2*layer + 0]->GetEntriesFast()) || (iTrkl1 < fTracklets[2*layer + 1]->GetEntriesFast())) {
+ Int_t nTracklets = 0;
+ while ((!fGtuParam->GetLimitNoTracklets() ||
+ (nTracklets < fGtuParam->GetMaxNoTracklets())) &&
+ ((iTrkl0 < fTracklets[2*layer + 0]->GetEntriesFast()) ||
+ (iTrkl1 < fTracklets[2*layer + 1]->GetEntriesFast()))) {
if (iTrkl1 >= fTracklets[2*layer + 1]->GetEntriesFast()) {
fTrackletsPostInput[layer]->AddLast(fTracklets[2*layer + 0]->At(iTrkl0));
iTrkl0++;
}
}
}
+ ++nTracklets;
}
TIter next(fTrackletsPostInput[layer]);
track->SetRefLayerIdx(refLayerIdx);
fTracks[zch][refLayerIdx].Add(track);
}
+ else
+ delete track;
}
if ( (nUnc != 0) && (nUnc + nHits >= 4) ) // could this position of the reference layer give some track //??? special check in case of hit?
AliTRDtrackGTU *trkStage1 = 0x0;
do {
+ if (trkStage0 != trkStage1)
+ delete trkStage0;
+
trkStage0 = (AliTRDtrackGTU*) next();
Bool_t tracksEqual = kFALSE;
}
if (tracksEqual) {
- if (trkStage0->GetNTracklets() >= trkStage1->GetNTracklets())
- trkStage1 = trkStage0;
+ if (trkStage0->GetNTracklets() >= trkStage1->GetNTracklets()) {
+ delete trkStage1;
+ trkStage1 = trkStage0;
+ }
}
else {
if (trkStage1 != 0x0)