3 //**************************************************************************
4 //* This file is property of and copyright by the ALICE HLT Project *
5 //* ALICE Experiment at CERN, All rights reserved. *
8 //* for The ALICE HLT Project. *
10 //* Permission to use, copy, modify and distribute this software and its *
11 //* documentation strictly for non-commercial purposes is hereby granted *
12 //* without fee, provided that the above copyright notice appears in all *
13 //* copies and that both the copyright notice and this permission notice *
14 //* appear in the supporting documentation. The authors make no claims *
15 //* about the suitability of this software for any purpose. It is *
16 //* provided "as is" without express or implied warranty. *
17 //**************************************************************************
19 /** @file AliHLTTRDOfflineTrackerV1Component.cxx
20 @author Theodor Rascanu
22 @brief Handles high level (object based) and low level (pod) input data (clusters). For debug purposes only
25 #include "AliHLTTRDOfflineTrackerV1Component.h"
26 #include "AliHLTTRDDefinitions.h"
27 #include "AliHLTTRDUtils.h"
28 #include "AliTRDrecoParam.h"
29 #include "AliTRDtrackerV1.h"
30 #include "AliTRDReconstructor.h"
31 #include "AliCDBManager.h"
32 #include "AliESDEvent.h"
33 #include "TClonesArray.h"
34 #include "TObjString.h"
36 #include "AliTRDtrackV1.h"
37 #include "AliTRDseedV1.h"
38 #include "AliTRDcluster.h"
40 ClassImp(AliHLTTRDOfflineTrackerV1Component)
42 AliHLTTRDOfflineTrackerV1Component::AliHLTTRDOfflineTrackerV1Component()
43 :AliHLTTRDTrackerV1Component()
45 // Default constructor
48 AliHLTTRDOfflineTrackerV1Component::~AliHLTTRDOfflineTrackerV1Component()
51 // Work is Done in DoDeInit()
54 void AliHLTTRDOfflineTrackerV1Component::GetInputDataTypes( vector<AliHLTComponent_DataType>& list)
56 // Get the list of input data
58 AliHLTTRDTrackerV1Component::GetInputDataTypes(list);
59 list.push_back(AliHLTTRDDefinitions::fgkHiLvlClusterDataType);
62 AliHLTComponentDataType AliHLTTRDOfflineTrackerV1Component::GetOutputDataType()
64 // Get the output data type
65 return kAliHLTMultipleDataType;
68 int AliHLTTRDOfflineTrackerV1Component::GetOutputDataTypes(AliHLTComponentDataTypeList& tgtList)
70 // Get the output data types
72 tgtList.push_back(AliHLTTRDDefinitions::fgkHiLvlTracksDataType);
73 return tgtList.size();
76 void AliHLTTRDOfflineTrackerV1Component::GetOutputDataSize( unsigned long& constBase, double& inputMultiplier )
78 // Get the output data size
79 AliHLTTRDTrackerV1Component::GetOutputDataSize(constBase, inputMultiplier);
83 AliHLTComponent* AliHLTTRDOfflineTrackerV1Component::Spawn()
85 // Spawn function, return new instance of this class
86 return new AliHLTTRDOfflineTrackerV1Component;
89 int AliHLTTRDOfflineTrackerV1Component::DoInit( int argc, const char** argv )
92 iResult=AliHLTTRDTrackerV1Component::DoInit(argc, argv);
93 fRecoParam->SetStreamLevel(AliTRDrecoParam::kTracker, 1); // in order to have the friends written
97 const char* AliHLTTRDOfflineTrackerV1Component::GetComponentID()
99 // Return the component ID const char *
100 return "TRDOfflineTrackerV1"; // The ID of this component
103 int AliHLTTRDOfflineTrackerV1Component::DoEvent(const AliHLTComponent_EventData& evtData, const AliHLTComponent_BlockData* blocks,
104 AliHLTComponent_TriggerData& trigData, AliHLTUInt8_t* outputPtr,
105 AliHLTUInt32_t& size, vector<AliHLTComponent_BlockData>& outputBlocks )
107 if(!IsDataEvent())return 0;
109 if(!GetFirstInputBlock(AliHLTTRDDefinitions::fgkHiLvlClusterDataType))
110 return AliHLTTRDTrackerV1Component::DoEvent(evtData, blocks, trigData, outputPtr, size, outputBlocks );
112 for(const TObject *iter = GetFirstInputObject(AliHLTTRDDefinitions::fgkHiLvlClusterDataType); iter; iter = GetNextInputObject())
114 TClonesArray* clusterArray = dynamic_cast<TClonesArray*>(const_cast<TObject*>(iter));
115 if(!clusterArray)continue;
116 TObjString* strg = dynamic_cast<TObjString*>(const_cast<TObject*>(GetNextInputObject()));
119 fNtimeBins = strg->String().Atoi();
121 AliTRDtrackerV1::SetNTimeBins(fNtimeBins);
122 HLTDebug("TClonesArray of clusters: nbEntries = %i", clusterArray->GetEntriesFast());
123 fTracker->LoadClusters(clusterArray);
124 fTracker->Clusters2Tracks(fESD);
125 Int_t nTracks = fESD->GetNumberOfTracks();
126 HLTInfo("Number of tracks == %d ==", nTracks);
127 TClonesArray* trdTracks = fTracker->GetListOfTracks();
129 if(fEmulateHLTTracks && trdTracks){
130 trdTracks = new TClonesArray(*trdTracks);
131 AliHLTTRDUtils::EmulateHLTTracks(trdTracks);
134 AliHLTUInt32_t spec = GetSpecification(iter);
136 PushBack(trdTracks, AliHLTTRDDefinitions::fgkHiLvlTracksDataType, spec);
138 TClonesArray temp("AliTRDtrackV1");
139 PushBack(&temp, AliHLTTRDDefinitions::fgkHiLvlTracksDataType, spec);
141 PushBack(strg, AliHLTTRDDefinitions::fgkHiLvlTracksDataType, spec);
142 fTracker->UnloadClusters();
143 AliTRDReconstructor::SetClusters(0x0);
145 if(fEmulateHLTTracks && trdTracks){