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$ */

///////////////////////////////////////////////////////////////////
//                                                               //
// A straight line is coded as a point (3 Double_t) and           //
// 3 direction cosines                                           //
//                                                               //
///////////////////////////////////////////////////////////////////

#include <Riostream.h>
#include <TMath.h>

#include "AliStrLine.h"

using std::endl;
using std::cout;
ClassImp(AliStrLine)

//________________________________________________________
AliStrLine::AliStrLine() :
  TObject(),
  fWMatrix(0),
  fTpar(0)
 {
  // Default constructor
  for(Int_t i=0;i<3;i++) {
    fP0[i] = 0.;
    fSigma2P0[i] = 0.;
    fCd[i] = 0.;
  }
  SetIdPoints(65535,65535);
}

//________________________________________________________
AliStrLine::AliStrLine(const Double_t *const point, const Double_t *const cd, Bool_t twopoints, UShort_t id1, UShort_t id2) :
  TObject(),
  fWMatrix(0),
  fTpar(0)
{
  // Standard constructor
  // if twopoints is true:  point and cd are the 3D coordinates of
  //                        two points defininig the straight line
  // if twopoint is false: point represents the 3D coordinates of a point
  //                       belonging to the straight line and cd is the
  //                       direction in space
  for(Int_t i=0;i<3;i++)
    fSigma2P0[i] = 0.;

  if(twopoints)
    InitTwoPoints(point,cd);
  else 
    InitDirection(point,cd);

  SetIdPoints(id1,id2);
}


//________________________________________________________
AliStrLine::AliStrLine(const Double_t *const point, const Double_t *const sig2point, const Double_t *const cd, Bool_t twopoints, UShort_t id1, UShort_t id2) :
  TObject(),
  fWMatrix(0),
  fTpar(0)
{
  // Standard constructor
  // if twopoints is true:  point and cd are the 3D coordinates of
  //                        two points defininig the straight line
  // if twopoint is false: point represents the 3D coordinates of a point
  //                       belonging to the straight line and cd is the
  //                       direction in space
  for(Int_t i=0;i<3;i++)
    fSigma2P0[i] = sig2point[i];

  if(twopoints)
    InitTwoPoints(point,cd);
  else 
    InitDirection(point,cd);

  SetIdPoints(id1,id2);
}

//________________________________________________________
AliStrLine::AliStrLine(const Double_t *const point, const Double_t *const sig2point, const Double_t *const wmat, const Double_t *const cd, Bool_t twopoints, UShort_t id1, UShort_t id2) :
  TObject(),
  fWMatrix(0),
  fTpar(0)
{
  // Standard constructor
  // if twopoints is true:  point and cd are the 3D coordinates of
  //                        two points defininig the straight line
  // if twopoint is false: point represents the 3D coordinates of a point
  //                       belonging to the straight line and cd is the
  //                       direction in space
  Int_t k = 0;
  fWMatrix = new Double_t [6];
  for(Int_t i=0;i<3;i++){ 
    fSigma2P0[i] = sig2point[i];
    for(Int_t j=0;j<3;j++)if(j>=i)fWMatrix[k++]=wmat[3*i+j];
  }
  if(twopoints)
    InitTwoPoints(point,cd);
  else 
    InitDirection(point,cd);

  SetIdPoints(id1,id2);
}

//________________________________________________________
AliStrLine::AliStrLine(const AliStrLine &source):
  TObject(source),
  fWMatrix(0),
  fTpar(source.fTpar)
{
  //
  // copy constructor
  //
  for(Int_t i=0;i<3;i++){
    fP0[i]=source.fP0[i];
    fSigma2P0[i]=source.fSigma2P0[i];
    fCd[i]=source.fCd[i];
  }
  if(source.fWMatrix){
    fWMatrix = new Double_t [6];
    for(Int_t i=0;i<6;i++)fWMatrix[i]=source.fWMatrix[i];
  }
  for(Int_t i=0;i<2;i++) fIdPoint[i]=source.fIdPoint[i];
}

