*/
#include "AliHLTTRDOfflineTrackerV1Component.h"
-#include "AliCDBManager.h"
-#include "AliTRDrecoParam.h"
#include "AliHLTTRDDefinitions.h"
+#include "AliHLTTRDUtils.h"
+#include "AliTRDrecoParam.h"
+#include "AliTRDtrackerV1.h"
+#include "AliTRDReconstructor.h"
+#include "AliCDBManager.h"
+#include "AliESDEvent.h"
+#include "TClonesArray.h"
+#include "TObjString.h"
+
+#include "AliTRDtrackV1.h"
+#include "AliTRDseedV1.h"
+#include "AliTRDcluster.h"
ClassImp(AliHLTTRDOfflineTrackerV1Component)
:AliHLTTRDTrackerV1Component()
{
// Default constructor
- fOffline=kTRUE;
}
AliHLTTRDOfflineTrackerV1Component::~AliHLTTRDOfflineTrackerV1Component()
// Work is Done in DoDeInit()
}
+void AliHLTTRDOfflineTrackerV1Component::GetInputDataTypes( vector<AliHLTComponent_DataType>& list)
+{
+ // Get the list of input data
+ list.clear();
+ AliHLTTRDTrackerV1Component::GetInputDataTypes(list);
+ list.push_back(AliHLTTRDDefinitions::fgkHiLvlClusterDataType);
+}
+
+AliHLTComponentDataType AliHLTTRDOfflineTrackerV1Component::GetOutputDataType()
+{
+ // Get the output data type
+ return kAliHLTMultipleDataType;
+}
+
int AliHLTTRDOfflineTrackerV1Component::GetOutputDataTypes(AliHLTComponentDataTypeList& tgtList)
{
// Get the output data types
void AliHLTTRDOfflineTrackerV1Component::GetOutputDataSize( unsigned long& constBase, double& inputMultiplier )
{
// Get the output data size
- constBase = 1000000;
- inputMultiplier = 4*((double)fOutputPercentage);
+ AliHLTTRDTrackerV1Component::GetOutputDataSize(constBase, inputMultiplier);
+ constBase += 500;
}
AliHLTComponent* AliHLTTRDOfflineTrackerV1Component::Spawn()
int AliHLTTRDOfflineTrackerV1Component::DoInit( int argc, const char** argv )
{
int iResult = 0;
- SetOfflineParams();
iResult=AliHLTTRDTrackerV1Component::DoInit(argc, argv);
- fRecoParam->SetStreamLevel(AliTRDrecoParam::kTracker, 1); //in order to have the friends written
+ fRecoParam->SetStreamLevel(AliTRDrecoParam::kTracker, 1); // in order to have the friends written
return iResult;
}
return "TRDOfflineTrackerV1"; // The ID of this component
}
-void AliHLTTRDOfflineTrackerV1Component::SetOfflineParams(){
- if(!AliCDBManager::Instance()->IsDefaultStorageSet()){
- HLTFatal("You are resetting the Default Storage of the CDBManager!");
- HLTFatal("Let's hope that this program is NOT running on the HLT cluster!");
- AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
- }
- if(AliCDBManager::Instance()->GetRun()<0){
- HLTFatal("You are resetting the CDB run number to 0!");
- HLTFatal("Let's hope that this program is NOT running on the HLT cluster!");
- AliCDBManager::Instance()->SetRun(0);
- }
-}
-
-int AliHLTTRDOfflineTrackerV1Component::DoDeinit()
-{
- return AliHLTTRDTrackerV1Component::DoDeinit();
-}
-
int AliHLTTRDOfflineTrackerV1Component::DoEvent(const AliHLTComponent_EventData& evtData, const AliHLTComponent_BlockData* blocks,
AliHLTComponent_TriggerData& trigData, AliHLTUInt8_t* outputPtr,
AliHLTUInt32_t& size, vector<AliHLTComponent_BlockData>& outputBlocks )
{
if ( GetFirstInputBlock( kAliHLTDataTypeSOR ) || GetFirstInputBlock( kAliHLTDataTypeEOR ) )
return 0;
- return AliHLTTRDTrackerV1Component::DoEvent(evtData, blocks, trigData, outputPtr, size, outputBlocks );
+
+ if(!GetFirstInputBlock(AliHLTTRDDefinitions::fgkHiLvlClusterDataType))
+ return AliHLTTRDTrackerV1Component::DoEvent(evtData, blocks, trigData, outputPtr, size, outputBlocks );
+
+ for(const TObject *iter = GetFirstInputObject(AliHLTTRDDefinitions::fgkHiLvlClusterDataType); iter; iter = GetNextInputObject())
+ {
+ TClonesArray* clusterArray = dynamic_cast<TClonesArray*>(const_cast<TObject*>(iter));
+ if(!clusterArray)continue;
+ TObjString* strg = dynamic_cast<TObjString*>(const_cast<TObject*>(GetNextInputObject()));
+ if(!strg)continue;
+
+ fNtimeBins = strg->String().Atoi();
+ fESD->Reset();
+ AliTRDtrackerV1::SetNTimeBins(fNtimeBins);
+ HLTDebug("TClonesArray of clusters: nbEntries = %i", clusterArray->GetEntriesFast());
+ fTracker->LoadClusters(clusterArray);
+ fTracker->Clusters2Tracks(fESD);
+ Int_t nTracks = fESD->GetNumberOfTracks();
+ HLTInfo("Number of tracks == %d ==", nTracks);
+ TClonesArray* trdTracks = fTracker->GetListOfTracks();
+
+ if(fEmulateHLTTracks && trdTracks){
+ trdTracks = new TClonesArray(*trdTracks);
+ AliHLTTRDUtils::EmulateHLTTracks(trdTracks);
+ }
+
+ PushBack(trdTracks, AliHLTTRDDefinitions::fgkHiLvlTracksDataType, 0);
+ PushBack(strg, AliHLTTRDDefinitions::fgkHiLvlTracksDataType, 0);
+ fTracker->UnloadClusters();
+ AliTRDReconstructor::SetClusters(0x0);
+
+ if(fEmulateHLTTracks && trdTracks){
+ trdTracks->Delete();
+ delete trdTracks;
+ }
+ }
+ return 0;
}
#include "AliHLTTRDTrackerV1Component.h"
#include "AliHLTTRDDefinitions.h"
-#include "AliHLTTRDCluster.h"
#include "AliHLTTRDTrack.h"
#include "AliHLTTRDUtils.h"
#include <cerrno>
#include <string>
-#ifdef HAVE_VALGRIND_CALLGRIND_H
-#include <valgrind/callgrind.h>
-#else
-#define CALLGRIND_START_INSTRUMENTATION do { } while (0)
-#define CALLGRIND_STOP_INSTRUMENTATION do { } while (0)
-#endif
-
ClassImp(AliHLTTRDTrackerV1Component)
AliHLTTRDTrackerV1Component::AliHLTTRDTrackerV1Component():
fClusterArray(NULL),
fRecoParamType(-1),
fNtimeBins(-1),
- fMagneticField(-1),
fPIDmethod(1),
fgeometryFileName(""),
- fieldStrength(-101),
- fSlowTracking(kFALSE),
+ fHLTflag(kTRUE),
fOutputV1Tracks(kTRUE),
- fOffline(kFALSE)
+ fHighLevelOutput(kFALSE),
+ fEmulateHLTTracks(kFALSE),
+ fImproveTracklets(kTRUE)
{
// Default constructor
{
// Get the output data types
tgtList.clear();
- //tgtList.push_back(AliHLTTRDDefinitions::fgkTimeBinPropagationDataType);
tgtList.push_back(kAliHLTDataTypeTrack | kAliHLTDataOriginTRD);
tgtList.push_back(AliHLTTRDDefinitions::fgkTracksDataType);
return tgtList.size();
{
// Process an event
- if (evtData.fEventID == 1)
- CALLGRIND_START_INSTRUMENTATION;
-
HLTDebug("NofBlocks %i", evtData.fBlockCnt );
fESD->Reset();
AliHLTUInt32_t totalSize = 0, offset = 0;
- vector<AliHLTComponent_DataType> expectedDataTypes;
- GetInputDataTypes(expectedDataTypes);
+ AliHLTComponentDataType expectedDataType = AliHLTTRDDefinitions::fgkClusterDataType;
for ( unsigned long iBlock = 0; iBlock < evtData.fBlockCnt; iBlock++ )
{
const AliHLTComponentBlockData &block = blocks[iBlock];
AliHLTComponentDataType inputDataType = block.fDataType;
- Bool_t correctDataType = kFALSE;
- for(UInt_t i = 0; i < expectedDataTypes.size(); i++){
- if( expectedDataTypes.at(i) == inputDataType)
- correctDataType = kTRUE;
- }
- if (!correctDataType)
+ if(inputDataType != expectedDataType)
{
HLTDebug( "Block # %i/%i; Event 0x%08LX (%Lu) Wrong received datatype: %s - Skipping",
iBlock, evtData.fBlockCnt-1,
TClonesArray* trdTracks;
trdTracks = fTracker->GetListOfTracks();
- if(!fOffline && nTracks>0){
+ if(fHighLevelOutput){
+ if(fEmulateHLTTracks && trdTracks){
+ // TClonesArray* oldArr = trdTracks;
+ trdTracks = new TClonesArray(*trdTracks);
+ AliHLTTRDUtils::EmulateHLTTracks(trdTracks);
+ // if(oldArr->At(0)){
+ // HLTInfo("Old Track:");
+ // ((AliTRDtrackV1*)oldArr->At(0))->Print("a");
+ // HLTInfo("\nNew Track:");
+ // ((AliTRDtrackV1*)trdTracks->At(0))->Print("a");
+ // }
+ }
+
+ TObjString strg;
+ strg.String() += fNtimeBins;
+ PushBack(trdTracks, AliHLTTRDDefinitions::fgkHiLvlTracksDataType, 0);
+ PushBack(&strg, AliHLTTRDDefinitions::fgkHiLvlTracksDataType, 0);
+
+ if(fEmulateHLTTracks && trdTracks){
+ trdTracks->Delete();
+ delete trdTracks;
+ }
+ }
+ else if(nTracks>0){
HLTDebug("We have an output ESDEvent: 0x%x with %i tracks", fESD, nTracks);
AliHLTUInt32_t addedSize = AliHLTTRDUtils::AddESDToOutput(fESD, outputPtr+offset);
totalSize += addedSize;
offset = totalSize;
}
}
- if(fOffline){
- if(trdTracks)
- PushBack(trdTracks, AliHLTTRDDefinitions::fgkHiLvlTracksDataType, 0);
- else
- PushBack(new TObject, AliHLTTRDDefinitions::fgkHiLvlTracksDataType, 0);
- }
HLTDebug("totalSize: %i", totalSize);
HLTWarning("argument -solenoidBz is deprecated, magnetic field set up globally (%f)", GetBz());
continue;
}
- else if (argument.CompareTo("-NTimeBins")==0) {
- if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
- HLTInfo("Option depreceated");
- continue;
- }
else if (argument.CompareTo("-geometry")==0) {
if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
HLTInfo("Setting geometry to: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
HLTInfo("Cosmics reconstruction selected");
continue;
}
- else if (argument.CompareTo("-magnetic_field_ON")==0) {
- fMagneticField = 1;
- HLTInfo("Reconstructon with magnetic field");
- continue;
- }
- else if (argument.CompareTo("-magnetic_field_OFF")==0) {
- fMagneticField = 0;
- HLTInfo("Reconstructon without magnetic field");
- continue;
- }
- else if (argument.CompareTo("-slowTracking")==0) {
- fSlowTracking = kTRUE;
- HLTInfo("Using slow tracking");
+ else if (argument.CompareTo("-HLTflag")==0) {
+ if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
+ TString toCompareTo=((TObjString*)pTokens->At(i))->GetString();
+ if (toCompareTo.CompareTo("yes")==0){
+ HLTInfo("Setting HLTflag to: %s", toCompareTo.Data());
+ fHLTflag=kTRUE;
+ }
+ else if (toCompareTo.CompareTo("no")==0){
+ HLTInfo("Setting HLTflag to: %s", toCompareTo.Data());
+ fHLTflag=kFALSE;
+ }
+ else {
+ HLTError("unknown argument for HLTflag: %s", toCompareTo.Data());
+ iResult=-EINVAL;
+ break;
+ }
continue;
}
else if (argument.CompareTo("-outputV1Tracks")==0) {
break;
}
continue;
- }
+ }
+ else if (argument.CompareTo("-highLevelOutput")==0) {
+ if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
+ TString toCompareTo=((TObjString*)pTokens->At(i))->GetString();
+ if (toCompareTo.CompareTo("yes")==0){
+ HLTWarning("Setting highLevelOutput to: %s", toCompareTo.Data());
+ fHighLevelOutput=kTRUE;
+ }
+ else if (toCompareTo.CompareTo("no")==0){
+ HLTInfo("Setting highLevelOutput to: %s", toCompareTo.Data());
+ fHighLevelOutput=kFALSE;
+ }
+ else {
+ HLTError("unknown argument for highLevelOutput: %s", toCompareTo.Data());
+ iResult=-EINVAL;
+ break;
+ }
+ continue;
+ }
+ else if (argument.CompareTo("-emulateHLTTracks")==0) {
+ if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
+ TString toCompareTo=((TObjString*)pTokens->At(i))->GetString();
+ if (toCompareTo.CompareTo("yes")==0){
+ HLTWarning("Setting emulateHLTTracks to: %s", toCompareTo.Data());
+ fEmulateHLTTracks=kTRUE;
+ }
+ else if (toCompareTo.CompareTo("no")==0){
+ HLTInfo("Setting emulateHLTTracks to: %s", toCompareTo.Data());
+ fEmulateHLTTracks=kFALSE;
+ }
+ else {
+ HLTError("unknown argument for emulateHLTTracks: %s", toCompareTo.Data());
+ iResult=-EINVAL;
+ break;
+ }
+ continue;
+ }
else if (argument.CompareTo("-PIDmethod")==0) {
if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
TString toCompareTo=((TObjString*)pTokens->At(i))->GetString();
HLTInfo("Geometry Already Loaded!");
}
- if (fRecoParamType == 0)
- {
+ if(fReconstructor->GetRecoParam()){
+ fRecoParam = new AliTRDrecoParam(*fReconstructor->GetRecoParam());
+ HLTInfo("RecoParam already set!");
+ }else{
+ if(fRecoParamType == 0){
HLTDebug("Low flux params init.");
fRecoParam = AliTRDrecoParam::GetLowFluxParam();
}
-
- if (fRecoParamType == 1)
- {
+ if(fRecoParamType == 1){
HLTDebug("High flux params init.");
fRecoParam = AliTRDrecoParam::GetHighFluxParam();
}
-
- if (fRecoParamType == 2)
- {
+ if(fRecoParamType == 2){
HLTDebug("Cosmic Test params init.");
fRecoParam = AliTRDrecoParam::GetCosmicTestParam();
}
+ }
- if (fRecoParam == 0)
+ if(!fRecoParam)
{
HLTError("No reco params initialized. Sniffing big trouble!");
return -EINVAL;
case 2: AliTRDRecoParamSetPIDNeuralNetwork(kFALSE); break;
}
+ fRecoParam->SetImproveTracklets(fImproveTracklets);
+
fRecoParam->SetStreamLevel(AliTRDrecoParam::kTracker, 0);
fReconstructor->SetRecoParam(fRecoParam);
TString recoOptions="sa,!cw";
- if(!fSlowTracking)
+ if(fHLTflag)
recoOptions += ",hlt";
HLTDebug("Reconstructor options are: %s",recoOptions.Data());