//* provided "as is" without express or implied warranty. *
//**************************************************************************
-/** @file AliHLTGlobalEsdConverterComponent.cxx
- @author Matthias Richter
- @date
- @brief Global ESD converter component.
-*/
+// @file AliHLTGlobalEsdConverterComponent.cxx
+// @author Matthias Richter
+// @date
+// @brief Global ESD converter component.
+//
// see header file for class documentation
// or
, fVerbosity(0)
, fESD(NULL)
, fSolenoidBz(-5.00668)
+ , fBenchmark("EsdConverter")
{
// see header file for class documentation
// or
TString argument="";
int bMissingParam=0;
+ // default list of skiped ESD objects
+ TString skipObjects=
+ // "AliESDRun,"
+ // "AliESDHeader,"
+ "AliESDZDC,"
+ "AliESDFMD,"
+ // "AliESDVZERO,"
+ // "AliESDTZERO,"
+ // "TPCVertex,"
+ // "SPDVertex,"
+ // "PrimaryVertex,"
+ // "AliMultiplicity,"
+ // "PHOSTrigger,"
+ // "EMCALTrigger,"
+ // "SPDPileupVertices,"
+ // "TrkPileupVertices,"
+ "Cascades,"
+ "Kinks,"
+ "AliRawDataErrorLogs,"
+ "AliESDACORDE";
+
iResult=Reconfigure(NULL, NULL);
TString allArgs = "";
for ( int i = 0; i < argc; i++ ) {
} else if (argument.CompareTo("-solenoidBz")==0) {
if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
HLTInfo("Magnetic Field set to: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
- fSolenoidBz=((TObjString*)pTokens->At(i))->GetString().Atof();
+ HLTWarning("argument '-solenoidBz' is deprecated, solenoid field initiaized from CDB settings");
continue;
+ } else if (argument.Contains("-skipobject=")) {
+ argument.ReplaceAll("-skipobject=", "");
+ skipObjects=argument;
} else {
HLTError("unknown argument %s", argument.Data());
+ iResult=-EINVAL;
break;
}
}
fESD = new AliESDEvent;
if (fESD) {
fESD->CreateStdContent();
+
+ // remove some of the objects which are not needed
+ if (fESD->GetList() && !skipObjects.IsNull()) {
+ pTokens=skipObjects.Tokenize(",");
+ if (pTokens) {
+ const char* id=NULL;
+ TIter next(pTokens);
+ TObject* pObject=NULL;
+ while ((pObject=next())!=NULL) {
+ id=((TObjString*)pObject)->GetString().Data();
+ TObject* pObj=fESD->GetList()->FindObject(id);
+ if (pObj) {
+ HLTDebug("removing object %s", id);
+ fESD->GetList()->Remove(pObj);
+ delete pObj;
+ } else {
+ HLTWarning("failed to remove object '%s' from ESD", id);
+ }
+ }
+ fESD->GetStdContent();
+ delete pTokens;
+ }
+ }
} else {
iResult=-ENOMEM;
}
SetupCTPData();
}
+ fBenchmark.SetTimer(0,"total");
+
return iResult;
}
int iResult=0;
if (!fESD) return -ENODEV;
+ if (IsDataEvent()) fBenchmark.StartNewEvent();
+ fBenchmark.Start(0);
+
AliESDEvent* pESD = fESD;
pESD->Reset();
} else {
iResult=PushBack(pESD, kAliHLTDataTypeESDObject|kAliHLTDataOriginOut, 0);
}
+ fBenchmark.AddOutput(GetLastObjectSize());
}
if (pTree) {
// clear user info list to prevent objects from being deleted
pTree->GetUserInfo()->Clear();
delete pTree;
}
+
+ fBenchmark.Stop(0);
+ HLTInfo( fBenchmark.GetStatistics() );
+
return iResult;
}
// in the first attempt this component reads the TPC tracks and updates in the
// second step from the ITS tracks
-
// first read MC information (if present)
std::map<int,int> mcLabels;
for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(kAliHLTDataTypeTrackMC|kAliHLTDataOriginTPC);
pBlock!=NULL; pBlock=GetNextInputBlock()) {
+
+ fBenchmark.AddInput(pBlock->fSize);
+
AliHLTTrackMCData* dataPtr = reinterpret_cast<AliHLTTrackMCData*>( pBlock->fPtr );
if (sizeof(AliHLTTrackMCData)+dataPtr->fCount*sizeof(AliHLTTrackMCLabel)==pBlock->fSize) {
for( unsigned int il=0; il<dataPtr->fCount; il++ ){
Int_t ndEdxTPC = 0;
for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(kAliHLTDataTypedEdx|kAliHLTDataOriginTPC);
pBlock!=NULL; pBlock=GetNextInputBlock()) {
+ fBenchmark.AddInput(pBlock->fSize);
dEdxTPC = reinterpret_cast<AliHLTFloat32_t*>( pBlock->fPtr );
ndEdxTPC = pBlock->fSize / sizeof(AliHLTFloat32_t);
break;
// convert the TPC tracks to ESD tracks
for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(kAliHLTDataTypeTrack|kAliHLTDataOriginTPC);
pBlock!=NULL; pBlock=GetNextInputBlock()) {
+ fBenchmark.AddInput(pBlock->fSize);
vector<AliHLTGlobalBarrelTrack> tracks;
if ((iResult=AliHLTGlobalBarrelTrack::ConvertTrackDataArray(reinterpret_cast<const AliHLTTracksData*>(pBlock->fPtr), pBlock->fSize, tracks))>=0) {
for (vector<AliHLTGlobalBarrelTrack>::iterator element=tracks.begin();
// Get ITS SPD vertex
+ for( const AliHLTComponentBlockData *i= GetFirstInputBlock(kAliHLTDataTypeESDVertex|kAliHLTDataOriginITS); i!=NULL; i=GetNextInputBlock() ){
+ fBenchmark.AddInput(i->fSize);
+ }
for ( const TObject *iter = GetFirstInputObject(kAliHLTDataTypeESDVertex|kAliHLTDataOriginITS); iter != NULL; iter = GetNextInputObject() ) {
AliESDVertex *vtx = dynamic_cast<AliESDVertex*>(const_cast<TObject*>( iter ) );
// now update ESD tracks with the ITSOut info
for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(kAliHLTDataTypeTrack|kAliHLTDataOriginITSOut);
pBlock!=NULL; pBlock=GetNextInputBlock()) {
+ fBenchmark.AddInput(pBlock->fSize);
vector<AliHLTGlobalBarrelTrack> tracks;
if ((iResult=AliHLTGlobalBarrelTrack::ConvertTrackDataArray(reinterpret_cast<const AliHLTTracksData*>(pBlock->fPtr), pBlock->fSize, tracks))>0) {
for (vector<AliHLTGlobalBarrelTrack>::iterator element=tracks.begin();
// now update ESD tracks with the ITS info
for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(kAliHLTDataTypeTrack|kAliHLTDataOriginITS);
pBlock!=NULL; pBlock=GetNextInputBlock()) {
+ fBenchmark.AddInput(pBlock->fSize);
vector<AliHLTGlobalBarrelTrack> tracks;
if ((iResult=AliHLTGlobalBarrelTrack::ConvertTrackDataArray(reinterpret_cast<const AliHLTTracksData*>(pBlock->fPtr), pBlock->fSize, tracks))>0) {
for (vector<AliHLTGlobalBarrelTrack>::iterator element=tracks.begin();
for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(kAliHLTDataTypeGlobalVertexer);
pBlock!=NULL; pBlock=GetNextInputBlock()) {
-
+ fBenchmark.AddInput(pBlock->fSize);
AliHLTGlobalVertexerComponent::FillESD( pESD, reinterpret_cast<AliHLTGlobalVertexerComponent::AliHLTGlobalVertexerData* >(pBlock->fPtr) );
}
// convert the HLT TRD tracks to ESD tracks
for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(kAliHLTDataTypeTrack | kAliHLTDataOriginTRD);
pBlock!=NULL; pBlock=GetNextInputBlock()) {
+ fBenchmark.AddInput(pBlock->fSize);
vector<AliHLTGlobalBarrelTrack> tracks;
if ((iResult=AliHLTGlobalBarrelTrack::ConvertTrackDataArray(reinterpret_cast<const AliHLTTracksData*>(pBlock->fPtr), pBlock->fSize, tracks))>0) {
for (vector<AliHLTGlobalBarrelTrack>::iterator element=tracks.begin();
}
for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(kAliHLTDataTypeCaloCluster | kAliHLTDataOriginAny); pBlock!=NULL; pBlock=GetNextInputBlock())
{
+ fBenchmark.AddInput(pBlock->fSize);
AliHLTCaloClusterHeaderStruct *caloClusterHeaderPtr = reinterpret_cast<AliHLTCaloClusterHeaderStruct*>(pBlock->fPtr);
HLTDebug("%d HLT clusters from spec: 0x%X", caloClusterHeaderPtr->fNClusters, pBlock->fSpecification);
}
// Add tracks from MUON.
+ for( const AliHLTComponentBlockData *i= GetFirstInputBlock(kAliHLTAnyDataType | kAliHLTDataOriginMUON); i!=NULL; i=GetNextInputBlock() ){
+ fBenchmark.AddInput(i->fSize);
+ }
+
for (const TObject* obj = GetFirstInputObject(kAliHLTAnyDataType | kAliHLTDataOriginMUON);
obj != NULL;
obj = GetNextInputObject()