]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG1/AliESDRecInfo.cxx
Adding AliTPCComparisonPID class
[u/mrichter/AliRoot.git] / PWG1 / AliESDRecInfo.cxx
index 025161e36eda3a49c77ab7aa6ceefebddde2786e..71c38299799f9aa232ea40652d18a2b818f9b233 100644 (file)
@@ -41,7 +41,7 @@
 #include "AliESDtrack.h"
 #include "AliTPCseed.h"
 #include "AliITStrackMI.h"
-#include "AliTRDtrack.h"
+#include "AliTRDtrackV1.h"
 #include "AliMCInfo.h"
 #include "AliESDRecInfo.h"
 
@@ -76,7 +76,7 @@ AliESDRecInfo::AliESDRecInfo():
   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
@@ -85,17 +85,44 @@ AliESDRecInfo::AliESDRecInfo():
 
 
 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()
 
 {
@@ -103,11 +130,13 @@ 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;
+  }
 }
 
 
@@ -121,29 +150,76 @@ void AliESDRecInfo::Reset()
   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)
 {
   //
@@ -155,7 +231,7 @@ 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;
@@ -446,21 +522,6 @@ void AliESDRecInfo::UpdateTPC(AliMCInfo* info){
     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;
-  }  
 }