#include "TMath.h"
#include "AliCDBEntry.h"
#include "AliCDBManager.h"
+#include "AliGeomManager.h"
#include "TObjString.h"
#include "TObjArray.h"
#include "AliITStrackerHLT.h"
#include "AliHLTDataTypes.h"
#include "AliHLTExternalTrackParam.h"
#include "AliHLTGlobalBarrelTrack.h"
+#include "AliGeomManager.h"
AliHLTITSTrackerComponent::AliHLTITSTrackerComponent()
:
fSolenoidBz( 0 ),
- fFullTime( 0 ),
- fRecoTime( 0 ),
- fNEvents( 0 ),
+ fBenchmark("ITSTracker"),
fTracker(0)
{
// see header file for class documentation
:
AliHLTProcessor(),
fSolenoidBz( 0 ),
- fFullTime( 0 ),
- fRecoTime( 0 ),
- fNEvents( 0 ),
+ fBenchmark("ITSTracker"),
fTracker(0)
{
// see header file for class documentation
AliHLTComponentDataType AliHLTITSTrackerComponent::GetOutputDataType()
{
// see header file for class documentation
- return kAliHLTDataTypeTrack|kAliHLTDataOriginITS;
+ return kAliHLTMultipleDataType;
+}
+
+int AliHLTITSTrackerComponent::GetOutputDataTypes(AliHLTComponentDataTypeList& tgtList)
+{
+ // see header file for class documentation
+ tgtList.clear();
+ tgtList.push_back(kAliHLTDataTypeTrack|kAliHLTDataOriginITS);
+ tgtList.push_back(kAliHLTDataTypeTrack|kAliHLTDataOriginITSOut);
+ return tgtList.size();
}
void AliHLTITSTrackerComponent::GetOutputDataSize( unsigned long& constBase, double& inputMultiplier )
{
// define guess for the output data size
constBase = 200; // minimum size
- inputMultiplier = 0.5; // size relative to input
+ inputMultiplier = 2.; // size relative to input
}
AliHLTComponent* AliHLTITSTrackerComponent::Spawn()
// Set default configuration for the CA tracker component
// Some parameters can be later overwritten from the OCDB
- fSolenoidBz = 5.;
- fFullTime = 0;
- fRecoTime = 0;
- fNEvents = 0;
+ fSolenoidBz = -5.00668;
+
}
int AliHLTITSTrackerComponent::ReadConfigurationString( const char* arguments )
if ( argument.CompareTo( "-solenoidBz" ) == 0 ) {
if ( ( bMissingParam = ( ++i >= pTokens->GetEntries() ) ) ) break;
- fSolenoidBz = ( ( TObjString* )pTokens->At( i ) )->GetString().Atof();
- HLTInfo( "Magnetic Field set to: %f", fSolenoidBz );
+ HLTWarning("argument -solenoidBz is deprecated, magnetic field set up globally (%f)", GetBz());
continue;
}
const char* defaultNotify = "";
if ( !cdbEntry ) {
+ return 0;// need to add the HLT/ConfigITS/ITSTracker directory to cdb SG!!!
cdbEntry = "HLT/ConfigITS/ITSTracker";
defaultNotify = " (default)";
chainId = 0;
//* read magnetic field
- int iResult2 = ReadCDBEntry( kAliHLTCDBSolenoidBz, chainId );
+ int iResult2 = 0; //ReadCDBEntry( kAliHLTCDBSolenoidBz, chainId );
+ fSolenoidBz = GetBz();
//* read the actual CDB entry if required
{
// Configure the ITS tracker component
- if ( fTracker ) return EINPROGRESS;
- fTracker = new AliITStrackerHLT(0);
+ if ( fTracker ) return -EINPROGRESS;
+
+ if(AliGeomManager::GetGeometry()==NULL){
+ AliGeomManager::LoadGeometry();
+ }
+ AliGeomManager::ApplyAlignObjsFromCDB("ITS");
TString arguments = "";
for ( int i = 0; i < argc; i++ ) {
arguments += argv[i];
}
- return Configure( NULL, NULL, arguments.Data() );
+ int ret = Configure( NULL, NULL, arguments.Data() );
+
+ // Check field
+ if (!TGeoGlobalMagField::Instance()) {
+ HLTError("magnetic field not initialized, please set up TGeoGlobalMagField and AliMagF");
+ return -ENODEV;
+ }
+ fSolenoidBz=GetBz();
+
+ fTracker = new AliITStrackerHLT(0);
+ fBenchmark.Reset();
+ fBenchmark.SetTimer(0,"total");
+ fBenchmark.SetTimer(1,"reco");
+ return ret;
}
AliHLTUInt32_t maxBufferSize = size;
size = 0; // output size
-
+
if (!IsDataEvent()) return 0;
if ( evtData.fBlockCnt <= 0 ) {
return 0;
}
-
- TStopwatch timer;
+ fBenchmark.StartNewEvent();
+ fBenchmark.Start(0);
// Event reconstruction in ITS
vector< AliExternalTrackParam > tracksTPC;
vector< int > tracksTPCId;
- std::vector<AliITSRecPoint> clusters;
- //int currentTrackID = 0;
+ int nClustersTotal = 0;
+
+ for (int ndx=0; ndx<nBlocks && iResult>=0; ndx++) {
+
+ const AliHLTComponentBlockData* iter = blocks+ndx;
+
+ if ( (iter->fDataType == (kAliHLTDataTypeClusters|kAliHLTDataOriginITSSSD) ) ||
+ (iter->fDataType == (kAliHLTDataTypeClusters|kAliHLTDataOriginITSSPD) ) ||
+ (iter->fDataType == (kAliHLTDataTypeClusters|kAliHLTDataOriginITSSDD) )
+ ){
+ AliHLTITSClusterData *inPtr=reinterpret_cast<AliHLTITSClusterData*>( iter->fPtr );
+ nClustersTotal+=inPtr->fSpacePointCnt;
+ }
+ }
+
+
+ fTracker->StartLoadClusters(nClustersTotal);
for (int ndx=0; ndx<nBlocks && iResult>=0; ndx++) {
// Read TPC tracks
if( iter->fDataType == ( kAliHLTDataTypeTrack|kAliHLTDataOriginTPC ) ){
+ fBenchmark.AddInput(iter->fSize);
AliHLTTracksData* dataPtr = ( AliHLTTracksData* ) iter->fPtr;
int nTracks = dataPtr->fCount;
AliHLTExternalTrackParam* currOutTrack = dataPtr->fTracklets;
(iter->fDataType == (kAliHLTDataTypeClusters|kAliHLTDataOriginITSSPD) ) ||
(iter->fDataType == (kAliHLTDataTypeClusters|kAliHLTDataOriginITSSDD) )
){
+
+ fBenchmark.AddInput(iter->fSize);
AliHLTITSClusterData *inPtr=reinterpret_cast<AliHLTITSClusterData*>( iter->fPtr );
int nClusters = inPtr->fSpacePointCnt;
Int_t info[3] = { d.fNy, d.fNz, d.fLayer };
Float_t hit[6] = { d.fY, d.fZ, d.fSigmaY2, d.fSigmaZ2, d.fQ, d.fSigmaYZ };
if( d.fLayer==4 ) hit[5] = -hit[5];
-
- AliITSRecPoint p( lab, hit, info );
- clusters.push_back( p );
+ fTracker->LoadCluster( AliITSRecPoint( lab, hit, info ) );
}
}
}// end read input blocks
- // set clusters to tracker
-
- fTracker->LoadClusters( clusters );
-
// Reconstruct the event
- TStopwatch timerReco;
-
- fTracker->Reconstruct( tracksTPC );
+ fBenchmark.Start(1);
+ fTracker->Reconstruct( &(tracksTPC[0]), tracksTPC.size() );
+ fBenchmark.Stop(1);
- timerReco.Stop();
// Fill output tracks
-
+ int nITSUpdated = 0;
{
- unsigned int mySize = 0;
-
- AliHLTTracksData* outPtr = ( AliHLTTracksData* )( outputPtr );
-
- AliHLTExternalTrackParam* currOutTrack = outPtr->fTracklets;
-
- mySize = ( ( AliHLTUInt8_t * )currOutTrack ) - ( ( AliHLTUInt8_t * )outputPtr );
-
- outPtr->fCount = 0;
- int nTracks = fTracker->Tracks().size();
-
- for ( int itr = 0; itr < nTracks; itr++ ) {
+ for( int iOut=0; iOut<=1; iOut++ ){
- const AliExternalTrackParam &tp = fTracker->Tracks()[itr];
- int id = tracksTPCId[fTracker->Tracks()[itr].TPCtrackId()];
+ unsigned int blockSize = 0;
- int nClusters = 0;
+ AliHLTTracksData* outPtr = ( AliHLTTracksData* )( outputPtr + size );
+ AliHLTExternalTrackParam* currOutTrack = outPtr->fTracklets;
- unsigned int dSize = sizeof( AliHLTExternalTrackParam ) + nClusters * sizeof( unsigned int );
+ blockSize = ( ( AliHLTUInt8_t * )currOutTrack ) - ( ( AliHLTUInt8_t * )outPtr );
- if ( mySize + dSize > maxBufferSize ) {
- HLTWarning( "Output buffer size exceed (buffer size %d, current size %d), %d tracks are not stored", maxBufferSize, mySize, nTracks - itr + 1 );
- iResult = -ENOSPC;
- break;
+ if ( size + blockSize > maxBufferSize ) {
+ HLTWarning( "Output buffer size exceed (buffer size %d, current size %d), tracks are not stored", maxBufferSize, size + blockSize );
+ iResult = -ENOSPC;
+ break;
}
- currOutTrack->fAlpha = tp.GetAlpha();
- currOutTrack->fX = tp.GetX();
- currOutTrack->fY = tp.GetY();
- currOutTrack->fZ = tp.GetZ();
- currOutTrack->fLastX = 0;
- currOutTrack->fLastY = 0;
- currOutTrack->fLastZ = 0;
- currOutTrack->fq1Pt = tp.GetSigned1Pt();
- currOutTrack->fSinPsi = tp.GetSnp();
- currOutTrack->fTgl = tp.GetTgl();
- for( int i=0; i<15; i++ ) currOutTrack->fC[i] = tp.GetCovariance()[i];
- currOutTrack->fTrackID = id;
- currOutTrack->fFlags = 0;
- currOutTrack->fNPoints = nClusters;
- currOutTrack = ( AliHLTExternalTrackParam* )( (( Byte_t * )currOutTrack) + dSize );
- mySize += dSize;
- outPtr->fCount++;
- }
+ outPtr->fCount = 0;
+ AliHLTITSTrack *tracks=0;
+ int nTracks = 0;
+ if( iOut==0 ){
+ tracks = fTracker->Tracks();
+ nTracks = fTracker->NTracks();
+ } else{
+ tracks = fTracker->ITSOutTracks();
+ nTracks = fTracker->NITSOutTracks();
+ }
+
+ for ( int itr = 0; itr < nTracks; itr++ ) {
+ AliHLTITSTrack &t = tracks[itr];
+ int id = tracksTPCId[t.TPCtrackId()];
+ int nClusters = t.GetNumberOfClusters();
+ if( iOut==0 && nClusters>0 ) nITSUpdated++;
+
+ unsigned int dSize = sizeof( AliHLTExternalTrackParam ) + nClusters * sizeof( unsigned int );
+
+ if ( size + blockSize + dSize > maxBufferSize ) {
+ HLTWarning( "Output buffer size exceed (buffer size %d, current size %d), %d tracks are not stored", maxBufferSize, size + blockSize + dSize, nTracks - itr + 1 );
+ iResult = -ENOSPC;
+ break;
+ }
+
+ currOutTrack->fAlpha = t.GetAlpha();
+ currOutTrack->fX = t.GetX();
+ currOutTrack->fY = t.GetY();
+ currOutTrack->fZ = t.GetZ();
+ currOutTrack->fLastX = 0;
+ currOutTrack->fLastY = 0;
+ currOutTrack->fLastZ = 0;
+ currOutTrack->fq1Pt = t.GetSigned1Pt();
+ currOutTrack->fSinPsi = t.GetSnp();
+ currOutTrack->fTgl = t.GetTgl();
+ for( int i=0; i<15; i++ ) currOutTrack->fC[i] = t.GetCovariance()[i];
+ currOutTrack->fTrackID = id;
+ currOutTrack->fFlags = 0;
+ currOutTrack->fNPoints = nClusters;
+ for ( int i = 0; i < nClusters; i++ ) currOutTrack->fPointIDs[i] = t.GetClusterIndex( i );
+ currOutTrack = ( AliHLTExternalTrackParam* )( (( Byte_t * )currOutTrack) + dSize );
+ blockSize += dSize;
+ outPtr->fCount++;
+ }
- AliHLTComponentBlockData resultData;
- FillBlockData( resultData );
- resultData.fOffset = 0;
- resultData.fSize = mySize;
- resultData.fDataType = kAliHLTDataTypeTrack|kAliHLTDataOriginITS;
- outputBlocks.push_back( resultData );
- size = resultData.fSize;
-
- HLTInfo( "ITS tracker:: output %d tracks",nTracks );
+ AliHLTComponentBlockData resultData;
+ FillBlockData( resultData );
+ resultData.fOffset = 0;
+ resultData.fSize = blockSize;
+ if( iOut==0 ){
+ resultData.fDataType = kAliHLTDataTypeTrack|kAliHLTDataOriginITS;
+ } else {
+ resultData.fDataType = kAliHLTDataTypeTrack|kAliHLTDataOriginITSOut;
+ }
+ fBenchmark.AddOutput(resultData.fSize);
+ outputBlocks.push_back( resultData );
+ size += resultData.fSize;
+ }
}
+
+ fBenchmark.Stop(0);
+
+ // Set log level to "Warning" for on-line system monitoring
+ HLTInfo( "ITS Tracker: output %d tracks; input %d clusters, %d tracks",
+ nITSUpdated, nClustersTotal, tracksTPC.size() );
+
+ HLTInfo(fBenchmark.GetStatistics());
return iResult;
}