//________________________________________________________
AliStrLine& AliStrLine::operator=(const AliStrLine& source)
{
  // Assignment operator
  if(this !=&source){
    TObject::operator=(source);
    for(Int_t i=0;i<3;i++){
      fP0[i]=source.fP0[i];
      fSigma2P0[i]=source.fSigma2P0[i];
      fCd[i]=source.fCd[i];
    } 

    delete [] fWMatrix;
    fWMatrix=0;
    if(source.fWMatrix){
      fWMatrix = new Double_t [6];
      for(Int_t i=0;i<6;i++)fWMatrix[i]=source.fWMatrix[i];
    } 
    for(Int_t i=0;i<2;i++) fIdPoint[i]=source.fIdPoint[i];
  }
  return *this;
}

//________________________________________________________
void AliStrLine::GetWMatrix(Double_t *wmat)const {
// Getter for weighting matrix, as a [9] dim. array
  if(!fWMatrix)return;
  Int_t k = 0;
  for(Int_t i=0;i<3;i++){
    for(Int_t j=0;j<3;j++){
      if(j>=i){
	wmat[3*i+j]=fWMatrix[k++];
      }
      else{
	wmat[3*i+j]=wmat[3*j+i];
      }
    }
  }
} 

//________________________________________________________
void AliStrLine::SetWMatrix(const Double_t *wmat) {
// Setter for weighting matrix, strating from a [9] dim. array
  if(fWMatrix)delete [] fWMatrix;
  fWMatrix = new Double_t [6];
  Int_t k = 0;
  for(Int_t i=0;i<3;i++){
    for(Int_t j=0;j<3;j++)if(j>=i)fWMatrix[k++]=wmat[3*i+j];
  }
}

//________________________________________________________
void AliStrLine::InitDirection(const Double_t *const point, const Double_t *const cd)
{
  // Initialization from a point and a direction
  Double_t norm = cd[0]*cd[0]+cd[1]*cd[1]+cd[2]*cd[2];

  if(norm) {
    norm = TMath::Sqrt(1./norm);
    for(Int_t i=0;i<3;++i) {
      fP0[i]=point[i];
      fCd[i]=cd[i]*norm;
    }
    fTpar = 0.;
  }
  else AliFatal("Null direction cosines!!!");
}

//________________________________________________________
void AliStrLine::InitTwoPoints(const Double_t *const pA, const Double_t *const pB)
{
  // Initialization from the coordinates of two
  // points in the space
  Double_t cd[3];
  for(Int_t i=0;i<3;i++)cd[i] = pB[i]-pA[i];
  InitDirection(pA,cd);
}

//________________________________________________________
AliStrLine::~AliStrLine() {
  // destructor
  if(fWMatrix)delete [] fWMatrix;
}

//________________________________________________________
void AliStrLine::PrintStatus() const {
  // Print current status
  cout <<"=======================================================\n";
  cout <<"Direction cosines: ";
  for(Int_t i=0;i<3;i++)cout <<fCd[i]<<"; ";
  cout <<endl;
  cout <<"Known point: ";
  for(Int_t i=0;i<3;i++)cout <<fP0[i]<<"; ";
  cout <<endl;
  cout <<"Error on known point: ";
  for(Int_t i=0;i<3;i++)cout <<TMath::Sqrt(fSigma2P0[i])<<"; ";
  cout <<endl;
  cout <<"Current value for the parameter: "<<fTpar<<endl;
}

