]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITStrackMI.cxx
Fix funny signs in combo boxes
[u/mrichter/AliRoot.git] / ITS / AliITStrackMI.cxx
index 7a0161d085cbc6f5736d866604b8f81df00aa62c..fd8b720fcb9b86c3314ae7f883c0bf80fd574011 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <TMath.h>
 
+#include "AliITSRecoParam.h"
 #include "AliCluster.h"
 #include "AliESDtrack.h"
 #include "AliITSgeomTGeo.h"
@@ -39,45 +40,45 @@ const Int_t kWARN=5;
 AliITStrackMI::AliITStrackMI():AliITStrackV2(),
 fNUsed(0),
 fNSkipped(0),
-fNDeadZone(0),
-fDeadZoneProbability(0),                              
+fNDeadZone(0),                        
 fReconstructed(kFALSE),
 fExpQ(40),
 fChi22(0),
 fdEdxMismatch(0),
 fConstrain(kFALSE),
+fWinner(0),
 fGoldV0(kFALSE)
+
 {
   //constructor
     for(Int_t i=0; i<AliITSgeomTGeo::GetNLayers(); i++) fClIndex[i]=-1;
-    for(Int_t i=0; i<6; i++) { fNy[i]=0; fNz[i]=0; fNormQ[i]=0; fNormChi2[i]=1000;}
-    for(Int_t i=0; i<12; i++) {fDy[i]=0; fDz[i]=0; fSigmaY[i]=0; fSigmaZ[i]=0; fChi2MIP[i]=0;}
+    for(Int_t i=0; i<6; i++) { fNy[i]=0; fNz[i]=0; fNormQ[i]=0; fNormChi2[i]=1000; fDeadZoneProbability[i]=0;}
+    for(Int_t i=0; i<12; i++) {fDy[i]=0; fDz[i]=0; fSigmaY[i]=0; fSigmaZ[i]=0; fSigmaYZ[i]=0; fChi2MIP[i]=0;}
     fD[0]=0; fD[1]=0;
     fDnorm[0]=0; fDnorm[1]=0;
 }
 
 //____________________________________________________________________________
-AliITStrackMI::AliITStrackMI(AliESDtrack& t,Bool_t c) throw (const Char_t *) :
+AliITStrackMI::AliITStrackMI(AliESDtrack& t,Bool_t c):
 AliITStrackV2(t,c),
 fNUsed(0),
 fNSkipped(0),
 fNDeadZone(0),
-fDeadZoneProbability(0),                              
 fReconstructed(kFALSE),
 fExpQ(40),
 fChi22(0),
 fdEdxMismatch(0),
 fConstrain(kFALSE),
+fWinner(0),
 fGoldV0(kFALSE) {
   //------------------------------------------------------------------
   // Conversion ESD track -> ITS track.
   // If c==kTRUE, create the ITS track out of the constrained params.
   //------------------------------------------------------------------
-  for(Int_t i=0; i<6; i++) {fClIndex[i]=-1; fNy[i]=0; fNz[i]=0; fNormQ[i]=0; fNormChi2[i]=1000;}
-  for(Int_t i=0; i<12; i++) {fDy[i]=0; fDz[i]=0; fSigmaY[i]=0; fSigmaZ[i]=0;fChi2MIP[i]=0;}
+  for(Int_t i=0; i<6; i++) {fClIndex[i]=-1; fNy[i]=0; fNz[i]=0; fNormQ[i]=0; fNormChi2[i]=1000; fDeadZoneProbability[i]=0;}
+  for(Int_t i=0; i<12; i++) {fDy[i]=0; fDz[i]=0; fSigmaY[i]=0; fSigmaZ[i]=0; fSigmaYZ[i]=0; fChi2MIP[i]=0;}
   fD[0]=0; fD[1]=0;
   fDnorm[0]=0; fDnorm[1]=0;
-  //if (!Invariant()) throw "AliITStrackV2: conversion failed !\n";
 
 }
 
@@ -86,12 +87,12 @@ AliITStrackMI::AliITStrackMI(const AliITStrackMI& t) : AliITStrackV2(t),
 fNUsed(t.fNUsed),
 fNSkipped(t.fNSkipped),
 fNDeadZone(t.fNDeadZone),
-fDeadZoneProbability(t.fDeadZoneProbability),                         
 fReconstructed(t.fReconstructed),
 fExpQ(t.fExpQ),
 fChi22(t.fChi22),
 fdEdxMismatch(t.fdEdxMismatch),
 fConstrain(t.fConstrain),
