#include "AliESDtrack.h"
#include "AliTPCseed.h"
#include "AliITStrackMI.h"
-#include "AliTRDtrack.h"
+#include "AliTRDtrackV1.h"
#include "AliMCInfo.h"
#include "AliESDRecInfo.h"
fTPCtrack(0), // tpc track
fITStrack(0), // its track
fTRDtrack(0), // trd track
- fTPCtrackAtVertex(0) // tpc track propagated to the vertex
+ fTracks(0) // array of tracks with the same label
{
//
// default constructor
AliESDRecInfo::AliESDRecInfo(const AliESDRecInfo& recinfo):
- TObject()
+ TObject(),
+ fITSOn(0), // ITS refitted inward
+ fTRDOn(0), // ITS refitted inward
+ fDeltaP(0), //delta of momenta
+ fSign(0), // sign
+ fReconstructed(0), //flag if track was reconstructed
+ fFake(0), // fake track
+ fMultiple(0), // number of reconstructions
+ fTPCOn(0), // TPC refitted inward
+ fBestTOFmatch(0), //best matching between times
+ fESDtrack(0), // esd track
+ fTrackF(0), // friend track
+ fTPCtrack(0), // tpc track
+ fITStrack(0), // its track
+ fTRDtrack(0), // trd track
+ fTracks(0) // array of tracks with the same label
{
//
//
//
memcpy(this,&recinfo, sizeof(recinfo));
fESDtrack=0; fTrackF=0; fTPCtrack=0;fITStrack=0;fTRDtrack=0;
+ fTracks=0;
SetESDtrack(recinfo.GetESDtrack());
}
+AliESDRecInfo& AliESDRecInfo::operator=(const AliESDRecInfo& info) {
+ //
+ // Assignment operator
+ //
+ this->~AliESDRecInfo();
+ new (this) AliESDRecInfo(info);
+ return *this;
+}
+
+
+
AliESDRecInfo::~AliESDRecInfo()
{
// destructor
//
if (fESDtrack) { delete fESDtrack; fESDtrack=0;}
- if (fTrackF) { delete fTrackF; fTrackF=0;}
+ if (fTrackF) { fTrackF=0;}
if (fTPCtrack) { delete fTPCtrack; fTPCtrack=0;}
if (fITStrack) { delete fITStrack; fITStrack=0;}
if (fTRDtrack) { delete fTRDtrack; fTRDtrack=0;}
-
+ if (fTracks) {
+ delete fTracks; fTracks=0;
+ }
}
fFake =0;
fReconstructed=0;
if (fESDtrack) { delete fESDtrack; fESDtrack=0;}
- if (fTrackF) { delete fTrackF; fTrackF=0;}
+ if (fTrackF) { fTrackF=0;}
if (fTPCtrack) { delete fTPCtrack; fTPCtrack=0;}
if (fITStrack) { delete fITStrack; fITStrack=0;}
if (fTRDtrack) { delete fTRDtrack; fTRDtrack=0;}
+ if (fTracks) { delete fTracks; fTracks=0;}
}
void AliESDRecInfo::SetESDtrack(const AliESDtrack *track){
//
//
//
+
if (fESDtrack) delete fESDtrack;
fESDtrack = (AliESDtrack*)track->Clone();
- if (0 &&track->GetFriendTrack()){
- if (fTrackF) delete fTrackF;
- fTrackF = (AliESDfriendTrack*)track->GetFriendTrack()->Clone();
- if (fTrackF->GetCalibObject(0)){
- if (fTPCtrack) delete fTPCtrack;
- fTPCtrack = (AliTPCseed*)fTrackF->GetCalibObject(0)->Clone();
+ //AliESDfriendTrack *friendTrack=fESDfriend->GetTrack(fESDtrack->GetID());
+
+
+ if (track->GetFriendTrack()){
+ fTrackF = (AliESDfriendTrack*)track->GetFriendTrack();
+ Int_t icalib=0;
+ TObject *cobject=0;
+ //
+ while (fTrackF->GetCalibObject(icalib)){
+ cobject=fTrackF->GetCalibObject(icalib);
+ if (dynamic_cast<AliTPCseed*>(cobject)){
+ if (fTPCtrack) delete fTPCtrack;
+ fTPCtrack = (AliTPCseed*)(dynamic_cast<AliTPCseed*>(cobject))->Clone();
+ } else if (dynamic_cast<AliTRDtrackV1*>(cobject)){
+ if (fTRDtrack) delete fTRDtrack;
+ fTRDtrack = (AliTRDtrackV1*)(dynamic_cast<AliTRDtrackV1*>(cobject))->Clone();
+ }
+ icalib++;
}
}
+ if (!fTPCtrack) fTPCtrack = new AliTPCseed; // add dummy track
+}
+
+
+
+void AliESDRecInfo::AddESDtrack(const AliESDtrack *track, AliMCInfo* info){
+ //
+ // Add ESDtrack
+ //
+ AliESDtrack *nctrack = (AliESDtrack*) track;
+ fMultiple++;
+ if (!fESDtrack) {
+ SetESDtrack(track);
+ Update(info,0,kTRUE);
+ return;
+ }
+ if (!fTracks) fTracks = new TClonesArray("AliESDtrack",10);
+ Int_t ntracks = fTracks->GetEntriesFast();
+ new ((*fTracks)[ntracks]) AliESDtrack(*track);
+ if (nctrack->GetKinkIndex(0)>0) return;
+ //
+ //
+ //
+ if (!nctrack->IsOn(AliESDtrack::kTPCrefit) && fStatus[1]==2) return;
+ if (!nctrack->IsOn(AliESDtrack::kITSin) && fStatus[0]>0) return;
+ if ( nctrack->GetParameter()[4]*info->GetCharge()<0) return; //returning track
+ Float_t dtheta = TMath::ATan(nctrack->GetTgl())-info->GetParticle().Theta()-TMath::Pi()-2;
+ if (TMath::Abs(dtheta)>0.1) return;
+
+ SetESDtrack(track);
+ Update(info,0,kTRUE);
}
+
+
void AliESDRecInfo::UpdatePoints(AliESDtrack*track)
{
//
fTPCPoints[1] = -1;
//
if (fTPCPoints[0]<fTPCPoints[1]) return;
- // Int_t nclusters=track->GetTPCclusters(iclusters);
+ /*Int_t nclusters=*/track->GetTPCclusters(iclusters);
Int_t ngood=0;
Int_t undeff=0;
fSign =sign;
fTPCPools[4] = sign*(1./fTPCinP0[3]-1./fTPCinP1[3])/TMath::Sqrt(TMath::Abs(cov[14]));
}
- //
- if (fESDtrack && fESDtrack->GetTPCInnerParam()){
- AliExternalTrackParam *track = new AliExternalTrackParam(*fESDtrack->GetTPCInnerParam());
- const Double_t kRadius = 3; // beam pipe radius
- const Double_t kMaxStep = 5; // max step
- const Double_t kMaxD = 123456; // max distance to prim vertex
- Double_t fieldZ = AliTracker::GetBz(); //
- AliTracker::PropagateTrackTo(track,kRadius,info->GetMass(),kMaxStep,kTRUE);
- AliTracker::PropagateTrackTo(track,0,info->GetMass(),0.5,kTRUE);
- //track->RelateToVertex(fEvent->GetVertex(),fieldZ, kMaxD);
- fTPCtrackAtVertex = track;
- }else{
- delete fTPCtrackAtVertex;
- fTPCtrackAtVertex=0;
- }
}