//________________________________________________________
Int_t AliStrLine::IsParallelTo(const AliStrLine *line) const {
  // returns 1 if lines are parallel, 0 if not paralel
  const Double_t prec=1e-14;
  Double_t cd2[3];
  line->GetCd(cd2);

  Double_t vecpx=fCd[1]*cd2[2]-fCd[2]*cd2[1];
  Double_t mod=TMath::Abs(fCd[1]*cd2[2])+TMath::Abs(fCd[2]*cd2[1]);
  if(TMath::Abs(vecpx) > prec*mod) return 0;

  Double_t vecpy=-fCd[0]*cd2[2]+fCd[2]*cd2[0];
  mod=TMath::Abs(fCd[0]*cd2[2])+TMath::Abs(fCd[2]*cd2[0]);
  if(TMath::Abs(vecpy) > prec*mod) return 0;

  Double_t vecpz=fCd[0]*cd2[1]-fCd[1]*cd2[0];
  mod=TMath::Abs(fCd[0]*cd2[1])+TMath::Abs(fCd[1]*cd2[0]);
  if(TMath::Abs(vecpz) > prec) return 0;

  return 1;
}
//________________________________________________________
Int_t AliStrLine::Crossrphi(const AliStrLine *line)
{
  // Cross 2 lines in the X-Y plane
  const Double_t prec=1e-14;
  const Double_t big=1e20;
  Double_t p2[3];
  Double_t cd2[3];
  line->GetP0(p2);
  line->GetCd(cd2);
  Double_t a=fCd[0];
  Double_t b=-cd2[0];
  Double_t c=p2[0]-fP0[0];
  Double_t d=fCd[1];
  Double_t e=-cd2[1];
  Double_t f=p2[1]-fP0[1];
  Double_t deno = a*e-b*d;
  Double_t mod=TMath::Abs(a*e)+TMath::Abs(b*d);
  Int_t retcode = 0;
  if(TMath::Abs(deno) > prec*mod) {
    fTpar = (c*e-b*f)/deno;
  }
  else {
    fTpar = big;
    retcode = -1;
  }
  return retcode;
}

//________________________________________________________
Int_t AliStrLine::CrossPoints(AliStrLine *line, Double_t *point1, Double_t *point2){
  // Looks for the crossing point estimated starting from the
  // DCA segment
  const Double_t prec=1e-14;
  Double_t p2[3];
  Double_t cd2[3];
  line->GetP0(p2);
  line->GetCd(cd2);
  Int_t i;
  Double_t k1 = 0;
  Double_t k2 = 0;
  Double_t a11 = 0;
  for(i=0;i<3;i++){
    k1+=(fP0[i]-p2[i])*fCd[i];
    k2+=(fP0[i]-p2[i])*cd2[i];
    a11+=fCd[i]*cd2[i];
  }
  Double_t a22 = -a11;
  Double_t a21 = 0;
  Double_t a12 = 0;
  for(i=0;i<3;i++){
    a21+=cd2[i]*cd2[i];
    a12-=fCd[i]*fCd[i];
  }
  Double_t deno = a11*a22-a21*a12;
  Double_t mod = TMath::Abs(a11*a22)+TMath::Abs(a21*a12);
  if(TMath::Abs(deno) < prec*mod) return -1;
  fTpar = (a11*k2-a21*k1) / deno;
  Double_t par2 = (k1*a22-k2*a12) / deno;
  line->SetPar(par2);
  GetCurrentPoint(point1);
  line->GetCurrentPoint(point2);
  return 0;
}
//________________________________________________________________
Int_t AliStrLine::Cross(AliStrLine *line, Double_t *point)
{

  //Finds intersection between lines
  Double_t point1[3];
  Double_t point2[3];
  Int_t retcod=CrossPoints(line,point1,point2);
  if(retcod==0){
    for(Int_t i=0;i<3;i++)point[i]=(point1[i]+point2[i])/2.;
    return 0;
  }else{
    return -1;
  }
}

//___________________________________________________________
Double_t AliStrLine::GetDCA(const AliStrLine *line) const
{
  //Returns the distance of closest approach between two lines
  const Double_t prec=1e-14;
  Double_t p2[3];
  Double_t cd2[3];
  line->GetP0(p2);
  line->GetCd(cd2);
  Int_t i;
  Int_t ispar=IsParallelTo(line);
  if(ispar){
    Double_t dist1q=0,dist2=0,mod=0;
    for(i=0;i<3;i++){
      dist1q+=(fP0[i]-p2[i])*(fP0[i]-p2[i]);
      dist2+=(fP0[i]-p2[i])*fCd[i];
      mod+=fCd[i]*fCd[i];
    }
    if(TMath::Abs(mod) > prec){
      dist2/=mod;
      return TMath::Sqrt(dist1q-dist2*dist2);
    }else{return -1;}
  }else{
     Double_t perp[3];
     perp[0]=fCd[1]*cd2[2]-fCd[2]*cd2[1];
     perp[1]=-fCd[0]*cd2[2]+fCd[2]*cd2[0];
     perp[2]=fCd[0]*cd2[1]-fCd[1]*cd2[0];
     Double_t mod=0,dist=0;
     for(i=0;i<3;i++){
       mod+=perp[i]*perp[i];
       dist+=(fP0[i]-p2[i])*perp[i];
     }
     if(TMath::Abs(mod) > prec) {
       return TMath::Abs(dist/TMath::Sqrt(mod));
     } else return -1;
  }
}
//________________________________________________________
void AliStrLine::GetCurrentPoint(Double_t *point) const {
  // Fills the array point with the current value on the line
  for(Int_t i=0;i<3;i++)point[i]=fP0[i]+fCd[i]*fTpar;
}

