- if(!blocks) {
- HLTError("no blocks");
- iResult=-EINVAL;
- return iResult;
- }
-
- const AliHLTComponentBlockData* iter=0;
- AliHLTTPCTrackletData* inPtr=0;
- Bool_t bIsTRDTrackDataBlock=kFALSE;
- Bool_t bIsTPCTrackDataBlock=kFALSE;
- TClonesArray *aTRDTracks=0;
- Int_t minSlice = INT_MAX, maxSlice = 0;
- Int_t slice;
-
- unsigned long ndx;
- Int_t nTRDDataBlocks = 0;
- Int_t nTPCDataBlocks = 0;
- for ( ndx = 0; ndx < evtData.fBlockCnt && iResult>=0; ndx++ )
- {
- iter = blocks+ndx;
- bIsTRDTrackDataBlock=kFALSE;
- bIsTPCTrackDataBlock=kFALSE;
-
- // check if TPC or TRD tracks
- if(!(bIsTRDTrackDataBlock=(iter->fDataType==AliHLTTRDDefinitions::fgkTRDSATracksDataType)) &&
- !(bIsTPCTrackDataBlock=(iter->fDataType==AliHLTTPCDefinitions::fgkTracksDataType))) {
- continue;
- }
-
- // collect TRD tracks from all SM
- // one TClonesArray of tracks per SM
- if(bIsTRDTrackDataBlock)
- {
- nTRDDataBlocks++;
- if(nTRDDataBlocks>1) continue;
- for (TObject *pObj = (TObject *)GetFirstInputObject(AliHLTTRDDefinitions::fgkTRDSATracksDataType,"TClonesArray",0);
- pObj !=0 && iResult>=0;
- pObj = (TObject *)GetNextInputObject(0)) {
- aTRDTracks = dynamic_cast<TClonesArray*>(pObj);
- if (!aTRDTracks) continue;
-
- HLTInfo("reading block %d, trdTracks %d", ndx, aTRDTracks->GetEntriesFast());
-
- // load TRD tracks
- if (fGlobalTrackMerger->LoadTracks(aTRDTracks,fESD) == kFALSE) {
- HLTError("Cannot load TRD tracks");
- iResult=-ENOMEM;
- return iResult;
- }
- }
- aTRDTracks->Delete();
- }
-
- // collect TPC tracks from whole TPC
- if (bIsTPCTrackDataBlock)
- {
- nTPCDataBlocks++;
- if(nTPCDataBlocks>1) continue;
-
- slice=AliHLTTPCDefinitions::GetMinSliceNr(iter->fSpecification);
- if(slice<minSlice) minSlice = slice;
- if(slice>maxSlice) maxSlice = slice;
-
- //minslice=AliHLTTPCDefinitions::GetMinSliceNr(iter->fSpecification);
- //maxslice=AliHLTTPCDefinitions::GetMaxSliceNr(iter->fSpecification);
-
- AliHLTTPCTrackArray tracks;
- inPtr=(AliHLTTPCTrackletData*)iter->fPtr;
-
- HLTInfo("reading block %d (slice %d): %d tracklets", ndx, slice, inPtr->fTrackletCnt);
-
- // read TPC track segments from memory
- if((iResult=tracks.FillTracksChecked(inPtr->fTracklets, inPtr->fTrackletCnt, iter->fSize, -1/*global track*/, 0/*don't rotate*/))>=0)
- {
- // load TPC tracks
- if (fGlobalTrackMerger->LoadTracks(&tracks,fESD) == kFALSE) {
- HLTError("Cannot load TPC tracks");
- iResult=-ENOMEM;
- return iResult;
- }
- }
- }
- }