]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG1/AliESDRecInfo.cxx
bugfix: external interface was calling AliHLTComponent::Init twice since r27483
[u/mrichter/AliRoot.git] / PWG1 / AliESDRecInfo.cxx
index a7894b57d11fed2c3e55860b1a08a35a0964c7ef..fc7a044aa34542d73a99f538ebfdac8433f77d19 100644 (file)
@@ -17,7 +17,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 //                                                                           //
 //  Time Projection Chamber                                                  //
-//  Comparison macro for reconstructed tracks - ESDs V0s                                     //
+//  Comparison macro for reconstructed tracks                                  //
 //  responsible: 
 //  marian.ivanov@cern.ch                                                    //
 //
 
 
 
-#include <stdio.h>
-#include <string.h>
 //ROOT includes
 #include "Rtypes.h"
 //
 //ALIROOT includes
 //
 #include "AliESDtrack.h"
+#include "AliTracker.h"
 #include "AliTPCParam.h"
 #include "AliTrackReference.h"
 #include "AliTPCParamSR.h"
-#include "AliESD.h"
 #include "AliESDfriend.h"
 #include "AliESDtrack.h"
 #include "AliTPCseed.h"
 #include "AliITStrackMI.h"
-#include "AliTRDtrack.h"
-#include "AliHelix.h"
-#include "AliESDVertex.h"
-#include "AliExternalTrackParam.h"
-#include "AliESDkink.h"
-#include "AliESDv0.h"
-#include "AliV0.h"
-//
-#include "AliTreeDraw.h"
+#include "AliTRDtrackV1.h"
 #include "AliMCInfo.h"
-#include "AliGenV0Info.h"
-#include "AliGenKinkInfo.h"
 #include "AliESDRecInfo.h"
 
 
@@ -96,7 +84,21 @@ 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  
 {
   //
   //
@@ -107,6 +109,17 @@ AliESDRecInfo::AliESDRecInfo(const AliESDRecInfo& recinfo):
 }
 
 