//________________________________________________________
Double_t AliStrLine::GetDistFromPoint(const Double_t *point) const 
{
  // computes distance from point 
  AliStrLine tmpline(point, fCd, kFALSE);
  return GetDCA(&tmpline);
}

//________________________________________________________
Bool_t AliStrLine::GetParamAtRadius(Double_t r,Double_t &t1,Double_t &t2) const
{
  // Input: radial distance from the origin (x=0, x=0) in the bending plane
  // Returns a boolean: kTRUE if the line crosses the cylinder of radius r
  // and axis coincident with the z axis. It returns kFALSE otherwise
  // Output: t1 and t2 in ascending order. The parameters of the line at 
  // the two intersections with the cylinder
  Double_t p1= fCd[0]*fP0[0]+fCd[1]*fP0[1];
  Double_t p2=fCd[0]*fCd[0]+fCd[1]*fCd[1];
  Double_t delta=p1*p1-p2*(fP0[0]*fP0[0]+fP0[1]*fP0[1]-r*r);
  if(delta<0.){
    t1=-1000.;
    t2=t1;
    return kFALSE;
  }
  delta=TMath::Sqrt(delta);
  t1=(-p1-delta)/p2;
  t2=(-p1+delta)/p2;

  if(t2<t1){
    // use delta as a temporary buffer
    delta=t1;
    t1=t2;
    t2=delta;
  }
  if(TMath::AreEqualAbs(t1,t2,1.e-9))t1=t2;
  return kTRUE;
}
 AliStrLine.cxx:1
 AliStrLine.cxx:2
 AliStrLine.cxx:3
 AliStrLine.cxx:4
 AliStrLine.cxx:5
 AliStrLine.cxx:6
 AliStrLine.cxx:7
 AliStrLine.cxx:8
 AliStrLine.cxx:9
 AliStrLine.cxx:10
 AliStrLine.cxx:11
 AliStrLine.cxx:12
 AliStrLine.cxx:13
 AliStrLine.cxx:14
 AliStrLine.cxx:15
 AliStrLine.cxx:16
 AliStrLine.cxx:17
 AliStrLine.cxx:18
 AliStrLine.cxx:19
 AliStrLine.cxx:20
 AliStrLine.cxx:21
 AliStrLine.cxx:22
 AliStrLine.cxx:23
 AliStrLine.cxx:24
 AliStrLine.cxx:25
 AliStrLine.cxx:26
 AliStrLine.cxx:27
 AliStrLine.cxx:28
 AliStrLine.cxx:29
 AliStrLine.cxx:30
 AliStrLine.cxx:31
 AliStrLine.cxx:32
 AliStrLine.cxx:33
 AliStrLine.cxx:34
 AliStrLine.cxx:35
 AliStrLine.cxx:36
 AliStrLine.cxx:37
 AliStrLine.cxx:38
 AliStrLine.cxx:39
 AliStrLine.cxx:40
 AliStrLine.cxx:41
 AliStrLine.cxx:42
 AliStrLine.cxx:43
 AliStrLine.cxx:44
 AliStrLine.cxx:45
 AliStrLine.cxx:46
 AliStrLine.cxx:47
 AliStrLine.cxx:48
 AliStrLine.cxx:49
 AliStrLine.cxx:50
 AliStrLine.cxx:51
 AliStrLine.cxx:52
 AliStrLine.cxx:53
 AliStrLine.cxx:54
 AliStrLine.cxx:55
 AliStrLine.cxx:56
 AliStrLine.cxx:57
 AliStrLine.cxx:58
 AliStrLine.cxx:59
 AliStrLine.cxx:60
 AliStrLine.cxx:61
 AliStrLine.cxx:62
 AliStrLine.cxx:63
 AliStrLine.cxx:64
 AliStrLine.cxx:65
 AliStrLine.cxx:66
 AliStrLine.cxx:67
 AliStrLine.cxx:68
 AliStrLine.cxx:69
 AliStrLine.cxx:70
 AliStrLine.cxx:71
 AliStrLine.cxx:72
 AliStrLine.cxx:73
 AliStrLine.cxx:74
 AliStrLine.cxx:75
 AliStrLine.cxx:76
 AliStrLine.cxx:77
 AliStrLine.cxx:78
 AliStrLine.cxx:79
 AliStrLine.cxx:80
 AliStrLine.cxx:81
 AliStrLine.cxx:82
 AliStrLine.cxx:83
 AliStrLine.cxx:84
 AliStrLine.cxx:85
 AliStrLine.cxx:86
 AliStrLine.cxx:87
 AliStrLine.cxx:88
 AliStrLine.cxx:89
 AliStrLine.cxx:90
 AliStrLine.cxx:91
 AliStrLine.cxx:92
 AliStrLine.cxx:93
 AliStrLine.cxx:94
 AliStrLine.cxx:95
 AliStrLine.cxx:96
 AliStrLine.cxx:97
 AliStrLine.cxx:98
 AliStrLine.cxx:99
 AliStrLine.cxx:100
 AliStrLine.cxx:101
 AliStrLine.cxx:102
 AliStrLine.cxx:103
 AliStrLine.cxx:104
 AliStrLine.cxx:105
 AliStrLine.cxx:106
 AliStrLine.cxx:107
 AliStrLine.cxx:108
 AliStrLine.cxx:109
 AliStrLine.cxx:110
 AliStrLine.cxx:111
 AliStrLine.cxx:112
 AliStrLine.cxx:113
 AliStrLine.cxx:114
 AliStrLine.cxx:115
 AliStrLine.cxx:116
 AliStrLine.cxx:117
 AliStrLine.cxx:118
 AliStrLine.cxx:119
 AliStrLine.cxx:120
 AliStrLine.cxx:121
 AliStrLine.cxx:122
 AliStrLine.cxx:123
 AliStrLine.cxx:124
 AliStrLine.cxx:125
 AliStrLine.cxx:126
 AliStrLine.cxx:127
 AliStrLine.cxx:128
 AliStrLine.cxx:129
 AliStrLine.cxx:130
 AliStrLine.cxx:131
 AliStrLine.cxx:132
 AliStrLine.cxx:133
 AliStrLine.cxx:134
 AliStrLine.cxx:135
 AliStrLine.cxx:136
 AliStrLine.cxx:137
 AliStrLine.cxx:138
 AliStrLine.cxx:139
 AliStrLine.cxx:140
 AliStrLine.cxx:141
 AliStrLine.cxx:142
 AliStrLine.cxx:143
 AliStrLine.cxx:144
 AliStrLine.cxx:145
 AliStrLine.cxx:146
 AliStrLine.cxx:147
 AliStrLine.cxx:148
 AliStrLine.cxx:149
 AliStrLine.cxx:150
 AliStrLine.cxx:151
 AliStrLine.cxx:152
 AliStrLine.cxx:153
 AliStrLine.cxx:154
 AliStrLine.cxx:155
 AliStrLine.cxx:156
 AliStrLine.cxx:157
 AliStrLine.cxx:158
 AliStrLine.cxx:159
 AliStrLine.cxx:160
 AliStrLine.cxx:161
 AliStrLine.cxx:162
 AliStrLine.cxx:163
 AliStrLine.cxx:164
 AliStrLine.cxx:165
 AliStrLine.cxx:166
 AliStrLine.cxx:167
 AliStrLine.cxx:168
 AliStrLine.cxx:169
 AliStrLine.cxx:170
 AliStrLine.cxx:171
 AliStrLine.cxx:172
 AliStrLine.cxx:173
 AliStrLine.cxx:174
 AliStrLine.cxx:175
 AliStrLine.cxx:176
 AliStrLine.cxx:177
 AliStrLine.cxx:178
 AliStrLine.cxx:179
 AliStrLine.cxx:180
 AliStrLine.cxx:181
 AliStrLine.cxx:182
 AliStrLine.cxx:183
 AliStrLine.cxx:184
 AliStrLine.cxx:185
 AliStrLine.cxx:186
 AliStrLine.cxx:187
 AliStrLine.cxx:188
 AliStrLine.cxx:189
 AliStrLine.cxx:190
 AliStrLine.cxx:191
 AliStrLine.cxx:192
 AliStrLine.cxx:193
 AliStrLine.cxx:194
 AliStrLine.cxx:195
 AliStrLine.cxx:196
 AliStrLine.cxx:197
 AliStrLine.cxx:198
 AliStrLine.cxx:199
 AliStrLine.cxx:200
 AliStrLine.cxx:201
 AliStrLine.cxx:202
 AliStrLine.cxx:203
 AliStrLine.cxx:204
 AliStrLine.cxx:205
 AliStrLine.cxx:206
 AliStrLine.cxx:207
 AliStrLine.cxx:208
 AliStrLine.cxx:209
 AliStrLine.cxx:210
 AliStrLine.cxx:211
 AliStrLine.cxx:212
 AliStrLine.cxx:213
 AliStrLine.cxx:214
 AliStrLine.cxx:215
 AliStrLine.cxx:216
 AliStrLine.cxx:217
 AliStrLine.cxx:218
 AliStrLine.cxx:219
 AliStrLine.cxx:220
 AliStrLine.cxx:221
 AliStrLine.cxx:222
 AliStrLine.cxx:223
 AliStrLine.cxx:224
 AliStrLine.cxx:225
 AliStrLine.cxx:226
 AliStrLine.cxx:227
 AliStrLine.cxx:228
 AliStrLine.cxx:229
 AliStrLine.cxx:230
 AliStrLine.cxx:231
 AliStrLine.cxx:232
 AliStrLine.cxx:233
 AliStrLine.cxx:234
 AliStrLine.cxx:235
 AliStrLine.cxx:236
 AliStrLine.cxx:237
 AliStrLine.cxx:238
 AliStrLine.cxx:239
 AliStrLine.cxx:240
 AliStrLine.cxx:241
 AliStrLine.cxx:242
 AliStrLine.cxx:243
 AliStrLine.cxx:244
 AliStrLine.cxx:245
 AliStrLine.cxx:246
 AliStrLine.cxx:247
 AliStrLine.cxx:248
 AliStrLine.cxx:249
 AliStrLine.cxx:250
 AliStrLine.cxx:251
 AliStrLine.cxx:252
 AliStrLine.cxx:253
 AliStrLine.cxx:254
 AliStrLine.cxx:255
 AliStrLine.cxx:256
 AliStrLine.cxx:257
 AliStrLine.cxx:258
 AliStrLine.cxx:259
 AliStrLine.cxx:260
 AliStrLine.cxx:261
 AliStrLine.cxx:262
 AliStrLine.cxx:263
 AliStrLine.cxx:264
 AliStrLine.cxx:265
 AliStrLine.cxx:266
 AliStrLine.cxx:267
 AliStrLine.cxx:268
 AliStrLine.cxx:269
 AliStrLine.cxx:270
 AliStrLine.cxx:271
 AliStrLine.cxx:272
 AliStrLine.cxx:273
 AliStrLine.cxx:274
 AliStrLine.cxx:275
 AliStrLine.cxx:276
 AliStrLine.cxx:277
 AliStrLine.cxx:278
 AliStrLine.cxx:279
 AliStrLine.cxx:280
 AliStrLine.cxx:281
 AliStrLine.cxx:282
 AliStrLine.cxx:283
 AliStrLine.cxx:284
 AliStrLine.cxx:285
 AliStrLine.cxx:286
 AliStrLine.cxx:287
 AliStrLine.cxx:288
 AliStrLine.cxx:289
 AliStrLine.cxx:290
 AliStrLine.cxx:291
 AliStrLine.cxx:292
 AliStrLine.cxx:293
 AliStrLine.cxx:294
 AliStrLine.cxx:295
 AliStrLine.cxx:296
 AliStrLine.cxx:297
 AliStrLine.cxx:298
 AliStrLine.cxx:299
 AliStrLine.cxx:300
 AliStrLine.cxx:301
 AliStrLine.cxx:302
 AliStrLine.cxx:303
 AliStrLine.cxx:304
 AliStrLine.cxx:305
 AliStrLine.cxx:306
 AliStrLine.cxx:307
 AliStrLine.cxx:308
 AliStrLine.cxx:309
 AliStrLine.cxx:310
 AliStrLine.cxx:311
 AliStrLine.cxx:312
 AliStrLine.cxx:313
 AliStrLine.cxx:314
 AliStrLine.cxx:315
 AliStrLine.cxx:316
 AliStrLine.cxx:317
 AliStrLine.cxx:318
 AliStrLine.cxx:319
 AliStrLine.cxx:320
 AliStrLine.cxx:321
 AliStrLine.cxx:322
 AliStrLine.cxx:323
 AliStrLine.cxx:324
 AliStrLine.cxx:325
 AliStrLine.cxx:326
 AliStrLine.cxx:327
 AliStrLine.cxx:328
 AliStrLine.cxx:329
 AliStrLine.cxx:330
 AliStrLine.cxx:331
 AliStrLine.cxx:332
 AliStrLine.cxx:333
 AliStrLine.cxx:334
 AliStrLine.cxx:335
 AliStrLine.cxx:336
 AliStrLine.cxx:337
 AliStrLine.cxx:338
 AliStrLine.cxx:339
 AliStrLine.cxx:340
 AliStrLine.cxx:341
 AliStrLine.cxx:342
 AliStrLine.cxx:343
 AliStrLine.cxx:344
 AliStrLine.cxx:345
 AliStrLine.cxx:346
 AliStrLine.cxx:347
 AliStrLine.cxx:348
 AliStrLine.cxx:349
 AliStrLine.cxx:350
 AliStrLine.cxx:351
 AliStrLine.cxx:352
 AliStrLine.cxx:353
 AliStrLine.cxx:354
 AliStrLine.cxx:355
 AliStrLine.cxx:356
 AliStrLine.cxx:357
 AliStrLine.cxx:358
 AliStrLine.cxx:359
 AliStrLine.cxx:360
 AliStrLine.cxx:361
 AliStrLine.cxx:362
 AliStrLine.cxx:363
 AliStrLine.cxx:364
 AliStrLine.cxx:365
 AliStrLine.cxx:366
 AliStrLine.cxx:367
 AliStrLine.cxx:368
 AliStrLine.cxx:369
 AliStrLine.cxx:370
 AliStrLine.cxx:371
 AliStrLine.cxx:372
 AliStrLine.cxx:373
 AliStrLine.cxx:374
 AliStrLine.cxx:375
 AliStrLine.cxx:376
 AliStrLine.cxx:377
 AliStrLine.cxx:378
 AliStrLine.cxx:379
 AliStrLine.cxx:380
 AliStrLine.cxx:381
 AliStrLine.cxx:382
 AliStrLine.cxx:383
 AliStrLine.cxx:384
 AliStrLine.cxx:385
 AliStrLine.cxx:386
 AliStrLine.cxx:387
 AliStrLine.cxx:388
 AliStrLine.cxx:389
 AliStrLine.cxx:390
 AliStrLine.cxx:391
 AliStrLine.cxx:392
 AliStrLine.cxx:393
 AliStrLine.cxx:394
 AliStrLine.cxx:395
 AliStrLine.cxx:396
 AliStrLine.cxx:397
 AliStrLine.cxx:398
 AliStrLine.cxx:399
 AliStrLine.cxx:400
 AliStrLine.cxx:401
 AliStrLine.cxx:402
 AliStrLine.cxx:403
 AliStrLine.cxx:404
 AliStrLine.cxx:405
 AliStrLine.cxx:406
 AliStrLine.cxx:407
 AliStrLine.cxx:408
 AliStrLine.cxx:409
 AliStrLine.cxx:410
 AliStrLine.cxx:411
 AliStrLine.cxx:412
 AliStrLine.cxx:413
 AliStrLine.cxx:414
 AliStrLine.cxx:415
 AliStrLine.cxx:416
 AliStrLine.cxx:417
 AliStrLine.cxx:418
 AliStrLine.cxx:419
 AliStrLine.cxx:420
 AliStrLine.cxx:421
 AliStrLine.cxx:422
 AliStrLine.cxx:423