: TObject(),
fRunLoader(rl),
fFeeParam(AliTRDfeeParam::Instance()),
- fTMU(0x0),
+ fTMU(new AliTRDgtuTMU()),
fTrackletArray(0x0)
{
if (fTrackletArray)
fTrackletArray->Clear();
delete fTrackletArray;
+ delete fTMU;
}
Bool_t AliTRDgtuSim::RunGTUFromTrackletFile(TString filename, Int_t event, Int_t noev)
Int_t iEvent = -1;
Int_t evcnt = -1;
- fTMU = 0x0;
+ fTMU->Reset();
+ Bool_t pendingTracklets = kFALSE;;
TClonesArray trklArray("AliTRDtrackletWord", 100);
TClonesArray trklArrayGTU("AliTRDtrackletGTU", 100);
if ((iEvent != iEventPrev) ||
(iStack != iStackPrev) ||
(iSec != iSecPrev)) {
- if(fTMU) {
+ if(pendingTracklets) {
TList *listOfTracks = new TList();
fTMU->SetStack(iStackPrev);
fTMU->SetSector(iSecPrev);
WriteTracksToDataFile(listOfTracks, iEventPrev);
if (listOfTracks->GetEntries() > 0)
AliDebug(2,Form(" %4.1f GeV/c", ((AliTRDtrackGTU*) listOfTracks->At(0))->GetPt() ));
- delete fTMU;
- fTMU = new AliTRDgtuTMU();
+ fTMU->Reset();
delete listOfTracks;
- listOfTracks = 0x0;
} else {
- fTMU = new AliTRDgtuTMU();
+ pendingTracklets = kTRUE;
}
iStackPrev = iStack;
iSecPrev = iSec;
delete tokens;
}
- if (fTMU && evcnt < noev) {
+ if (pendingTracklets && evcnt < noev) {
TList *listOfTracks = new TList();
fTMU->SetStack(iStackPrev);
fTMU->SetSector(iSecPrev);
fTMU->RunTMU(listOfTracks);
WriteTracksToDataFile(listOfTracks, iEventPrev);
- delete fTMU;
delete listOfTracks;
- fTMU = 0x0;
+ fTMU->Reset();
}
AliInfo(Form("Analyzed %i events", evcnt));
Int_t iStack = -1;
Int_t iLink = -1;
- if (fTMU) {
- delete fTMU;
- fTMU = 0x0;
- }
-
+ fTMU->Reset();
+ Bool_t pendingTracklets = kFALSE;
TList *listOfTracks = new TList();
TIter next(fTrackletArray);
-
while (AliTRDtrackletGTU *trkl = (AliTRDtrackletGTU*) next()) {
iSec = trkl->GetDetector() / 30;
iStack = (trkl->GetDetector() % 30) / 6;
iLink = trkl->GetHCId() % 12;
if (iStack != iStackPrev || iSec != iSecPrev) {
- if(fTMU) {
+ if(pendingTracklets) {
fTMU->SetStack(iStackPrev);
fTMU->SetSector(iSecPrev);
fTMU->RunTMU(listOfTracks, 0x0, outLabel);
- WriteTracksToLoader(listOfTracks);
+ if (loader)
+ WriteTracksToLoader(listOfTracks);
WriteTracksToESD(listOfTracks, esd);
+ listOfTracks->Clear();
fTMU->Reset();
- listOfTracks->Delete();
} else {
- fTMU = new AliTRDgtuTMU();
+ pendingTracklets = kTRUE;
}
iStackPrev = iStack;
iSecPrev = iSec;
}
}
- if (fTMU) {
+ if (pendingTracklets) {
fTMU->SetStack(iStackPrev);
fTMU->SetSector(iSecPrev);
fTMU->RunTMU(listOfTracks, 0x0, outLabel);
- WriteTracksToLoader(listOfTracks);
+ if (loader)
+ WriteTracksToLoader(listOfTracks);
WriteTracksToESD(listOfTracks, esd);
- delete fTMU;
- fTMU = 0x0;
- listOfTracks->Delete();
+ listOfTracks->Clear();
+ fTMU->Reset();
}
delete listOfTracks;
fTracklets(0x0),
fTrackletsPostInput(0x0),
fZChannelTracklets(0x0),
+ fTrackArray(new TClonesArray("AliTRDtrackGTU", 50)),
fTracks(0x0),
fGtuParam(0x0),
fStack(-1),
delete [] fTracks[zch];
}
delete [] fTracks;
+ delete fTrackArray;
+
for (Int_t layer = 0; layer < fGtuParam->GetNLayers(); layer++) {
delete [] fZChannelTracklets[layer];
delete fTrackletsPostInput[layer];
}
}
+ fTrackArray->Delete();
+
// delete all added tracklets
for (Int_t iLink = 0; iLink < fGtuParam->GetNLinks(); iLink++) {
fTracklets[iLink]->Clear();
if (nHits >= 4) {
// ----- track registration -----
- AliTRDtrackGTU *track = new AliTRDtrackGTU();
+ AliTRDtrackGTU *track = new ((*fTrackArray)[fTrackArray->GetEntriesFast()]) AliTRDtrackGTU();
track->SetSector(fSector);
track->SetStack(fStack);
for (Int_t layer = 0; layer < fGtuParam->GetNLayers(); 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?
TIter next(tracksZUniqueStage0);
while (AliTRDtrackGTU *trk = (AliTRDtrackGTU*) next()) {
- tracksZSplitted[(trk->GetZChannel() + 3 * (trk->GetZSubChannel() - 1)) % 2]->Add(trk);
+ if ((trk->GetZChannel() < 0) ||
+ (trk->GetZChannel() > 2) ||
+ (trk->GetZSubChannel() < 0) ||
+ (trk->GetZSubChannel() > 6)) {
+ AliError(Form("track with invalid z-channel information at %p: zch = %i, subchannel = %i",
+ trk, trk->GetZChannel(), trk->GetZSubChannel()));
+ trk->Dump();
+ }
+ Int_t idx = (trk->GetZChannel() + 3 * (trk->GetZSubChannel() - 1)) % 2;
+ if ((idx < 0) || (idx > 1)) {
+ AliError(Form("invalid index %i null", idx));
+ trk->Dump();
+ continue;
+ }
+ if (!tracksZSplitted[idx]) {
+ AliError(Form("array pointer %i null", idx));
+ continue;
+ }
+ tracksZSplitted[idx]->Add(trk);
}
for (Int_t i = 0; i < 2; i++) {
AliTRDtrackGTU *trkStage1 = 0x0;
do {
- if (trkStage0 != trkStage1)
- delete trkStage0;
-
- trkStage0 = (AliTRDtrackGTU*) next();
+ trkStage0 = (AliTRDtrackGTU*) next();
Bool_t tracksEqual = kFALSE;
if (trkStage0 != 0 && trkStage1 != 0) {
}
if (tracksEqual) {
- if (trkStage0->GetNTracklets() >= trkStage1->GetNTracklets()) {
- delete trkStage1;
+ if (trkStage0->GetNTracklets() >= trkStage1->GetNTracklets())
trkStage1 = trkStage0;
- }
}
else {
if (trkStage1 != 0x0)
//--------------------------------------------------------------------
#include "TObject.h"
-#include "TList.h"
#include "AliTRDtrackletGTU.h"
#include "AliTRDgtuParam.h"
class TTree;
+class TList;
+class TClonesArray;
class TBranch;
class AliTRDtrackGTU;
class AliESDEvent;
TObjArray **fTrackletsPostInput; // holding all tracklets of a layer
// after sorting/calculation in input units
TList **fZChannelTracklets; // holding all tracklets for layer and z-channel
+ TClonesArray *fTrackArray; // array of tracks
TList **fTracks; // lists of tracks
AliTRDgtuParam *fGtuParam; // pointer to the instance of the GtuParam class
// returns the z-subchannel
if (fZSubChannel < 0) {
- for (Int_t layer = 0; layer < AliTRDgtuParam::GetNLayers(); layer++)
- {
- if (IsTrackletInLayer(layer))
- fZSubChannel = ((AliTRDtrackletGTU*) (*fTracklets)[layer])->GetSubChannel(GetZChannel());
+ for (Int_t layer = 0; layer < AliTRDgtuParam::GetNLayers(); layer++) {
+ if (IsTrackletInLayer(layer)) {
+ AliTRDtrackletGTU *trkl = (AliTRDtrackletGTU*) (*fTracklets)[layer];
+ if (trkl) {
+ if ((fZSubChannel > -1) &&
+ (fZSubChannel != trkl->GetSubChannel(GetZChannel())))
+ AliError(Form("found inconsistent z-subchannels: track = %i/%i, trkl = %i",
+ GetZChannel(), fZSubChannel, trkl->GetSubChannel(GetZChannel())));
+ fZSubChannel = trkl->GetSubChannel(GetZChannel());
+ }
+ else {
+ AliError("no tracklet where one should be according to layer mask");
+ }
+ }
}
}
return fZSubChannel;