3 /**************************************************************************
4 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
6 * Authors: Matthias Richter <Matthias.Richter@ift.uib.no> *
7 * Timm Steinbeck <timm@kip.uni-heidelberg.de> *
8 * for The ALICE Off-line 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 AliHLTTRDTrackerComponentV2.cxx
20 @author Timm Steinbeck, Matthias Richter
22 @brief A TRDTracker processing component for the HLT. */
30 #include "AliHLTTRDTrackerComponentV2.h"
31 #include "AliHLTTRDDefinitions.h"
32 #include "AliCDBManager.h"
34 #include "AliTRDReconstructor.h"
35 #include "AliESDEvent.h"
36 #include "AliTRDtrackerHLT.h"
37 #include "AliTRDtracker.h"
38 #include "AliTRDCalibraFillHisto.h"
39 #include "AliMagFMaps.h"
40 #include "AliTRDcluster.h"
47 // this is a global object used for automatic component registration, do not use this
48 AliHLTTRDTrackerComponentV2 gAliHLTTRDTrackerComponentV2;
50 ClassImp(AliHLTTRDTrackerComponentV2);
52 AliHLTTRDTrackerComponentV2::AliHLTTRDTrackerComponentV2()
54 , fOutputPercentage(100) // By default we copy to the output exactly what we got as input
55 , fStrorageDBpath("local://$ALICE_ROOT")
58 , fGeometryFileName("")
63 // Default constructor
64 fCDB = AliCDBManager::Instance();
65 //fCDB->SetDefaultStorage(fStrorageDBpath.c_str());
68 fGeometryFileName = getenv("ALICE_ROOT");
69 fGeometryFileName += "/HLT/TRD/geometry.root";
72 AliHLTTRDTrackerComponentV2::~AliHLTTRDTrackerComponentV2()
77 const char* AliHLTTRDTrackerComponentV2::GetComponentID()
79 // Return the component ID const char *
80 return "TRDTrackerV2"; // The ID of this component
83 void AliHLTTRDTrackerComponentV2::GetInputDataTypes( vector<AliHLTComponent_DataType>& list)
85 // Get the list of input data
86 list.clear(); // We do not have any requirements for our input data type(s).
87 list.push_back( AliHLTTRDDefinitions::fgkClusterDataType );
90 AliHLTComponent_DataType AliHLTTRDTrackerComponentV2::GetOutputDataType()
92 // Get the output data type
93 return AliHLTTRDDefinitions::fgkClusterDataType;
96 void AliHLTTRDTrackerComponentV2::GetOutputDataSize( unsigned long& constBase, double& inputMultiplier )
98 // Get the output data size
100 inputMultiplier = ((double)fOutputPercentage)/100.0;
103 // Spawn function, return new instance of this class
104 AliHLTComponent* AliHLTTRDTrackerComponentV2::Spawn()
106 // Spawn function, return new instance of this class
107 return new AliHLTTRDTrackerComponentV2;
110 int AliHLTTRDTrackerComponentV2::DoInit( int argc, const char** argv )
112 // perform initialization. We check whether our relative output size is specified in the arguments.
113 fOutputPercentage = 100;
118 Logging( kHLTLogDebug, "HLT::TRDTracker::DoInit", "Arguments", "argv[%d] == %s", i, argv[i] );
119 if ( !strcmp( argv[i], "output_percentage" ) )
123 Logging(kHLTLogError, "HLT::TRDTracker::DoInit", "Missing Argument", "Missing output_percentage parameter");
126 Logging( kHLTLogDebug, "HLT::TRDTracker::DoInit", "Arguments", "argv[%d+1] == %s", i, argv[i+1] );
127 fOutputPercentage = strtoul( argv[i+1], &cpErr, 0 );
130 Logging(kHLTLogError, "HLT::TRDTracker::DoInit", "Wrong Argument", "Cannot convert output_percentage parameter '%s'", argv[i+1] );
133 Logging( kHLTLogInfo, "HLT::TRDTracker::DoInit", "Output percentage set", "Output percentage set to %lu %%", fOutputPercentage );
138 if ( strcmp( argv[i], "-cdb" ) == 0)
142 Logging(kHLTLogError, "HLT::TRDTracker::DoInit", "Missing Argument", "Missing -cdb argument");
145 fStrorageDBpath = argv[i+1];
146 Logging( kHLTLogInfo, "HLT::TRDTracker::DoInit", "DB storage set", "DB storage is %s", fStrorageDBpath.c_str() );
147 fCDB->SetDefaultStorage(fStrorageDBpath.c_str());
152 if ( strcmp( argv[i], "-geometry" ) == 0)
156 Logging(kHLTLogError, "HLT::TRDTracker::DoInit", "Missing Argument", "Missing -geometry argument");
159 fGeometryFileName = argv[i+1];
160 Logging( kHLTLogInfo, "HLT::TRDTracker::DoInit", "GeomFile storage set", "GeomFile storage is %s",
161 fGeometryFileName.c_str() );
166 Logging(kHLTLogError, "HLT::TRDTracker::DoInit", "Unknown Option", "Unknown option '%s'", argv[i] );
170 //init alifield map - temporarly fixed - should come from a DB
171 fField = new AliMagFMaps("Maps","Maps", 2, 1., 10., 1);
173 AliTracker::SetFieldMap(fField,1);
175 Logging(kHLTLogError, "HLT::TRDTracker::DoInit", "Field", "Unable to init the field");
177 fGeometryFile = TFile::Open(fGeometryFileName.c_str());
180 fGeoManager = (TGeoManager *)fGeometryFile->Get("Geometry");
181 fTracker = new AliTRDtrackerHLT(fGeometryFile);
182 //fTracker = new AliTRDtracker(fGeometryFile);
186 Logging(kHLTLogError, "HLT::TRDTracker::DoInit", "fGeometryFile", "Unable to open file. FATAL!");
190 AliTRDCalibraFillHisto *calibra = AliTRDCalibraFillHisto::Instance();
193 Logging(kHLTLogError, "HLT::TRDTracker::DoInit", "Calibration Histos", "::Instance failed");
198 calibra->SetMITracking(kTRUE);
199 calibra->Init2Dhistos();
205 int AliHLTTRDTrackerComponentV2::DoDeinit()
207 // Deinitialization of the component
217 fGeometryFile->Close();
218 delete fGeometryFile;
222 AliTRDCalibraFillHisto *calibra = AliTRDCalibraFillHisto::Instance();
225 // should not write in here!
227 Logging( kHLTLogInfo, "HLT::TRDTracker::DoDeinit", "CALIBRA", "before destroy");
229 Logging( kHLTLogInfo, "HLT::TRDTracker::DoDeinit", "CALIBRA", "after destroy");
235 int AliHLTTRDTrackerComponentV2::DoEvent( const AliHLTComponentEventData & evtData,
236 AliHLTComponentTriggerData & trigData )
240 Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "Output percentage set", "Output percentage set to %lu %%", fOutputPercentage );
241 Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "BLOCKS", "NofBlocks %lu", evtData.fBlockCnt );
243 AliHLTUInt32_t fDblock_Specification = 0;
245 AliHLTComponentBlockData *dblock = (AliHLTComponentBlockData *)GetFirstInputBlock( AliHLTTRDDefinitions::fgkClusterDataType );
248 fDblock_Specification = dblock->fSpecification;
252 Logging( kHLTLogWarning, "HLT::TRDTracker::DoEvent", "DATAIN", "First Input Block not found! 0x%x", dblock);
257 TObject *tobjin = (TObject *)GetFirstInputObject( AliHLTTRDDefinitions::fgkClusterDataType, "TTree", ibForce);
258 Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "1stBLOCK", "Pointer = 0x%x", tobjin);
260 TTree *clusterTree = (TTree*)tobjin;
263 Logging( kHLTLogWarning, "HLT::TRDTracker::DoEvent", "DATAIN", "First Input Block not a tree! 0x%x", tobjin);
267 Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "1stBLOCK", "Pointer = 0x%x Name = %s", clusterTree, clusterTree->GetName());
273 Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "CLUSTERS", "Pointer = 0x%x Name = %s", clusterTree, clusterTree->GetName());
274 Int_t iNentries = clusterTree->GetEntries();
275 Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "COUNT", "N of tree entries = %d", iNentries);
276 fTracker->LoadClusters(clusterTree);
280 Logging( kHLTLogError, "HLT::TRDTracker::DoEvent", "CLUSTERS", "Tree Pointer = 0x%x", clusterTree);
283 tobjin = (TObject *)GetNextInputObject( ibForce );
284 Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "nextBLOCK", "Pointer = 0x%x", tobjin);
285 clusterTree = (TTree*)tobjin;
288 AliTRDReconstructor::SetSeedingOn(kTRUE);
290 AliESDEvent *esd = new AliESDEvent();
291 esd->CreateStdContent();
292 //fTracker->MakeSeedsMI(3, 5, esd);
293 fTracker->PropagateBack(esd);
294 fTracker->RefitInward(esd);
296 //here transport the esd tracks further
297 //no receiver defined yet(!)
298 Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "DONE", "now deleting");
300 Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "DONE", "after delete esd");
303 Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "DONE", "after delete clusterTree");