+AliESDRecInfo& AliESDRecInfo::operator=(const AliESDRecInfo& info) { 
+  //
+  // Assignment operator
+  //
+  this->~AliESDRecInfo();
+  new (this) AliESDRecInfo(info);
+  return *this;
+}
+
+
+
 AliESDRecInfo::~AliESDRecInfo()
 
 {
@@ -144,12 +157,22 @@ void AliESDRecInfo::SetESDtrack(const AliESDtrack *track){
   //
   if (fESDtrack) delete fESDtrack;
   fESDtrack = (AliESDtrack*)track->Clone();
-  if (0 &&track->GetFriendTrack()){
+  if (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();
+    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++;
     }
   }
   
@@ -237,51 +260,20 @@ void  AliESDRecInfo::UpdatePoints(AliESDtrack*track)
 //
 void AliESDRecInfo::Update(AliMCInfo* info,AliTPCParam * /*par*/, Bool_t reconstructed)
 {
-  //
   //
   //calculates derived variables
   //  
-  //
   UpdatePoints(fESDtrack);
-  fBestTOFmatch=1000;
-  AliTrackReference * ref = &(info->fTrackRef);
-  fTPCinR0[0] = info->fTrackRef.X();   
-  fTPCinR0[1] = info->fTrackRef.Y();   
-  fTPCinR0[2] = info->fTrackRef.Z();
-  fTPCinR0[3] = TMath::Sqrt(fTPCinR0[0]*fTPCinR0[0]+fTPCinR0[1]*fTPCinR0[1]);
-  fTPCinR0[4] = TMath::ATan2(fTPCinR0[1],fTPCinR0[0]);
-  //
-  fTPCinP0[0] = ref->Px();
-  fTPCinP0[1] = ref->Py();
-  fTPCinP0[2] = ref->Pz();
-  fTPCinP0[3] = ref->Pt();
-  fTPCinP0[4] = ref->P();
-  fDeltaP     = (ref->P()-info->fParticle.P())/info->fParticle.P();
-  //
-  //
-  if (fTPCinP0[3]>0.0000001){
-    //
-    fTPCAngle0[0] = TMath::ATan2(fTPCinP0[1],fTPCinP0[0]);
-    fTPCAngle0[1] = TMath::ATan(fTPCinP0[2]/fTPCinP0[3]);
-  }
-  //
-  //
-  fITSinP0[0]=info->fParticle.Px();
-  fITSinP0[1]=info->fParticle.Py();
-  fITSinP0[2]=info->fParticle.Pz();
-  fITSinP0[3]=info->fParticle.Pt();    
-  //
-  fITSinR0[0]=info->fParticle.Vx();
-  fITSinR0[1]=info->fParticle.Vy();
-  fITSinR0[2]=info->fParticle.Vz();
-  fITSinR0[3] = TMath::Sqrt(fITSinR0[0]*fITSinR0[0]+fITSinR0[1]*fITSinR0[1]);
-  fITSinR0[4] = TMath::ATan2(fITSinR0[1],fITSinR0[0]);
-  //
+  UpdateStatus(info,reconstructed);
+  UpdateITS(info);
+  UpdateTPC(info);
+  UpdateTOF(info);
+}
+
+
+void  AliESDRecInfo::UpdateStatus(AliMCInfo* info, Bool_t reconstructed){
   //
-  if (fITSinP0[3]>0.0000001){
-    fITSAngle0[0] = TMath::ATan2(fITSinP0[1],fITSinP0[0]);
-    fITSAngle0[1] = TMath::ATan(fITSinP0[2]/fITSinP0[3]);
-  }
+  // Interpret bit mask flags
   //
   for (Int_t i=0;i<4;i++) fStatus[i] =0;
   fReconstructed = kFALSE;
@@ -322,7 +314,6 @@ void AliESDRecInfo::Update(AliMCInfo* info,AliTPCParam * /*par*/, Bool_t reconst
       fStatus[0]=0;
     }      
   }
-
   //
   //
   if ((fESDtrack->GetStatus()&AliESDtrack::kTRDrefit)>0){
@@ -335,11 +326,14 @@ void AliESDRecInfo::Update(AliMCInfo* info,AliTPCParam * /*par*/, Bool_t reconst
   }
   if ((fESDtrack->GetStatus()&AliESDtrack::kTRDStop)>0){
     fStatus[2] =10;
-  }
+  }   
+}
 
+void AliESDRecInfo::UpdateTOF(AliMCInfo* info){
   //
-  //TOF 
-  // 
+  // Update TOF related comparison information
+  //
+  fBestTOFmatch=1000;
   if (((fESDtrack->GetStatus()&AliESDtrack::kTOFout)>0)){
     //
     // best tof match
@@ -365,39 +359,29 @@ void AliESDRecInfo::Update(AliMCInfo* info,AliTPCParam * /*par*/, Bool_t reconst
   }else{
     fStatus[3]=0;
   }
+}
 
 
-  if (fStatus[1]>0 &&info->fNTPCRef>0&&TMath::Abs(fTPCinP0[3])>0.0001){
-    //TPC
-    fESDtrack->GetInnerXYZ(fTPCinR1);
-    fTPCinR1[3] = TMath::Sqrt(fTPCinR1[0]*fTPCinR1[0]+fTPCinR1[1]*fTPCinR1[1]);
-    fTPCinR1[4] = TMath::ATan2(fTPCinR1[1],fTPCinR1[0]);       
-    fESDtrack->GetInnerPxPyPz(fTPCinP1);
-    fTPCinP1[3] = TMath::Sqrt(fTPCinP1[0]*fTPCinP1[0]+fTPCinP1[1]*fTPCinP1[1]);
-    fTPCinP1[4] = TMath::Sqrt(fTPCinP1[3]*fTPCinP1[3]+fTPCinP1[2]*fTPCinP1[2]);
-    //
-    //
-    if (fTPCinP1[3]>0.000000000000001){
-      fTPCAngle1[0] = TMath::ATan2(fTPCinP1[1],fTPCinP1[0]);
-      fTPCAngle1[1] = TMath::ATan(fTPCinP1[2]/fTPCinP1[3]);  
-    }    
-    Double_t cov[15], param[5],x, alpha;
-    fESDtrack->GetInnerExternalCovariance(cov);
-    fESDtrack->GetInnerExternalParameters(alpha, x,param);
-    if (x<50) return ;
-    //
-    fTPCDelta[0] = (fTPCinR0[4]-fTPCinR1[4])*fTPCinR1[3];  //delta rfi
-    fTPCPools[0] = fTPCDelta[0]/TMath::Sqrt(cov[0]);
-    fTPCDelta[1] = (fTPCinR0[2]-fTPCinR1[2]);              //delta z
-    fTPCPools[1] = fTPCDelta[1]/TMath::Sqrt(cov[2]);
-    fTPCDelta[2] = (fTPCAngle0[0]-fTPCAngle1[0]);
-    fTPCPools[2] = fTPCDelta[2]/TMath::Sqrt(cov[5]);
-    fTPCDelta[3] = (TMath::Tan(fTPCAngle0[1])-TMath::Tan(fTPCAngle1[1]));
-    fTPCPools[3] = fTPCDelta[3]/TMath::Sqrt(cov[9]);
-    fTPCDelta[4] = (fTPCinP0[3]-fTPCinP1[3]);
-    Double_t sign = (param[4]>0)? 1.:-1; 
-    fSign =sign;
-    fTPCPools[4] = sign*(1./fTPCinP0[3]-1./fTPCinP1[3])/TMath::Sqrt(TMath::Abs(cov[14]));
+
+void AliESDRecInfo::UpdateITS(AliMCInfo* info){
+  //
+  // Update ITS related comparison information
+  //
+  fITSinP0[0]=info->fParticle.Px();
+  fITSinP0[1]=info->fParticle.Py();
+  fITSinP0[2]=info->fParticle.Pz();
+  fITSinP0[3]=info->fParticle.Pt();    
+  //
+  fITSinR0[0]=info->fParticle.Vx();
+  fITSinR0[1]=info->fParticle.Vy();
+  fITSinR0[2]=info->fParticle.Vz();
+  fITSinR0[3] = TMath::Sqrt(fITSinR0[0]*fITSinR0[0]+fITSinR0[1]*fITSinR0[1]);
+  fITSinR0[4] = TMath::ATan2(fITSinR0[1],fITSinR0[0]);
+  //
+  //
+  if (fITSinP0[3]>0.0000001){
+    fITSAngle0[0] = TMath::ATan2(fITSinP0[1],fITSinP0[0]);
+    fITSAngle0[1] = TMath::ATan(fITSinP0[2]/fITSinP0[3]);
   }
   if (fITSOn){
     // ITS 
@@ -408,7 +392,7 @@ void AliESDRecInfo::Update(AliMCInfo* info,AliTPCParam * /*par*/, Bool_t reconst
     fESDtrack->GetExternalCovariance(cov);
     //fESDtrack->GetConstrainedExternalCovariance(cov);
     if (TMath::Abs(param[4])<0.0000000001) return;
-
+    
     fESDtrack->GetXYZ(fITSinR1);
     fESDtrack->GetPxPyPz(fITSinP1);
     fITSinP1[3] = TMath::Sqrt(fITSinP1[0]*fITSinP1[0]+fITSinP1[1]*fITSinP1[1]);
@@ -434,9 +418,71 @@ void AliESDRecInfo::Update(AliMCInfo* info,AliTPCParam * /*par*/, Bool_t reconst
     fITSDelta[4] = (fITSinP0[3]-fITSinP1[3]);    
     Double_t sign = (param[4]>0) ? 1:-1; 
     fSign = sign;
-    fITSPools[4] = sign*(1./fITSinP0[3]-1./fITSinP1[3])/TMath::Sqrt(cov[14]);    
+    fITSPools[4] = sign*(1./fITSinP0[3]-1./fITSinP1[3])/TMath::Sqrt(cov[14]);
+  }
+}
+
+void AliESDRecInfo::UpdateTPC(AliMCInfo* info){
+  //
+  //
+  // Update TPC related information
+  //
+  AliTrackReference * ref = &(info->fTrackRef);
+  fTPCinR0[0] = info->fTrackRef.X();   
+  fTPCinR0[1] = info->fTrackRef.Y();   
+  fTPCinR0[2] = info->fTrackRef.Z();
+  fTPCinR0[3] = TMath::Sqrt(fTPCinR0[0]*fTPCinR0[0]+fTPCinR0[1]*fTPCinR0[1]);
+  fTPCinR0[4] = TMath::ATan2(fTPCinR0[1],fTPCinR0[0]);
+  //
+  fTPCinP0[0] = ref->Px();
+  fTPCinP0[1] = ref->Py();
+  fTPCinP0[2] = ref->Pz();
+  fTPCinP0[3] = ref->Pt();
+  fTPCinP0[4] = ref->P();
+  fDeltaP     = (ref->P()-info->fParticle.P())/info->fParticle.P();
+  //
+  //
+  if (fTPCinP0[3]>0.0000001){
+    //
+    fTPCAngle0[0] = TMath::ATan2(fTPCinP0[1],fTPCinP0[0]);
+    fTPCAngle0[1] = TMath::ATan(fTPCinP0[2]/fTPCinP0[3]);
+  }
+  //
+  if (fStatus[1]>0 &&info->fNTPCRef>0&&TMath::Abs(fTPCinP0[3])>0.0001){
+    //TPC
+    fESDtrack->GetInnerXYZ(fTPCinR1);
+    fTPCinR1[3] = TMath::Sqrt(fTPCinR1[0]*fTPCinR1[0]+fTPCinR1[1]*fTPCinR1[1]);
+    fTPCinR1[4] = TMath::ATan2(fTPCinR1[1],fTPCinR1[0]);       
+    fESDtrack->GetInnerPxPyPz(fTPCinP1);
+    fTPCinP1[3] = TMath::Sqrt(fTPCinP1[0]*fTPCinP1[0]+fTPCinP1[1]*fTPCinP1[1]);
+    fTPCinP1[4] = TMath::Sqrt(fTPCinP1[3]*fTPCinP1[3]+fTPCinP1[2]*fTPCinP1[2]);
+    //
+    //
+    if (fTPCinP1[3]>0.000000000000001){
+      fTPCAngle1[0] = TMath::ATan2(fTPCinP1[1],fTPCinP1[0]);
+      fTPCAngle1[1] = TMath::ATan(fTPCinP1[2]/fTPCinP1[3]);  
+    }    
+    Double_t cov[15], param[5],x, alpha;
+    fESDtrack->GetInnerExternalCovariance(cov);
+    fESDtrack->GetInnerExternalParameters(alpha, x,param);
+    if (x<50) return ;
+    //
+    fTPCDelta[0] = (fTPCinR0[4]-fTPCinR1[4])*fTPCinR1[3];  //delta rfi
+    fTPCPools[0] = fTPCDelta[0]/TMath::Sqrt(cov[0]);
+    fTPCDelta[1] = (fTPCinR0[2]-fTPCinR1[2]);              //delta z
+    fTPCPools[1] = fTPCDelta[1]/TMath::Sqrt(cov[2]);
+    fTPCDelta[2] = (fTPCAngle0[0]-fTPCAngle1[0]);
+    fTPCPools[2] = fTPCDelta[2]/TMath::Sqrt(cov[5]);
+    fTPCDelta[3] = (TMath::Tan(fTPCAngle0[1])-TMath::Tan(fTPCAngle1[1]));
+    fTPCPools[3] = fTPCDelta[3]/TMath::Sqrt(cov[9]);
+    fTPCDelta[4] = (fTPCinP0[3]-fTPCinP1[3]);
+    Double_t sign = (param[4]>0)? 1.:-1; 
+    fSign =sign;
+    fTPCPools[4] = sign*(1./fTPCinP0[3]-1./fTPCinP1[3])/TMath::Sqrt(TMath::Abs(cov[14]));
   }
-  
 }
 
 
+
+
+