]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITStrackSA.cxx
Inverted logics (Panos)
[u/mrichter/AliRoot.git] / ITS / AliITStrackSA.cxx
index 81d344566c4a34e21c4cefff1c7ad2141040cfe9..6dfa34c59ad6b34f7150e75926244fb8aac094f3 100755 (executable)
 //  of cluster equal to fgkMaxNumberOfClusters    //
 ////////////////////////////////////////////////////
 
-#include "AliITSgeom.h"
+#include "AliITSgeomTGeo.h"
 #include "AliITStrackSA.h"
 
 
 ClassImp(AliITStrackSA)
 
 //_____________________________________
-AliITStrackSA:: AliITStrackSA() : AliITStrackMI(){
+AliITStrackSA:: AliITStrackSA() : AliITStrackMI(),
+fNSA(0)
+{
 // Default constructor  
   SetNumberOfClusters(0);
   SetNumberOfClustersSA(0);
   ResetIndexSA();
-  for(Int_t nlay=0;nlay<fgkLayers;nlay++){ 
+  for(Int_t nlay=0;nlay<AliITSgeomTGeo::GetNLayers();nlay++){ 
     SetNumberOfMarked(nlay,0);
   }
   ResetMarked();
@@ -44,11 +46,12 @@ AliITStrackSA:: AliITStrackSA() : AliITStrackMI(){
 
 //___________________________________________________
 AliITStrackSA::AliITStrackSA(const AliITStrackMI& t) : 
-AliITStrackMI(t){
+AliITStrackMI(t),
+fNSA(0){
 // Copy a V2 track into a SA track
   SetNumberOfClustersSA(0);
   ResetIndexSA();
-  for(Int_t nlay=0;nlay<fgkLayers;nlay++){ 
+  for(Int_t nlay=0;nlay<AliITSgeomTGeo::GetNLayers();nlay++){ 
     SetNumberOfMarked(nlay,0);
   }
   ResetMarked();
@@ -56,7 +59,8 @@ AliITStrackMI(t){
 }
 //___________________________________________________
 AliITStrackSA::AliITStrackSA(const AliITStrackSA& t) : 
-AliITStrackMI(t){
+AliITStrackMI(t),
+fNSA(t.fNSA){
 // Copy constructor
 
 
@@ -64,46 +68,38 @@ AliITStrackMI(t){
   ResetMarked();
   Int_t number = t.GetNumberOfClustersSA();
   SetNumberOfClustersSA(number);
-  for(Int_t nlay=0;nlay<fgkLayers;nlay++){
+  for(Int_t nlay=0;nlay<AliITSgeomTGeo::GetNLayers();nlay++){
     SetNumberOfMarked(nlay,t.GetNumberOfMarked(nlay));
   }
   for(Int_t i=0;i<number;i++){
     fSain[i]=t.fSain[i];
   }
-  for(Int_t nlay=0;nlay<fgkLayers;nlay++){
+  for(Int_t nlay=0;nlay<AliITSgeomTGeo::GetNLayers();nlay++){
     for(Int_t i=0;i<t.GetNumberOfMarked(nlay);i++){
       fCluMark[nlay][i]=t.fCluMark[nlay][i];
     }
   }
 }
 //____________________________________________________
-AliITStrackSA::AliITStrackSA(AliITSgeom* geom,Int_t layer, Int_t ladder, Int_t detector, Double_t Ycoor, Double_t Zcoor, Double_t phi, Double_t tanlambda, Double_t curv, Int_t lab ) {
+AliITStrackSA::AliITStrackSA(Int_t layer, Int_t ladder, Int_t detector, Double_t Ycoor, Double_t Zcoor, Double_t phi, Double_t tanlambda, Double_t curv, Int_t lab ):
+fNSA(0) 
+{
   // standard constructor. Used for ITS standalone tracking
 
-  if(!geom){
-    Fatal("AliITStrackSA","ITS geometry not found - Abort\n");
-    return;
-  }
   // get the azimuthal angle of the detector containing the innermost
   // cluster of this track (data member fAlpha)
-  Float_t rotmatr[9];
-  geom->GetRotMatrix(layer,ladder,detector,rotmatr);
-  Double_t sAlpha=TMath::ATan2(rotmatr[1],rotmatr[0])+TMath::Pi();
-  sAlpha+=TMath::Pi()/2.;
-  if(layer==1) sAlpha+=TMath::Pi();
-
 
-  // get the radius of this detector. Procedure taken from the 
-  // AliITStrackerV2 constructor
-  Float_t x=0,y=0,z=0;
-  geom->GetTrans(layer,ladder,detector,x,y,z);
+  TGeoHMatrix m; AliITSgeomTGeo::GetOrigMatrix(layer,ladder,detector,m);
+  const TGeoHMatrix *tm=AliITSgeomTGeo::GetTracking2LocalMatrix(layer,ladder,detector);
+  m.Multiply(tm);
+  Double_t txyz[3]={0.}, xyz[3]={0.};
+  m.LocalToMaster(txyz,xyz);
+  Double_t sAlpha=TMath::ATan2(xyz[1],xyz[0]);
 
-  Double_t fi=TMath::ATan2(rotmatr[1],rotmatr[0])+TMath::Pi();
-  fi+=TMath::Pi()/2;
-  if (layer==1) fi+=TMath::Pi();
-  Double_t cp=TMath::Cos(fi), sp=TMath::Sin(fi);
-  Double_t sX=x*cp+y*sp;
+  if (sAlpha<0) sAlpha+=TMath::TwoPi();
+  else if (sAlpha>=TMath::TwoPi()) sAlpha-=TMath::TwoPi();
 
+  Double_t sX=TMath::Sqrt(xyz[0]*xyz[0] + xyz[1]*xyz[1]);
 
   fdEdx = 0;
 
@@ -130,15 +126,23 @@ AliITStrackSA::AliITStrackSA(AliITSgeom* geom,Int_t layer, Int_t ladder, Int_t d
                   tanlambda,
                   curv/conv};
 
+
+  // dealing with the case B=0 (taken from AliTPCtrack.cxx)
+  Double_t mostProbablePt=AliExternalTrackParam::GetMostProbablePt();
+  Double_t p0=TMath::Sign(1/mostProbablePt,sP[4]);
+  Double_t w0=sC[14]/(sC[14] + p0*p0), w1=p0*p0/(sC[14] + p0*p0);
+  sP[4] = w0*p0 + w1*sP[4];
+  sC[14]*=w1;
+                                                                              
   Set(sX,sAlpha,sP,sC);
 
-  for(Int_t i=0; i<kMaxLayer; i++) fIndex[i] = 0;  // to be set explicitely
+  for(Int_t i=0; i<AliITSgeomTGeo::GetNLayers(); i++) fIndex[i] = 0;  // to be set explicitely
 
   for(Int_t i=0; i<4; i++) fdEdxSample[i] = 0; 
 
   SetNumberOfClusters(0);
   SetNumberOfClustersSA(0);
-  for(Int_t nlay=0;nlay<fgkLayers;nlay++) SetNumberOfMarked(nlay,0);
+  for(Int_t nlay=0;nlay<AliITSgeomTGeo::GetNLayers();nlay++) SetNumberOfMarked(nlay,0);
   ResetIndexSA();
   ResetMarked();
   SetChi2(0);
@@ -180,7 +184,7 @@ void AliITStrackSA::AddClusterMark(Int_t layer, Int_t clnumb) {
 void AliITStrackSA::AddClusterV2(Int_t layer,Int_t clnumb) {
   // add one clusters to the list (maximum number=6)
   Int_t presnum = GetNumberOfClusters();
-  if(presnum>=kMaxLayer){
+  if(presnum>=AliITSgeomTGeo::GetNLayers()){
     Warning("AddClusterV2","Maximum number of clusters already reached. Nothing is done\n");
     return;
    }    
@@ -194,21 +198,8 @@ void AliITStrackSA::AddClusterV2(Int_t layer,Int_t clnumb) {
 void AliITStrackSA::ResetMarked(){
 
   //Reset array of marked clusters
-  for(Int_t nlay=0;nlay<fgkLayers;nlay++){
+  for(Int_t nlay=0;nlay<AliITSgeomTGeo::GetNLayers();nlay++){
     for(Int_t k=0; k<fgkMaxNumberOfClustersL; k++) fCluMark[nlay][k]=0;
   }
 }
 
-
-
-
-
-
-
-
-
-
-
-
-
-