3 /**************************************************************************
4 * This file is property of and copyright by the ALICE HLT Project *
5 * ALICE Experiment at CERN, All rights reserved. *
7 * Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no> *
8 * Timm Steinbeck <timm@kip.uni-heidelberg.de> *
9 * for The ALICE HLT Project. *
11 * Permission to use, copy, modify and distribute this software and its *
12 * documentation strictly for non-commercial purposes is hereby granted *
13 * without fee, provided that the above copyright notice appears in all *
14 * copies and that both the copyright notice and this permission notice *
15 * appear in the supporting documentation. The authors make no claims *
16 * about the suitability of this software for any purpose. It is *
17 * provided "as is" without express or implied warranty. *
18 **************************************************************************/
20 /** @file AliHLTTPCSliceTrackerComponent.cxx
21 @author Timm Steinbeck, Matthias Richter
23 @brief The TPC conformal mapping tracker component.
26 // see header file for class documentation
28 // refer to README to build package
30 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
37 #include "AliHLTTPCSliceTrackerComponent.h"
38 #include "AliHLTTPCTransform.h"
39 #include "AliHLTTPCConfMapper.h"
40 #include "AliHLTTPCVertex.h"
41 #include "AliHLTTPCVertexData.h"
42 #include "AliHLTTPCClusterDataFormat.h"
43 #include "AliHLTTPCTransform.h"
44 #include "AliHLTTPCTrackSegmentData.h"
45 #include "AliHLTTPCTrackArray.h"
46 #include "AliHLTTPCTrackletDataFormat.h"
47 #include "AliHLTTPCInterMerger.h"
48 #include "AliHLTTPCMemHandler.h"
49 #include "AliHLTTPCDefinitions.h"
50 #include "AliHLTCommonCDBEntries.h"
52 #include "TObjString.h"
53 #include "TObjArray.h"
54 #include "AliCDBEntry.h"
55 #include "AliCDBManager.h"
56 //#include "AliHLTTPC.h"
60 /** ROOT macro for the implementation of ROOT specific class methods */
61 ClassImp(AliHLTTPCSliceTrackerComponent)
63 AliHLTTPCSliceTrackerComponent::AliHLTTPCSliceTrackerComponent()
72 fnonvertextracking(kFALSE),
73 fmainvertextracking(kTRUE),
91 // see header file for class documentation
93 // refer to README to build package
95 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
100 AliHLTTPCSliceTrackerComponent::~AliHLTTPCSliceTrackerComponent()
102 // see header file for class documentation
105 // Public functions to implement AliHLTComponent's interface.
106 // These functions are required for the registration process
108 const char* AliHLTTPCSliceTrackerComponent::GetComponentID()
110 // see header file for class documentation
112 return "TPCSliceTracker";
115 void AliHLTTPCSliceTrackerComponent::GetInputDataTypes(AliHLTComponentDataTypeList& list)
117 // see header file for class documentation
119 list.push_back( AliHLTTPCDefinitions::fgkClustersDataType );
120 list.push_back( AliHLTTPCDefinitions::fgkVertexDataType );
123 AliHLTComponentDataType AliHLTTPCSliceTrackerComponent::GetOutputDataType()
125 // see header file for class documentation
126 return AliHLTTPCDefinitions::fgkTrackSegmentsDataType;
129 void AliHLTTPCSliceTrackerComponent::GetOutputDataSize( unsigned long& constBase, double& inputMultiplier )
131 // see header file for class documentation
132 // XXX TODO: Find more realistic values.
137 AliHLTComponent* AliHLTTPCSliceTrackerComponent::Spawn()
139 // see header file for class documentation
140 return new AliHLTTPCSliceTrackerComponent;
143 void AliHLTTPCSliceTrackerComponent::SetTrackerParam(Int_t phiSegments, Int_t etaSegments,
144 Int_t trackletlength, Int_t tracklength,
145 Int_t rowscopetracklet, Int_t rowscopetrack,
146 Double_t minPtFit, Double_t maxangle,
147 Double_t goodDist, Double_t hitChi2Cut,
148 Double_t goodHitChi2, Double_t trackChi2Cut,
149 Int_t maxdist, Double_t maxphi,Double_t maxeta)
151 // see header file for class documentation
152 //fTracker->SetClusterFinderParam( fXYClusterError, fZClusterError, kTRUE ); // ??
153 //Set parameters input to the tracker
154 //If no arguments are given, default parameters will be used
156 fTracker->SetNSegments(phiSegments,etaSegments);
157 fTracker->SetMaxDca(minPtFit);
158 // fTracker->MainVertexSettings(trackletlength,tracklength,rowscopetracklet,rowscopetrack);
160 Logging( kHLTLogDebug, "HLT::TPCSliceTracker::SetTrackerParam", "Tracking", "==============================" );
162 if ( fmainvertextracking == kTRUE && fnonvertextracking == kFALSE){
163 fTracker->SetTrackCuts(hitChi2Cut,goodHitChi2,trackChi2Cut,maxdist,kTRUE);
164 fTracker->SetTrackletCuts(maxangle,goodDist,kTRUE);
166 fTracker->MainVertexSettings( trackletlength, tracklength, rowscopetracklet, rowscopetrack, maxphi, maxeta);
167 Logging( kHLTLogDebug, "HLT::TPCSliceTracker::SetTrackerParam", "Tracking", "MAINVERTEXTRACKING" );
169 else if ( fmainvertextracking == kTRUE && fnonvertextracking == kTRUE){
170 fTracker->SetTrackCuts(hitChi2Cut,goodHitChi2,trackChi2Cut,maxdist,kTRUE);
171 fTracker->SetTrackCuts(hitChi2Cut,goodHitChi2,trackChi2Cut,maxdist,kFALSE);
172 fTracker->SetTrackletCuts(maxangle,goodDist,kTRUE);
173 fTracker->SetTrackletCuts(maxangle,goodDist,kFALSE);
175 fTracker->MainVertexSettings( trackletlength, tracklength, rowscopetracklet, rowscopetrack, maxphi, maxeta);
176 fTracker->NonVertexSettings( trackletlength, tracklength, rowscopetracklet, rowscopetrack);
177 Logging( kHLTLogDebug, "HLT::TPCSliceTracker::SetTrackerParam", "Tracking", "MAINVERTEXTRACKING - NONVERTEXTRACKING" );
179 else if ( fmainvertextracking == kFALSE && fnonvertextracking == kTRUE){
180 fTracker->SetTrackCuts(hitChi2Cut,goodHitChi2,trackChi2Cut,maxdist,kFALSE);
181 fTracker->SetTrackletCuts(maxangle,goodDist,kFALSE);
183 fTracker->NonVertexSettings( trackletlength, tracklength, rowscopetracklet, rowscopetrack);
184 Logging( kHLTLogDebug, "HLT::TPCSliceTracker::SetTrackerParam", "Tracking", "NONVERTEXTRACKING" );
187 //fTracker->SetParamDone(true);
188 /* Matthias 13.12.2006
189 * the global variable AliHLTTPCS::fgDoVertexFit has never been used so far
190 * and has always been kTRUE.
191 * In order to remove the AliHLTTPC class (which is the old steering class for
192 * HLT (TPC) tracking) from the compilation, this function can not be activated
193 * again. We have to think about a more elegant way to specify the parameters
194 * anyway. The following line was surely for some testing, but was never active
195 * in a tested release.
197 //AliHLTTPC::SetVertexFit( kFALSE );
199 fTracker->InitVolumes();
203 void AliHLTTPCSliceTrackerComponent::SetTrackerParam( Bool_t doPP, Bool_t doPbPb, Int_t multiplicity,
204 Double_t bField, Int_t etasegment, Double_t hitchi2cut,
205 Int_t rowscopetracklet, Int_t rowscopetrack,
206 Int_t trackletlength, Int_t tracklength )
208 // see header file for class documentation
209 AliHLTTPCTransform::SetBField( bField );
210 Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoInit", "BField", "Setting b field to %f T\n", bField );
214 //tracker->SetClusterFinderParam(xyerror,zerror,kTRUE); // ??
216 SetTrackerParam( 50, 100, 3, 60,
219 5, 50, 50, 0.1, 0.1);
223 int mults[] = { 1000, 2000, 4000, 8000 };
227 int multDist, tmpMultDist;
228 if ( multiplicity>mults[closestMult] )
229 multDist = multiplicity-mults[closestMult];
231 multDist = mults[closestMult]-multiplicity;
232 for ( i = 1; i < multCount; i++ )
234 if ( multiplicity>mults[i] )
235 tmpMultDist = multiplicity-mults[i];
237 tmpMultDist = mults[i]-multiplicity;
238 if ( tmpMultDist < multDist )
241 multDist = tmpMultDist;
245 double bfs[] = { 0.2, 0.4 };
248 double bfDist, tmpBFDist;
249 if ( bField>bfs[closestBf] )
250 bfDist = bField-bfs[closestBf];
252 bfDist = bfs[closestBf]-bField;
253 for ( i = 1; i < bfCount; i++ )
256 tmpBFDist = bField-bfs[i];
258 tmpBFDist = bfs[i]-bField;
259 if ( tmpBFDist < bfDist )
266 switch ( closestMult )
272 SetTrackerParam( 50, 100, 3, 10,
275 5, 50, 50, 0.1, 0.1);
278 SetTrackerParam( 50, 100, 3, 10,
281 5, 50, 50, 0.1, 0.1);
289 SetTrackerParam( 50, 100, 3, 10,
292 5, 20, 50, 0.1, 0.1);
295 SetTrackerParam( 50, 100, 3, 10,
298 5, 20, 50, 0.1, 0.1);
306 SetTrackerParam( 50, 100, 3, 10,
309 5, 10 , 50, 0.1, 0.1);
312 SetTrackerParam( 50, 100, 3, 10,
315 5, 10, 50, 0.1, 0.1);
323 SetTrackerParam( 50, 100, 3, 10,
329 SetTrackerParam( 50, 100, 3, 10,
337 // Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoInit", "BField", "Setting b field to %f\n", bfs[closestBf] );
338 // AliHLTTPCTransform::SetBField( bfs[closestBf] );
339 // AliHLTTPCTransform::SetBField( bField );
340 // Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoInit", "BField", "Setting b field to %f\n", bField );
344 SetTrackerParam( 50, etasegment, trackletlength, tracklength,
345 rowscopetracklet, rowscopetrack,
346 0, 0.1745, 5, hitchi2cut,
347 5, 50, 50, 0.1, 0.1);
351 int AliHLTTPCSliceTrackerComponent::DoInit( int argc, const char** argv )
353 // see header file for class documentation
354 Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoInit", "DoInit", "DoInit()" );
356 if ( fTracker || fVertex )
358 fTracker = new AliHLTTPCConfMapper();
359 fVertex = new AliHLTTPCVertex();
362 fDoNonVertex = false;
363 fMultiplicity = 4000;
384 TString configuration="";
386 for (int i=0; i<argc && iResult>=0; i++) {
388 if (!configuration.IsNull()) configuration+=" ";
389 configuration+=argument;
392 if (!configuration.IsNull()) {
393 iResult=Configure(configuration.Data());
395 iResult=Reconfigure(NULL, NULL);
401 int AliHLTTPCSliceTrackerComponent::DoDeinit()
403 // see header file for class documentation
411 delete fpInterMerger;
417 int AliHLTTPCSliceTrackerComponent::DoEvent( const AliHLTComponentEventData& evtData, const AliHLTComponentBlockData* blocks,
418 AliHLTComponentTriggerData& /*trigData*/, AliHLTUInt8_t* outputPtr,
419 AliHLTUInt32_t& size, AliHLTComponentBlockDataList& outputBlocks )
421 // see header file for class documentation
422 Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoEvent", "DoEvent", "DoEvent()" );
423 if ( evtData.fBlockCnt<=0 )
425 Logging( kHLTLogWarning, "HLT::TPCSliceTracker::DoEvent", "DoEvent", "no blocks in event" );
428 const AliHLTComponentBlockData* iter = NULL;
430 AliHLTTPCClusterData* inPtrSP;
431 AliHLTTPCVertexData* inPtrV = NULL;
432 const AliHLTComponentBlockData* vertexIter=NULL;
433 AliHLTTPCTrackletData* outPtr;
434 AliHLTUInt8_t* outBPtr;
435 AliHLTUInt32_t vSize = 0;
436 UInt_t offset=0, mysize, tSize = 0;
438 Int_t slice=-1, patch=-1, row[2];
439 Int_t minPatch=INT_MAX, maxPatch = 0;
441 std::vector<Int_t> slices;
442 std::vector<Int_t>::iterator slIter, slEnd;
443 std::vector<unsigned> sliceCnts;
444 std::vector<unsigned>::iterator slCntIter;
445 Int_t vertexSlice=-1;
447 // Find min/max rows used in total and find and read out vertex if it is present
448 // also determine correct slice number, if multiple slice numbers are present in event
449 // (which should not happen in the first place) we use the one that occurs the most times
453 for ( ndx = 0; ndx < evtData.fBlockCnt; ndx++ )
457 if(iter->fDataType!=AliHLTTPCDefinitions::fgkClustersDataType){
458 HLTDebug("Data block type is not of type AliHLTTPCDefinitions::fgkClustersDataType");
462 slice = AliHLTTPCDefinitions::GetMinSliceNr( *iter );
464 slIter = slices.begin();
465 slEnd = slices.end();
466 slCntIter = sliceCnts.begin();
467 while ( slIter != slEnd )
469 if ( *slIter == slice )
479 slices.insert( slices.end(), slice );
480 sliceCnts.insert( sliceCnts.end(), 1 );
485 if ( iter->fDataType == AliHLTTPCDefinitions::fgkVertexDataType )
487 inPtrV = (AliHLTTPCVertexData*)(iter->fPtr);
490 fVertex->Read( inPtrV );
493 if ( iter->fDataType == AliHLTTPCDefinitions::fgkClustersDataType )
495 patch = AliHLTTPCDefinitions::GetMinPatchNr( *iter );
496 if ( minPatch>patch )
499 row[0] = AliHLTTPCTransform::GetFirstRow( patch );
501 if ( maxPatch<patch )
504 row[1] = AliHLTTPCTransform::GetLastRow( patch );
509 // Determine slice number to really use.
510 if ( slices.size()>1 )
512 Logging( kHLTLogError, "HLT::TPCSliceTracker::DoEvent", "Multiple slices found in event",
513 "Multiple slice numbers found in event 0x%08lX (%lu). Determining maximum occuring slice number...",
514 evtData.fEventID, evtData.fEventID );
515 unsigned maxCntSlice=0;
516 slIter = slices.begin();
517 slEnd = slices.end();
518 slCntIter = sliceCnts.begin();
519 while ( slIter != slEnd )
521 Logging( kHLTLogError, "HLT::TPCSliceTracker::DoEvent", "Multiple slices found in event",
522 "Slice %lu found %lu times.", *slIter, *slCntIter );
523 if ( maxCntSlice<*slCntIter )
525 maxCntSlice = *slCntIter;
531 Logging( kHLTLogError, "HLT::TPCSliceTracker::DoEvent", "Multiple slices found in event",
532 "Using slice %lu.", slice );
534 else if ( slices.size()>0 )
536 slice = *(slices.begin());
543 if ( vertexSlice != slice )
545 // multiple vertex blocks in event and we used the wrong one...
547 for ( ndx = 0; ndx < evtData.fBlockCnt; ndx++ )
550 if ( iter->fDataType == AliHLTTPCDefinitions::fgkVertexDataType && slice==AliHLTTPCDefinitions::GetMinSliceNr( *iter ) )
552 inPtrV = (AliHLTTPCVertexData*)(iter->fPtr);
555 fVertex->Read( inPtrV );
561 fTracker->InitSector( slice, row, fEta );
562 fTracker->SetVertex(fVertex);
565 std::vector<unsigned long> patchIndices;
566 std::vector<unsigned long>::iterator pIter, pEnd;
567 for ( ndx = 0; ndx < evtData.fBlockCnt; ndx++ )
571 if ( iter->fDataType == AliHLTTPCDefinitions::fgkClustersDataType && slice==AliHLTTPCDefinitions::GetMinSliceNr( *iter ) )
573 patch = AliHLTTPCDefinitions::GetMinPatchNr( *iter );
574 pIter = patchIndices.begin();
575 pEnd = patchIndices.end();
576 while ( pIter!=pEnd && AliHLTTPCDefinitions::GetMinSliceNr( blocks[*pIter] ) < patch )
578 patchIndices.insert( pIter, ndx );
581 pIter = patchIndices.begin();
582 pEnd = patchIndices.end();
583 while ( pIter!=pEnd )
588 patch = AliHLTTPCDefinitions::GetMinPatchNr( *iter );
589 inPtrSP = (AliHLTTPCClusterData*)(iter->fPtr);
591 Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoEvent", "Reading hits",
592 "Reading hits for slice %d - patch %d", slice, patch );
593 fTracker->ReadHits( inPtrSP->fSpacePointCnt, inPtrSP->fSpacePoints );
597 outPtr = (AliHLTTPCTrackletData*)(outBPtr);
599 if ( fmainvertextracking == kTRUE && fnonvertextracking == kFALSE){
600 Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoEvent", "Tracking", " ---MAINVERTEXTRACKING---");
601 fTracker->MainVertexTrackingA();
602 fTracker->MainVertexTrackingB();
603 fTracker->FillTracks();
605 else if ( fmainvertextracking == kTRUE && fnonvertextracking == kTRUE){
606 Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoEvent", "Tracking", " ---MAINVERTEXTRACKING---");
607 fTracker->MainVertexTrackingA();
608 fTracker->MainVertexTrackingB();
609 fTracker->FillTracks();
610 Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoEvent", "Tracking", " ---NONVERTEXTRACKING---");
611 fTracker->NonVertexTracking();
613 else if ( fmainvertextracking == kFALSE && fnonvertextracking == kTRUE){
614 Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoEvent", "Tracking", " ---NONVERTEXTRACKING---");
615 fTracker->NonVertexTracking();
616 fTracker->FillTracks();
621 AliHLTTPCMemHandler memory;
622 AliHLTTPCTrackSegmentData *trackdata0 =
623 (AliHLTTPCTrackSegmentData *) memory.Allocate(fTracker->GetTracks());
624 memory.TrackArray2Memory(ntracks0,trackdata0,fTracker->GetTracks());
625 fpInterMerger->Reset();
626 fpInterMerger->Init(row,patch);
627 fpInterMerger->FillTracks(ntracks0,trackdata0);
628 fpInterMerger->Merge();
631 AliHLTTPCTrackArray* pArray=fTracker->GetTracks();
632 mysize = pArray->WriteTracks( ntracks0, outPtr->fTracklets );
633 outPtr->fTrackletCnt = ntracks0;
635 Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoEvent", "Tracks",
636 "Input: Number of tracks: %lu Slice/MinPatch/MaxPatch/RowMin/RowMax: %lu/%lu/%lu/%lu/%lu.",
637 ntracks0, slice, minPatch, maxPatch, row[0], row[1] );
641 tSize += mysize+sizeof(AliHLTTPCTrackletData);
642 outBPtr += mysize+sizeof(AliHLTTPCTrackletData);
644 AliHLTComponentBlockData bd;
648 bd.fSpecification = AliHLTTPCDefinitions::EncodeDataSpecification( slice, slice, minPatch, maxPatch );
649 outputBlocks.push_back( bd );
651 #ifdef FORWARD_VERTEX_BLOCK
654 // Copy the descriptor block for the vertex information.
656 outputBlocks.push_back( bd );
658 #endif // FORWARD_VERTEX_BLOCK
664 int AliHLTTPCSliceTrackerComponent::Configure(const char* arguments)
666 // see header file for class documentation
668 if (!arguments) return iResult;
670 TString allArgs=arguments;
673 Bool_t bDoMerger=kTRUE;
675 TObjArray* pTokens=allArgs.Tokenize(" ");
677 for (int i=0; i<pTokens->GetEntries() && iResult>=0; i++) {
678 argument=((TObjString*)pTokens->At(i))->GetString();
679 if (argument.IsNull()) continue;
681 if (argument.CompareTo("-disable-merger")==0) {
682 HLTInfo("Disabled Inter Merger");
686 else if (argument.CompareTo("-pp-run")==0) {
687 HLTInfo("Using Trackparameters for pp-run");
691 else if (argument.CompareTo("-PbPb-run")==0) {
692 HLTInfo("Using Trackparameters for Pb-Pb-run");
696 else if (argument.CompareTo("-nonvertextracking")==0) {
697 HLTInfo("Doing Nonvertex Tracking");
698 fnonvertextracking = kTRUE;
701 else if (argument.CompareTo("-mainvertextrackingoff")==0) {
702 HLTInfo("Mainvertex Tracking off");
703 fmainvertextracking = kFALSE;
706 else if (argument.CompareTo("-multiplicity")==0) {
707 if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
708 HLTInfo("Multiplicity set to: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
709 fMultiplicity=((TObjString*)pTokens->At(i))->GetString().Atoi();
712 else if (argument.CompareTo("-bfield")==0) {
713 if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
714 HLTInfo("Magnetic Field set to: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
715 fBField=((TObjString*)pTokens->At(i))->GetString().Atof();
718 else if (argument.CompareTo("-etarange")==0) {
719 if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
720 HLTInfo("Etarange set to: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
721 fEta[1]=((TObjString*)pTokens->At(i))->GetString().Atof();
724 else if (argument.CompareTo("-etasegment")==0) {
725 if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
726 HLTInfo("Number of Etasegment: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
727 fEtasegment=((TObjString*)pTokens->At(i))->GetString().Atoi();
730 else if (argument.CompareTo("-chi2cut")==0) {
731 if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
732 HLTInfo("chi2cut set to: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
733 fHitChi2Cut=((TObjString*)pTokens->At(i))->GetString().Atof();
736 else if (argument.CompareTo("-rowscopetracklet")==0) {
737 if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
738 HLTInfo("Number of row to look for next cluster for tracklet: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
739 fRowscopetracklet=((TObjString*)pTokens->At(i))->GetString().Atoi();
742 else if (argument.CompareTo("-rowscopetrack")==0) {
743 if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
744 HLTInfo("Number of row to look for next cluster for track: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
745 fRowscopetrack=((TObjString*)pTokens->At(i))->GetString().Atoi();
748 else if (argument.CompareTo("-trackletlength")==0) {
749 if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
750 HLTInfo("Minimum number of clusters on a Tracklet: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
751 fTrackletlength=((TObjString*)pTokens->At(i))->GetString().Atoi();
754 else if (argument.CompareTo("-tracklength")==0) {
755 if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
756 HLTInfo("Minimum number of clusters on a Track: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
757 fTracklength=((TObjString*)pTokens->At(i))->GetString().Atoi();
760 else if (argument.CompareTo("-clusterZ")==0) {
761 if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
762 HLTInfo("Minimum number of clusters on a Track: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
763 fTracker->SetClusterCutZ(((TObjString*)pTokens->At(i))->GetString().Atoi());
767 HLTError("unknown argument %s", argument.Data());
775 HLTError("missing parameter for argument %s", argument.Data());
779 // parameter for B=0 T
781 fnonvertextracking = kTRUE;
782 fmainvertextracking = kFALSE;
786 fpInterMerger = new AliHLTTPCInterMerger();
788 fpInterMerger = NULL;
790 SetTrackerParam(fDoPP,fDoPbPb,fMultiplicity,fBField,fEtasegment,fHitChi2Cut,fRowscopetracklet,fRowscopetrack,fTrackletlength,fTracklength);
795 int AliHLTTPCSliceTrackerComponent::Reconfigure(const char* cdbEntry, const char* chainId)
797 // see header file for class documentation
799 const char* path="HLT/ConfigTPC/SliceTrackerComponent";
800 const char* defaultNotify="";
803 defaultNotify=" (default)";
806 HLTInfo("reconfigure from entry %s%s, chain id %s", path, defaultNotify,(chainId!=NULL && chainId[0]!=0)?chainId:"<none>");
807 AliCDBEntry *pEntry = AliCDBManager::Instance()->Get(path/*,GetRunNo()*/);
809 TObjString* pString=dynamic_cast<TObjString*>(pEntry->GetObject());
811 HLTInfo("received configuration object string: \'%s\'", pString->GetString().Data());
812 iResult=Configure(pString->GetString().Data());
814 HLTError("configuration object \"%s\" has wrong type, required TObjString", path);
817 HLTError("can not fetch object \"%s\" from CDB", path);
821 const char* pathBField=kAliHLTCDBSolenoidBz;
824 HLTInfo("reconfigure B-Field from entry %s, chain id %s", path,(chainId!=NULL && chainId[0]!=0)?chainId:"<none>");
825 AliCDBEntry *pEntry = AliCDBManager::Instance()->Get(pathBField/*,GetRunNo()*/);
827 TObjString* pString=dynamic_cast<TObjString*>(pEntry->GetObject());
829 HLTInfo("received configuration object string: \'%s\'", pString->GetString().Data());
830 iResult=Configure(pString->GetString().Data());
832 HLTError("configuration object \"%s\" has wrong type, required TObjString", path);
835 HLTError("can not fetch object \"%s\" from CDB", path);
842 void AliHLTTPCSliceTrackerComponent::SetTrackerParam1()
844 // see header file for class documentation
845 SetTrackerParam( 10, 20, 5, 10, 2,2,
847 50, 100, 50, 0.1, 0.1);