]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG1/AliESDRecInfo.cxx
Forgotten commit
[u/mrichter/AliRoot.git] / PWG1 / AliESDRecInfo.cxx
index fc7a044aa34542d73a99f538ebfdac8433f77d19..ddb9abcd3fd48df7980b3f9daccbdca1aaa19444 100644 (file)
@@ -75,7 +75,8 @@ AliESDRecInfo::AliESDRecInfo():
   fTrackF(0),      // friend track
   fTPCtrack(0),        // tpc track
   fITStrack(0),        // its track
-  fTRDtrack(0)        // trd track  
+  fTRDtrack(0),        // trd track  
+  fTracks(0)           // array of tracks with the same label
 {
   //
   //  default constructor
@@ -98,13 +99,15 @@ AliESDRecInfo::AliESDRecInfo(const AliESDRecInfo& recinfo):
   fTrackF(0),      // friend track
   fTPCtrack(0),        // tpc track
   fITStrack(0),        // its track
-  fTRDtrack(0)        // trd 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());
 }
 
@@ -127,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;
+  }
 }
 
 
@@ -145,39 +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();
+  //AliESDfriendTrack *friendTrack=fESDfriend->GetTrack(fESDtrack->GetID());
+
+
   if (track->GetFriendTrack()){
-    if (fTrackF) delete fTrackF;
-    fTrackF = (AliESDfriendTrack*)track->GetFriendTrack()->Clone();
+    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();
+       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();
+       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)
 {
   //