ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2003, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

////////////////////////////////////////////////////
//  Stand alone track class                       //
//  Origin:  Elisabetta Crescio                   //
//  e-mail:  crescio@to.infn.it                   //
//  it is a V2 track with a possible number       //
//  of cluster equal to kMaxNumberOfClusters    //
////////////////////////////////////////////////////

#include "AliITSgeomTGeo.h"
#include "AliITStrackSA.h"


ClassImp(AliITStrackSA)

//_____________________________________
AliITStrackSA:: AliITStrackSA() : AliITStrackMI(),
fNSA(0)
{
// Default constructor  
  SetNumberOfClusters(0);
  SetNumberOfClustersSA(0);
  ResetIndexSA();
  for(Int_t nlay=0;nlay<AliITSgeomTGeo::GetNLayers();nlay++){ 
    SetNumberOfMarked(nlay,0);
  }
  ResetMarked();
}


//___________________________________________________
AliITStrackSA::AliITStrackSA(const AliITStrackMI& t) : 
AliITStrackMI(t),
fNSA(0){
// Copy a V2 track into a SA track
  SetNumberOfClustersSA(0);
  ResetIndexSA();
  for(Int_t nlay=0;nlay<AliITSgeomTGeo::GetNLayers();nlay++){ 
    SetNumberOfMarked(nlay,0);
  }
  ResetMarked();

}
//___________________________________________________
AliITStrackSA::AliITStrackSA(const AliITStrackSA& t) : 
AliITStrackMI(t),
fNSA(t.fNSA){
// Copy constructor


  ResetIndexSA();
  ResetMarked();
  Int_t number = t.GetNumberOfClustersSA();
  SetNumberOfClustersSA(number);
  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<AliITSgeomTGeo::GetNLayers();nlay++){
    for(Int_t i=0;i<t.GetNumberOfMarked(nlay);i++){
      fCluMark[nlay][i]=t.fCluMark[nlay][i];
    }
  }
}
//____________________________________________________
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

  // get the azimuthal angle of the detector containing the innermost
  // cluster of this track (data member fAlpha)

  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]);

  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]);

  Init(sAlpha,sX,Ycoor,Zcoor,phi,tanlambda,curv,lab);

}
//____________________________________________________
AliITStrackSA::AliITStrackSA(Double_t alpha, Double_t radius, 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

  // get the azimuthal angle of the detector containing the innermost
  // cluster of this track (data member fAlpha)

  if (alpha<0) alpha+=TMath::TwoPi();
  else if (alpha>=TMath::TwoPi()) alpha-=TMath::TwoPi();
  Init(alpha,radius,Ycoor,Zcoor,phi,tanlambda,curv,lab);
}
//____________________________________________________
  void AliITStrackSA::Init(Double_t alpha, Double_t radius, Double_t Ycoor, Double_t Zcoor, Double_t phi, Double_t tanlambda, Double_t curv, Int_t lab ){
    // initialize parameters

  fdEdx = 0;

  Double_t conv=GetBz()*kB2C;
  Double_t sC[] = {0.000009, // 0.000009
                   0.,
                   0.000003, //0.000030
                   0.,
	           0.,
	           0.000001, //0.000001
	           0.,
	           0.,
	           0.,
	           0.000002, //0.000002
	           0.,
	           0.,
	           0.,
	           0.,
		   0.000001/(conv*conv)}; //0.0000001

  Double_t sP[] = {Ycoor,
		   Zcoor,
                   TMath::Sin(phi-alpha),
		   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(radius,alpha,sP,sC);

  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<AliITSgeomTGeo::GetNLayers();nlay++) SetNumberOfMarked(nlay,0);
  ResetIndexSA();
  ResetMarked();
  SetChi2(0);
  SetMass(0.139);    // pion mass
  SetLabel(lab); 
  
}

//____________________________________________________________
void AliITStrackSA::AddClusterSA(Int_t layer, Int_t clnumb) {
  // add one clusters to the list (maximum number=kMaxNumberOfClusters)
  Int_t presnum = GetNumberOfClustersSA();
  if(presnum>=kMaxNumberOfClusters){
    Warning("AddClusterSA","Maximum number of clusters already reached. Nothing is done\n");
    return;
  }

  fSain[presnum] = (layer<<28)+clnumb;  
  presnum++;
  SetNumberOfClustersSA(presnum);
}

//____________________________________________________________
void AliITStrackSA::AddClusterMark(Int_t layer, Int_t clnumb) {
  // add one clusters to the list (maximum number=kMaxNumberOfClusters)
  Int_t presnum = GetNumberOfMarked(layer);
  //  printf("presnum=%d\n",presnum);
  if(presnum>=kMaxNumberOfClustersL){
    Warning("AddClusterMark","Maximum number of clusters already reached. Nothing is done\n");
    return;
  }

  fCluMark[layer][presnum] = clnumb;  
  presnum++;
  SetNumberOfMarked(layer,presnum);
}

