#include "AliHLTTPCOfflineTrackerComponent.h"
#include "TString.h"
+#include "TClonesArray.h"
#include "TObjArray.h"
#include "TObjString.h"
#include "AliVParticle.h"
#include "AliCDBManager.h"
#include "AliCDBEntry.h"
#include "AliGeomManager.h"
-#include "AliMagFMaps.h"
+#include "AliTPCReconstructor.h"
#include "AliTPCParam.h"
+#include "AliTPCRecoParam.h"
#include "AliTPCParamSR.h"
#include "AliTPCtrackerMI.h"
#include "AliTPCClustersRow.h"
+#include "AliTPCseed.h"
#include "AliESDEvent.h"
-#include "AliESDfriend.h"
#include "AliHLTTPCDefinitions.h"
/** ROOT macro for the implementation of ROOT specific class methods */
fGeometryFileName(""),
fTPCGeomParam(0),
fTracker(0),
-fESD(0),
-fESDfriend(0)
+fESD(0)
{
// Default constructor
fGeometryFileName = getenv("ALICE_ROOT");
//
// initialisation
//
-
+
// Load geometry
- HLTInfo("Geometry file %s",fGeometryFileName.c_str());
AliGeomManager::LoadGeometry(fGeometryFileName.c_str());
if((AliGeomManager::GetGeometry()) == 0) {
HLTError("Cannot load geometry from file %s",fGeometryFileName.c_str());
iResult=-EINVAL;
}
+
+ // TPC reconstruction parameters
+ AliTPCRecoParam * tpcRecoParam = AliTPCRecoParam::GetHLTParam();
+ if(tpcRecoParam) {
+ tpcRecoParam->SetClusterSharing(kTRUE);
+
+ AliTPCReconstructor tpcReconstructor;
+ tpcReconstructor.SetRecoParam(tpcRecoParam);
+ }
// TPC geometry parameters
fTPCGeomParam = new AliTPCParamSR;
fESD = new AliESDEvent();
if (fESD) {
fESD->CreateStdContent();
-
- // add ESD friend
- fESDfriend = new AliESDfriend();
- if(fESDfriend) fESD->AddObject(fESDfriend);
}
if (!fTracker || !fESD || !fTPCGeomParam) {
if(fTPCGeomParam) delete fTPCGeomParam; fTPCGeomParam = 0;
if(fTracker) delete fTracker; fTracker = 0;
if(fESD) delete fESD; fESD = 0;
- //Note: fESD is owner of fESDfriends
return 0;
}
HLTInfo("DoEvent processing data");
int iResult=0;
- TObjArray *clusterArray=0;
- TObjArray *seedArray=0;
+ TClonesArray *clusterArray=0;
int slice, patch;
const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(kAliHLTDataTypeTObjArray|kAliHLTDataOriginTPC);
int maxPatch=AliHLTTPCDefinitions::GetMaxPatchNr(pBlock->fSpecification);
if (fTracker && fESD) {
- // loop over input data blocks: TObjArrays of clusters
- for (TObject *pObj = (TObject *)GetFirstInputObject(kAliHLTDataTypeTObjArray|kAliHLTDataOriginTPC/*AliHLTTPCDefinitions::fgkOfflineClustersDataType*/,"TObjArray",0);
+ // loop over input data blocks: TClonesArrays of clusters
+ for (TObject *pObj = (TObject *)GetFirstInputObject(kAliHLTDataTypeTObjArray|kAliHLTDataOriginTPC/*AliHLTTPCDefinitions::fgkOfflineClustersDataType*/,"TClonesArray",0);
pObj !=0 && iResult>=0;
pObj = (TObject *)GetNextInputObject(0)) {
- clusterArray = dynamic_cast<TObjArray*>(pObj);
+ clusterArray = dynamic_cast<TClonesArray*>(pObj);
if (!clusterArray) continue;
- HLTInfo("load %d cluster rows from block %s 0x%08x", clusterArray->GetEntries(), DataType2Text(GetDataType(pObj)).c_str(), GetSpecification(pObj));
+ HLTInfo("load %d clusters from block %s 0x%08x", clusterArray->GetEntries(), DataType2Text(GetDataType(pObj)).c_str(), GetSpecification(pObj));
slice=AliHLTTPCDefinitions::GetMinSliceNr(GetSpecification(pObj));
patch=AliHLTTPCDefinitions::GetMinPatchNr(GetSpecification(pObj));
#ifndef HAVE_NOT_TPCOFFLINE_REC
fTracker->LoadClusters(clusterArray);
#endif //HAVE_NOT_TPCOFFLINE_REC
+
+ clusterArray->Delete();
}// end loop over input objects
+#ifndef HAVE_NOT_TPCOFFLINE_REC
+ // Load outer sectors
+ fTracker->LoadOuterSectors();
+ // Load inner sectors
+ fTracker->LoadInnerSectors();
+#endif
+
// set magnetic field for the ESD, assumes correct initialization of
// the field map
fESD->SetMagneticField(AliTracker::GetBz());
-
+
// run tracker
fTracker->Clusters2Tracks(fESD);
- // add TPC seed to the AliESDtrack
- seedArray = fTracker->GetSeeds();
- if(seedArray) {
- Int_t nseed = seedArray->GetEntriesFast();
- HLTInfo("Number TPC seeds %d",nseed);
-
- for(Int_t i=0; i<nseed; ++i) {
- AliTPCseed *seed = (AliTPCseed*)seedArray->UncheckedAt(i);
- if(!seed) continue;
-
- AliESDtrack *esdtrack=fESD->GetTrack(i);
- if(esdtrack) esdtrack->AddCalibObject((TObject*)seed);
- else
- HLTInfo("Cannot add TPC seed to AliESDtrack");
- }
- }
-
- // add ESDfriend to AliESDEvent
- fESDfriend->~AliESDfriend();
- new (fESDfriend) AliESDfriend(); // Reset ...
- fESD->GetESDfriend(fESDfriend);
-
// unload clusters
fTracker->UnloadClusters();
Int_t nTracks = fESD->GetNumberOfTracks();
- HLTInfo("Number of tracks %d", nTracks);
+ HLTInfo("Number TPC tracks %d", nTracks);
// calculate specification from the specification of input data blocks
AliHLTUInt32_t iSpecification = AliHLTTPCDefinitions::EncodeDataSpecification( minSlice, maxSlice, minPatch, maxPatch );
// send data
PushBack(fESD, kAliHLTDataTypeESDObject|kAliHLTDataOriginTPC, iSpecification);
- // reset ESDs friends (no Reset function!)
- fESDfriend->~AliESDfriend();
- new (fESDfriend) AliESDfriend(); // Reset ...
-
- // reset ESDs
+ // reset ESDs and ESDs friends
fESD->Reset();
} else {
if (argument.IsNull()) continue;
if (argument.CompareTo("-solenoidBz")==0) {
- if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
- // TODO: check if there is common functionality in the AliMagF* classes
- float SolenoidBz=((TObjString*)pTokens->At(i))->GetString().Atof();
- if (SolenoidBz<kAlmost0Field) SolenoidBz=kAlmost0Field;
- float factor=1.;
- int map=AliMagFMaps::k2kG;
- if (SolenoidBz<3.) {
- map=AliMagFMaps::k2kG;
- factor=SolenoidBz/2;
- } else if (SolenoidBz>=3. && SolenoidBz<4.5) {
- map=AliMagFMaps::k4kG;
- factor=SolenoidBz/4;
- } else {
- map=AliMagFMaps::k5kG;
- factor=SolenoidBz/5;
- }
- // the magnetic field map is not supposed to change
- // field initialization should be done once in the beginning
- // TODO: does the factor need adjustment?
- const AliMagF* currentMap=AliTracker::GetFieldMap();
- if (!currentMap) {
- AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 2, 1., 10., map);
- AliTracker::SetFieldMap(field,kTRUE);
- HLTInfo("Solenoid Field set to: %f map %d", SolenoidBz, map);
- } else if (currentMap->Map()!=map) {
- HLTWarning("omitting request to override field map %s with %s", currentMap->Map(), map);
- }
+ if ( ( bMissingParam = ( ++i >= pTokens->GetEntries() ) ) ) break;
+ HLTWarning("argument -solenoidBz is deprecated, magnetic field set up globally (%f)", GetBz());
continue;
} else {
HLTError("unknown argument %s", argument.Data());
// see header file for class documentation
int iResult=0;
const char* path=kAliHLTCDBSolenoidBz;
+#ifdef __DEBUG
const char* defaultNotify="";
+#endif
if (cdbEntry) {
path=cdbEntry;
+#ifdef __DEBUG
defaultNotify=" (default)";
+#endif
}
if (path) {
if (chainId) {} // just to get rid of warning, can not comment argument due to debug message