// XEmacs -*-C++-*-
// @(#) $Id$
#ifndef ALIHLTTPCSLICETRACKERCOMPONENT_H
#define ALIHLTTPCSLICETRACKERCOMPONENT_H
//* This file is property of and copyright by the ALICE HLT Project *
//* ALICE Experiment at CERN, All rights reserved. *
//* See cxx source for full Copyright notice *
/** @file AliHLTTPCSliceTrackerComponent.h
@author Timm Steinbeck, Matthias Richter
@date
@brief The TPC conformal mapping tracker component.
*/
#include "AliHLTProcessor.h"
class AliHLTTPCConfMapper;
class AliHLTTPCVertex;
class AliHLTTPCInterMerger;
/**
* @class AliHLTTPCSliceTrackerComponent
* The TPC conformal mapping tracker component.
*
* Component ID: \b TPCSliceTracker
* Library: \b libAliHLTTPC.
*
* Mandatory arguments:
* \li -bfield magnetic field
* should allways be used. If there is no magnetic field, use 0.00001
*
* Optional arguments:
* \li -pp-run
* will give fixed trackparameters for p-p runs.
* \li -Pb-Pb-run
* will give fixed trackparameters for Pb-Pb runs.
* \li -multiplicity multiplicity
* set the multiplicity of your collitions. Used for Pb-Pb events.
* \li -disable-merger
* turns off the intermerging on sectorlevel. Only use in spacial cases.
* \li -nonvertextracking
* the tracking will do a reconstruction of clusters without vertex constraint.
* \li -mainvertextrackingoff
* will turn off the tracking with vertex constraint. Use together with -nonvertextracking.
* \li -etarange eta range
* sets the eta range for the tracking.
* \li -etasegment eta segments
* let you set the number of eta segments in the trscker.
* \li -chi2cut chiĀ²
* set the chiĀ² for the tracker.
* \li -rowscopetracklet number of padrows
* tells the tracker how many padrows down it should look for the next cluster when making tracklets.
* \li -rowscopetrack number of padrows
* tells the tracker how many padrows down it should look for the next cluster when making track.
* \li -trackletlength number of clusters
* the minimum number of clusters to be on a tracklet.
* \li -tracklength number of clusters
* the minimum number of clusters to be on a track.
* \li -clusterZ cutoff in z-direction (cm)
* makes the tracker to not read in Clusters with a higher value then the
* one given in both directions
*
* @ingroup alihlt_tpc_components
*/
class AliHLTTPCSliceTrackerComponent : public AliHLTProcessor
{
public:
/** default constructor */
AliHLTTPCSliceTrackerComponent();
/** destructor */
virtual ~AliHLTTPCSliceTrackerComponent();
// Public functions to implement AliHLTComponent's interface.
// These functions are required for the registration process
/** interface function, see AliHLTComponent for description */
const char* GetComponentID();
/** interface function, see AliHLTComponent for description */
void GetInputDataTypes(AliHLTComponentDataTypeList& list);
/** interface function, see AliHLTComponent for description */
AliHLTComponentDataType GetOutputDataType();
/** interface function, see AliHLTComponent for description */
virtual void GetOutputDataSize( unsigned long& constBase, double& inputMultiplier );
/** interface function, see AliHLTComponent for description */
AliHLTComponent* Spawn();
protected:
/**
* Set Tracker parameters
* Knowledge on that has been lost, so somebody has to insert more
* documentation.
*/
void SetTrackerParam(Int_t phiSegments=50,Int_t etaSegments=100,
Int_t trackletlength=3,Int_t tracklength=5,
Int_t rowscopetracklet=2,Int_t rowscopetrack=3,
Double_t minPtFit=0,Double_t maxangle=1.31,
Double_t goodDist=5,Double_t hitChi2Cut=10,
Double_t goodHitChi2=20,Double_t trackChi2Cut=50,
Int_t maxdist=50,Double_t maxphi=0.1,Double_t maxeta=0.1);
/**
* Set Tracker parameters
* Knowledge on that has been lost, so somebody has to insert more
* documentation.
*/
void SetTrackerParam( Bool_t doPP, Bool_t doPbPb, Int_t multiplicity,
Double_t bField, Int_t etasegment, Double_t hitchi2cut,
Int_t rowscopetracklet, Int_t rowscopetrack,
Int_t trackletlength, Int_t tracklength );
/**
* Set default tracker parameters
* Knowledge on that has been lost, so somebody has to insert more
* documentation.
*/
void SetTrackerParam1();
// Protected functions to implement AliHLTComponent's interface.
// These functions provide initialization as well as the actual processing
// capabilities of the component.
/** interface function, see AliHLTComponent for description */
int DoInit( int argc, const char** argv );
/** interface function, see AliHLTComponent for description */
int DoDeinit();
/** interface function, see AliHLTComponent for description */
int DoEvent( const AliHLTComponentEventData& evtData, const AliHLTComponentBlockData* blocks,
AliHLTComponentTriggerData& trigData, AliHLTUInt8_t* outputPtr,
AliHLTUInt32_t& size, AliHLTComponentBlockDataList& outputBlocks );
int Reconfigure(const char* cdbEntry, const char* chainId);
int ReadPreprocessorValues(const char* modules);
using AliHLTProcessor::DoEvent;
private:
/** copy constructor prohibited */
AliHLTTPCSliceTrackerComponent(const AliHLTTPCSliceTrackerComponent&);
/** assignment operator prohibited */
AliHLTTPCSliceTrackerComponent& operator=(const AliHLTTPCSliceTrackerComponent&);
/**
* Configure the component.
* Parse a string for the configuration arguments and set the component
* properties.
*/
int Configure(const char* arguments);
/** instance of the tracker */
AliHLTTPCConfMapper* fTracker; //! transient
/** vertex object */
AliHLTTPCVertex* fVertex; //! transient
/** eta range */
Float_t fEta[2]; // see above
/** switch for subsequent non-vertex tracking */
Bool_t fDoNonVertex; // see above
/** */
Bool_t fDoPP; // see above
/** */
Bool_t fDoPbPb; // see above
/** multiplicity estimate */
Int_t fMultiplicity; // see above
/** magnetic field */
Double_t fBField; // see above
Bool_t fnonvertextracking; // enable NONVERTEX Tracking
Bool_t fmainvertextracking; // enable MAINVERTEX Tracking
/** ParameterVariables for the trackeparameters */
/** phi_segments: Devide the space into phi_segments */
Int_t fPhisegment; //! transient
/** ets_segments: Devide the space into eta_segments */
Int_t fEtasegment; //! transient
/** trackletlength: Number of hits a tracklet has to have */
Int_t fTrackletlength; //! transient
/** tracklength: Number of hits a track has to have */
Int_t fTracklength; //! transient
/** rowscopetracklet: Search range of rows for a tracklet */
Int_t fRowscopetracklet; //! transient
/** rowscopetrack: Search range of rows for a track */
Int_t fRowscopetrack; //! transient
/** min_pt_fit: Cut for moment fit, use:SetMaxDca(min_pt_fit) */
Double_t fMinPtFit; //! transient
/** maxangle: AliHLTTPCTransform::Deg2Rad(10), max angle for the three point look aheand */
Double_t fMaxangle; //! transient
/** goodDist: Threshold distancs between two hits when building tracklets */
Double_t fGoodDist; //! transient
/** hitChi2Cut: Max chi2 of added hit to track */
Double_t fHitChi2Cut; //! transient
/** goodHitChi2: Stop looking for next hit to add if chi2 is less then goodHitChi2 */
Double_t fGoodHitChi2; //! transient
/** trackChi2Cut: Max chi2 for track after final fit */
Double_t fTrackChi2Cut; //! transient
/** maxdist: Maximum distance between two clusters when forming segments */
Int_t fMaxdist; //! transient
/** maxphi: Max phi difference for neighboring hits */
Double_t fMaxphi; //! transient
/** maxeta: Max eta difference for neighboring hits */
Double_t fMaxeta; //! transient
/** merger object */
AliHLTTPCInterMerger *fpInterMerger; //! transient
ClassDef(AliHLTTPCSliceTrackerComponent, 0);
};
#endif