//____________________________________________________________
void AliITStrackSA::AddClusterV2(Int_t layer,Int_t clnumb) {
  // add one clusters to the list (maximum number=6)
  Int_t presnum = GetNumberOfClusters();
  if(presnum>=AliITSgeomTGeo::GetNLayers()){
    Warning("AddClusterV2","Maximum number of clusters already reached. Nothing is done\n");
    return;
   }    

  fIndex[presnum] = (layer<<28)+clnumb;  
  presnum++;
  SetNumberOfClusters(presnum);
}

//_____________________________________________________________
void AliITStrackSA::ResetMarked(){

  //Reset array of marked clusters
  for(Int_t nlay=0;nlay<AliITSgeomTGeo::GetNLayers();nlay++){
    for(Int_t k=0; k<kMaxNumberOfClustersL; k++) fCluMark[nlay][k]=0;
  }
}

 AliITStrackSA.cxx:1
 AliITStrackSA.cxx:2
 AliITStrackSA.cxx:3
 AliITStrackSA.cxx:4
 AliITStrackSA.cxx:5
 AliITStrackSA.cxx:6
 AliITStrackSA.cxx:7
 AliITStrackSA.cxx:8
 AliITStrackSA.cxx:9
 AliITStrackSA.cxx:10
 AliITStrackSA.cxx:11
 AliITStrackSA.cxx:12
 AliITStrackSA.cxx:13
 AliITStrackSA.cxx:14
 AliITStrackSA.cxx:15
 AliITStrackSA.cxx:16
 AliITStrackSA.cxx:17
 AliITStrackSA.cxx:18
 AliITStrackSA.cxx:19
 AliITStrackSA.cxx:20
 AliITStrackSA.cxx:21
 AliITStrackSA.cxx:22
 AliITStrackSA.cxx:23
 AliITStrackSA.cxx:24
 AliITStrackSA.cxx:25
 AliITStrackSA.cxx:26
 AliITStrackSA.cxx:27
 AliITStrackSA.cxx:28
 AliITStrackSA.cxx:29
 AliITStrackSA.cxx:30
 AliITStrackSA.cxx:31
 AliITStrackSA.cxx:32
 AliITStrackSA.cxx:33
 AliITStrackSA.cxx:34
 AliITStrackSA.cxx:35
 AliITStrackSA.cxx:36
 AliITStrackSA.cxx:37
 AliITStrackSA.cxx:38
 AliITStrackSA.cxx:39
 AliITStrackSA.cxx:40
 AliITStrackSA.cxx:41
 AliITStrackSA.cxx:42
 AliITStrackSA.cxx:43
 AliITStrackSA.cxx:44
 AliITStrackSA.cxx:45
 AliITStrackSA.cxx:46
 AliITStrackSA.cxx:47
 AliITStrackSA.cxx:48
 AliITStrackSA.cxx:49
 AliITStrackSA.cxx:50
 AliITStrackSA.cxx:51
 AliITStrackSA.cxx:52
 AliITStrackSA.cxx:53
 AliITStrackSA.cxx:54
 AliITStrackSA.cxx:55
 AliITStrackSA.cxx:56
 AliITStrackSA.cxx:57
 AliITStrackSA.cxx:58
 AliITStrackSA.cxx:59
 AliITStrackSA.cxx:60
 AliITStrackSA.cxx:61
 AliITStrackSA.cxx:62
 AliITStrackSA.cxx:63
 AliITStrackSA.cxx:64
 AliITStrackSA.cxx:65
 AliITStrackSA.cxx:66
 AliITStrackSA.cxx:67
 AliITStrackSA.cxx:68
 AliITStrackSA.cxx:69
 AliITStrackSA.cxx:70
 AliITStrackSA.cxx:71
 AliITStrackSA.cxx:72
 AliITStrackSA.cxx:73
 AliITStrackSA.cxx:74
 AliITStrackSA.cxx:75
 AliITStrackSA.cxx:76
 AliITStrackSA.cxx:77
 AliITStrackSA.cxx:78
 AliITStrackSA.cxx:79
 AliITStrackSA.cxx:80
 AliITStrackSA.cxx:81
 AliITStrackSA.cxx:82
 AliITStrackSA.cxx:83
 AliITStrackSA.cxx:84
 AliITStrackSA.cxx:85
 AliITStrackSA.cxx:86
 AliITStrackSA.cxx:87
 AliITStrackSA.cxx:88
 AliITStrackSA.cxx:89
 AliITStrackSA.cxx:90
 AliITStrackSA.cxx:91
 AliITStrackSA.cxx:92
 AliITStrackSA.cxx:93
 AliITStrackSA.cxx:94
 AliITStrackSA.cxx:95
 AliITStrackSA.cxx:96
 AliITStrackSA.cxx:97
 AliITStrackSA.cxx:98
 AliITStrackSA.cxx:99
 AliITStrackSA.cxx:100
 AliITStrackSA.cxx:101
 AliITStrackSA.cxx:102
 AliITStrackSA.cxx:103
 AliITStrackSA.cxx:104
 AliITStrackSA.cxx:105
 AliITStrackSA.cxx:106
 AliITStrackSA.cxx:107
 AliITStrackSA.cxx:108
 AliITStrackSA.cxx:109
 AliITStrackSA.cxx:110
 AliITStrackSA.cxx:111
 AliITStrackSA.cxx:112
 AliITStrackSA.cxx:113
 AliITStrackSA.cxx:114
 AliITStrackSA.cxx:115
 AliITStrackSA.cxx:116
 AliITStrackSA.cxx:117
 AliITStrackSA.cxx:118
 AliITStrackSA.cxx:119
 AliITStrackSA.cxx:120
 AliITStrackSA.cxx:121
 AliITStrackSA.cxx:122
 AliITStrackSA.cxx:123
 AliITStrackSA.cxx:124
 AliITStrackSA.cxx:125
 AliITStrackSA.cxx:126
 AliITStrackSA.cxx:127
 AliITStrackSA.cxx:128
 AliITStrackSA.cxx:129
 AliITStrackSA.cxx:130
 AliITStrackSA.cxx:131
 AliITStrackSA.cxx:132
 AliITStrackSA.cxx:133
 AliITStrackSA.cxx:134
 AliITStrackSA.cxx:135
 AliITStrackSA.cxx:136
 AliITStrackSA.cxx:137
 AliITStrackSA.cxx:138
 AliITStrackSA.cxx:139
 AliITStrackSA.cxx:140
 AliITStrackSA.cxx:141
 AliITStrackSA.cxx:142
 AliITStrackSA.cxx:143
 AliITStrackSA.cxx:144
 AliITStrackSA.cxx:145
 AliITStrackSA.cxx:146
 AliITStrackSA.cxx:147
 AliITStrackSA.cxx:148
 AliITStrackSA.cxx:149
 AliITStrackSA.cxx:150
 AliITStrackSA.cxx:151
 AliITStrackSA.cxx:152
 AliITStrackSA.cxx:153
 AliITStrackSA.cxx:154
 AliITStrackSA.cxx:155
 AliITStrackSA.cxx:156
 AliITStrackSA.cxx:157
 AliITStrackSA.cxx:158
 AliITStrackSA.cxx:159
 AliITStrackSA.cxx:160
 AliITStrackSA.cxx:161
 AliITStrackSA.cxx:162
 AliITStrackSA.cxx:163
 AliITStrackSA.cxx:164
 AliITStrackSA.cxx:165
 AliITStrackSA.cxx:166
 AliITStrackSA.cxx:167
 AliITStrackSA.cxx:168
 AliITStrackSA.cxx:169
 AliITStrackSA.cxx:170
 AliITStrackSA.cxx:171
 AliITStrackSA.cxx:172
 AliITStrackSA.cxx:173
 AliITStrackSA.cxx:174
 AliITStrackSA.cxx:175
 AliITStrackSA.cxx:176
 AliITStrackSA.cxx:177
 AliITStrackSA.cxx:178
 AliITStrackSA.cxx:179
 AliITStrackSA.cxx:180
 AliITStrackSA.cxx:181
 AliITStrackSA.cxx:182
 AliITStrackSA.cxx:183
 AliITStrackSA.cxx:184
 AliITStrackSA.cxx:185
 AliITStrackSA.cxx:186
 AliITStrackSA.cxx:187
 AliITStrackSA.cxx:188
 AliITStrackSA.cxx:189
 AliITStrackSA.cxx:190
 AliITStrackSA.cxx:191
 AliITStrackSA.cxx:192
 AliITStrackSA.cxx:193
 AliITStrackSA.cxx:194
 AliITStrackSA.cxx:195
 AliITStrackSA.cxx:196
 AliITStrackSA.cxx:197
 AliITStrackSA.cxx:198
 AliITStrackSA.cxx:199
 AliITStrackSA.cxx:200
 AliITStrackSA.cxx:201
 AliITStrackSA.cxx:202
 AliITStrackSA.cxx:203
 AliITStrackSA.cxx:204
 AliITStrackSA.cxx:205
 AliITStrackSA.cxx:206
 AliITStrackSA.cxx:207
 AliITStrackSA.cxx:208
 AliITStrackSA.cxx:209
 AliITStrackSA.cxx:210
 AliITStrackSA.cxx:211
 AliITStrackSA.cxx:212
 AliITStrackSA.cxx:213
 AliITStrackSA.cxx:214
 AliITStrackSA.cxx:215
 AliITStrackSA.cxx:216
 AliITStrackSA.cxx:217
 AliITStrackSA.cxx:218
 AliITStrackSA.cxx:219
 AliITStrackSA.cxx:220
 AliITStrackSA.cxx:221
 AliITStrackSA.cxx:222
 AliITStrackSA.cxx:223
 AliITStrackSA.cxx:224
 AliITStrackSA.cxx:225