+fWinner(0),
 fGoldV0(t.fGoldV0) {
   //------------------------------------------------------------------
   //Copy constructor
@@ -102,10 +103,10 @@ fGoldV0(t.fGoldV0) {
   fD[0]=t.fD[0]; fD[1]=t.fD[1];
   fDnorm[0] = t.fDnorm[0]; fDnorm[1]=t.fDnorm[1];
   for(Int_t i=0; i<6; i++) {
-    fClIndex[i]= t.fClIndex[i]; fNy[i]=t.fNy[i]; fNz[i]=t.fNz[i]; fNormQ[i]=t.fNormQ[i]; fNormChi2[i] = t.fNormChi2[i];
+    fClIndex[i]= t.fClIndex[i]; fNy[i]=t.fNy[i]; fNz[i]=t.fNz[i]; fNormQ[i]=t.fNormQ[i]; fNormChi2[i] = t.fNormChi2[i];  fDeadZoneProbability[i]=t.fDeadZoneProbability[i];
   }
   for(Int_t i=0; i<12; i++) {fDy[i]=t.fDy[i]; fDz[i]=t.fDz[i]; 
-    fSigmaY[i]=t.fSigmaY[i]; fSigmaZ[i]=t.fSigmaZ[i];fChi2MIP[i]=t.fChi2MIP[i];}
+    fSigmaY[i]=t.fSigmaY[i]; fSigmaZ[i]=t.fSigmaZ[i]; fSigmaYZ[i]=t.fSigmaYZ[i]; fChi2MIP[i]=t.fChi2MIP[i];}
   //memcpy(fDy,t.fDy,6*sizeof(Float_t));
   //memcpy(fDz,t.fDz,6*sizeof(Float_t));
   //memcpy(fSigmaY,t.fSigmaY,6*sizeof(Float_t));
@@ -129,13 +130,13 @@ Int_t AliITStrackMI::Compare(const TObject *o) const {
 }
 
 
-Double_t AliITStrackMI::GetPredictedChi2MI(Double_t cy, Double_t cz, Double_t cerry, Double_t cerrz) const
+Double_t AliITStrackMI::GetPredictedChi2MI(Double_t cy, Double_t cz, Double_t cerry, Double_t cerrz, Double_t covyz) const
 {
   //-----------------------------------------------------------------
   // This function calculates a predicted chi2 increment.
   //-----------------------------------------------------------------
   Double_t p[2]={cy, cz};
-  Double_t cov[3]={cerry*cerry, 0., cerrz*cerrz};
+  Double_t cov[3]={cerry*cerry, covyz, cerrz*cerrz};
   return AliExternalTrackParam::GetPredictedChi2(p,cov);
 }
 
@@ -150,6 +151,8 @@ Bool_t AliITStrackMI::UpdateMI(const AliCluster *c, Double_t chi2, Int_t index)
   fDz[layer] = dz;
   fSigmaY[layer] = TMath::Sqrt(c->GetSigmaY2()+GetSigmaY2());
   fSigmaZ[layer] = TMath::Sqrt(c->GetSigmaZ2()+GetSigmaZ2());
+  fSigmaYZ[layer] = c->GetSigmaYZ()+GetSigmaZY();
+
 
   return Update(c,chi2,index);
 }
@@ -160,7 +163,7 @@ Int_t AliITStrackMI::GetProlongationFast(Double_t alp, Double_t xk,Double_t &y,
   //get fast prolongation 
   //-----------------------------------------------------------------------------
   Double_t ca=TMath::Cos(alp-GetAlpha()), sa=TMath::Sin(alp-GetAlpha());
-  Double_t cf=TMath::Sqrt(1.- GetSnp()*GetSnp());  
+  Double_t cf=TMath::Sqrt((1.-GetSnp())*(1.+GetSnp()));  
   // **** rotation **********************  
   y= -GetX()*sa + GetY()*ca;
   // **** translation ******************  
@@ -169,7 +172,7 @@ Int_t AliITStrackMI::GetProlongationFast(Double_t alp, Double_t xk,Double_t &y,
   if (TMath::Abs(f2) >= 0.9999) {
     return 0;
   }
-  Double_t r1=TMath::Sqrt(1.- f1*f1), r2=TMath::Sqrt(1.- f2*f2);  
+  Double_t r1=TMath::Sqrt((1.-f1)*(1.+f1)), r2=TMath::Sqrt((1.-f2)*(1.+f2));  
   y += dx*(f1+f2)/(r1+r2);
   z  = GetZ()+dx*(f1+f2)/(f1*r2 + f2*r1)*GetTgl();  
   return 1;
@@ -185,6 +188,7 @@ Bool_t AliITStrackMI::IsGoldPrimary()
   if (!fConstrain) return kFALSE;                // 
   if (fNDeadZone+fNDeadZone<5.5) isGold =  kFALSE; // short track
   //
+  if (fChi2MIP[0]*fChi2MIP[3]>2) isGold = kFALSE; // RS: cut on chi2*interpolated_chi2
   if (fChi2/Float_t(fN)>2.){
     if (fChi2MIP[0]+fNUsed>3.5) isGold = kFALSE;    
   }