fTPCInner(0),
fOp(0),
fHMPIDp(0),
- fFriendTrack(new AliESDfriendTrack()),
+ fFriendTrack(NULL),
fTPCClusterMap(159),//number of padrows
fTPCSharedMap(159),//number of padrows
fFlags(0),
//
// The default ESD constructor
//
+ if (!OnlineMode()) fFriendTrack=new AliESDfriendTrack();
+
Int_t i;
for (i=0; i<AliPID::kSPECIES; i++) {
fTrackTime[i]=0.;
for (i=0;i<12;i++) {fITSModule[i]=-1;}
}
+bool AliESDtrack::fgkOnlineMode=false;
+
//_______________________________________________________________________
AliESDtrack::AliESDtrack(const AliESDtrack& track):
AliExternalTrackParam(track),
delete fOp;
delete fHMPIDp;
delete fCp;
- delete fFriendTrack;
+ if (fFriendTrack) delete fFriendTrack;
+ fFriendTrack=NULL;
if(fTRDnSlices)
delete[] fTRDslices;
}
// add calib object to the list
//
if (!fFriendTrack) fFriendTrack = new AliESDfriendTrack;
+ if (!fFriendTrack) return;
fFriendTrack->AddCalibObject(object);
}
}
Set(t->GetX(),t->GetAlpha(),t->GetParameter(),t->GetCovariance());
+ if (fFriendTrack) {
if (flags==kITSout) fFriendTrack->SetITSOut(*t);
if (flags==kTPCout) fFriendTrack->SetTPCOut(*t);
if (flags==kTRDrefit) fFriendTrack->SetTRDIn(*t);
+ }
switch (flags) {
{
fITSClusterMap=0;
fITSncls=t->GetNumberOfClusters();
+ if (fFriendTrack) {
Int_t* indexITS = new Int_t[AliESDfriendTrack::kMaxITScluster];
for (Int_t i=0;i<AliESDfriendTrack::kMaxITScluster;i++) {
indexITS[i]=t->GetClusterIndex(i);
}
fFriendTrack->SetITSIndices(indexITS,AliESDfriendTrack::kMaxITScluster);
delete [] indexITS;
+ }
fITSchi2=t->GetChi2();
fITSsignal=t->GetPIDsignal();
}
case kTPCout:
{
- Int_t* indexTPC = new Int_t[AliESDfriendTrack::kMaxTPCcluster];
if (flags & kTPCout){
if (!fOp) fOp=new AliExternalTrackParam(*t);
else
fTPCncls=t->GetNumberOfClusters();
fTPCchi2=t->GetChi2();
+ if (fFriendTrack)
{//prevrow must be declared in separate namespace, otherwise compiler cries:
//"jump to case label crosses initialization of `Int_t prevrow'"
+ Int_t* indexTPC = new Int_t[AliESDfriendTrack::kMaxTPCcluster];
Int_t prevrow = -1;
// for (Int_t i=0;i<fTPCncls;i++)
for (Int_t i=0;i<AliESDfriendTrack::kMaxTPCcluster;i++)
fTRDLabel = t->GetLabel();
fTRDchi2 = t->GetChi2();
fTRDncls = t->GetNumberOfClusters();
+ if (fFriendTrack) {
Int_t* indexTRD = new Int_t[AliESDfriendTrack::kMaxTRDcluster];
for (Int_t i=0;i<AliESDfriendTrack::kMaxTRDcluster;i++) indexTRD[i]=-2;
for (Int_t i=0;i<6;i++) indexTRD[i]=t->GetTrackletIndex(i);
fFriendTrack->SetTRDIndices(indexTRD,AliESDfriendTrack::kMaxTRDcluster);
delete [] indexTRD;
-
+ }
fTRDsignal=t->GetPIDsignal();
}
//---------------------------------------------------------------------
// This function returns indices of the assgined ITS clusters
//---------------------------------------------------------------------
- if (idx) {
+ if (idx && fFriendTrack) {
Int_t *index=fFriendTrack->GetITSindices();
for (Int_t i=0; i<AliESDfriendTrack::kMaxITScluster; i++) {
if ( (i>=fITSncls) && (i<6) ) idx[i]=-1;
//---------------------------------------------------------------------
// This function returns indices of the assgined ITS clusters
//---------------------------------------------------------------------
- if (idx) {
+ if (idx && fFriendTrack) {
Int_t *index=fFriendTrack->GetTPCindices();
if (index){
Int_t findable=0;
Int_t last=-nNeighbours;
- for (Int_t i=row0; i<row1; ++i){
+ Int_t upperBound=fTPCClusterMap.GetNbits();
+ if (upperBound>row1) upperBound=row1;
+ for (Int_t i=row0; i<upperBound; ++i){
//look to current row
if (fTPCClusterMap[i]) {
last=i;
// GetDensity of the clusters on given region between row0 and row1
// Dead zone effect takin into acoount
//
+ if (!fFriendTrack) return 0.0;
Int_t good = 0;
Int_t found = 0;
//
//---------------------------------------------------------------------
// This function returns indices of the assgined TRD clusters
//---------------------------------------------------------------------
- if (idx) {
+ if (idx && fFriendTrack) {
Int_t *index=fFriendTrack->GetTRDindices();
if (index) {
// 2. The idx array store not only the index but also the layer of the tracklet.
// Therefore tracks with TRD gaps contain default values for indices [-1]
+ if (!fFriendTrack) return 0;
if (!idx) return GetTRDntracklets();
Int_t *index=fFriendTrack->GetTRDindices();
Int_t n = 0;
Float_t &xloc,Float_t &zloc) const;
Int_t GetITSLabel() const {return fITSLabel;}
void SetITStrack(AliKalmanTrack * track){
- fFriendTrack->SetITStrack(track);
+ if (fFriendTrack) fFriendTrack->SetITStrack(track);
}
AliKalmanTrack *GetITStrack(){
- return fFriendTrack->GetITStrack();
+ return fFriendTrack!=NULL?fFriendTrack->GetITStrack():NULL;
}
Bool_t HasPointOnITSLayer(Int_t i) const {return TESTBIT(fITSClusterMap,i);}
Bool_t HasSharedPointOnITSLayer(Int_t i) const {return TESTBIT(fITSSharedMap,i);}
Int_t GetTRDLabel() const {return fTRDLabel;}
void SetTRDtrack(AliKalmanTrack * track){
- fFriendTrack->SetTRDtrack(track);
+ if (fFriendTrack) fFriendTrack->SetTRDtrack(track);
}
AliKalmanTrack *GetTRDtrack(){
- return fFriendTrack->GetTRDtrack();
+ return fFriendTrack!=NULL?fFriendTrack->GetTRDtrack():NULL;
}
void SetTOFsignal(Double_t tof) {fTOFsignal=tof;}
void SetTrackPointArray(AliTrackPointArray *points) {
- fFriendTrack->SetTrackPointArray(points);
+ if (fFriendTrack) fFriendTrack->SetTrackPointArray(points);
}
const AliTrackPointArray *GetTrackPointArray() const {
- return fFriendTrack->GetTrackPointArray();
+ return fFriendTrack!=NULL?fFriendTrack->GetTrackPointArray():NULL;
}
Bool_t RelateToVertexTPC(const AliESDVertex *vtx, Double_t b, Double_t maxd,
AliExternalTrackParam *cParam=0);
//
void FillPolymarker(TPolyMarker3D *pol, Float_t magf, Float_t minR, Float_t maxR, Float_t stepR);
+ //
+ // online mode Matthias.Richter@cern.ch
+ // in order to optimize AliESDtrack for usage in the online HLT,
+ // some functionality is disabled
+ // - creation of AliESDfriendTrack
+ // - set lengt of bit fields fTPCClusterMap and fTPCSharedMap to 0
+ static void OnlineMode(bool mode) {fgkOnlineMode=mode;}
+ static bool OnlineMode() {return fgkOnlineMode;}
protected:
AliExternalTrackParam *fCp; // Track parameters constrained to the primary vertex
AliESDEvent* fESDEvent; //!Pointer back to event to which the track belongs
private:
+ static bool fgkOnlineMode; //! indicate the online mode to skip some of the functionality
AliESDtrack & operator=(const AliESDtrack & );
ClassDef(AliESDtrack,59) //ESDtrack