ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, 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: AliITSUChip.cxx 53509 2011-12-10 18:55:52Z masera $ */

#include <TArrayI.h>

#include <stdlib.h>

#include "AliRun.h"
#include "AliITS.h"
#include "AliITSUChip.h"
#include "AliITSUGeomTGeo.h"
using namespace TMath;

ClassImp(AliITSUChip)

//_______________________________________________________________________
//
// Impementation of class AliITSUChip
//
//_______________________________________________________________________
//________________________________________________________________________
// 
// Constructors and deconstructor
//________________________________________________________________________
//
AliITSUChip::AliITSUChip()
:  fHitsM(0)
  ,fGeomTG(0)
{
  // constructor
}

//_________________________________________________________________________
AliITSUChip::AliITSUChip(Int_t index, AliITSUGeomTGeo* tg)
  :fHitsM(new TObjArray())
  ,fGeomTG(tg)
{
  // constructor
  SetIndex(index);
}

//__________________________________________________________________________
AliITSUChip::~AliITSUChip() 
{
  // The destructor for AliITSUChip. Before destoring AliITSUChip
  // we must first destroy all of it's members.
  if (fHitsM) fHitsM->Clear();
  delete fHitsM;
}

//____________________________________________________________________________
AliITSUChip::AliITSUChip(const AliITSUChip &source)
 :TObject(source)
 ,fHitsM(source.fHitsM)
 ,fGeomTG(source.fGeomTG)
{
//     Copy Constructor 
}

//_____________________________________________________________________________
AliITSUChip& AliITSUChip::operator=(const AliITSUChip &source)
{
  //    Assignment operator 
  if (this!=&source) {
    this->~AliITSUChip();
    new(this) AliITSUChip(source);
  }
  return *this;
}

//___________________________________________________________________________
Double_t AliITSUChip::PathLength(const AliITSUHit *itsHit1,const AliITSUHit *itsHit2) 
{
  // path lenght
  Float_t  x1g,y1g,z1g;   
  Float_t  x2g,y2g,z2g;
  Double_t s;
  //
  itsHit1->GetPositionG(x1g,y1g,z1g);
  itsHit2->GetPositionG(x2g,y2g,z2g);
  //
  s = Sqrt( ((Double_t)(x2g-x1g)*(Double_t)(x2g-x1g)) +
	    ((Double_t)(y2g-y1g)*(Double_t)(y2g-y1g)) +
	    ((Double_t)(z2g-z1g)*(Double_t)(z2g-z1g)) );
   return s;
}

//___________________________________________________________________________
void AliITSUChip::PathLength(Float_t x,Float_t y,Float_t z,Int_t status,Int_t &nseg,Float_t &x1,Float_t &y1,Float_t &z1,
			      Float_t &dx1,Float_t &dy1,Float_t &dz1,Int_t &flag) const
{
  // path length
  static Float_t x0,y0,z0;
  //
  if ((status&0x0002)!=0){ // entering
    x0 = x;
    y0 = y;
    z0 = z;
    nseg = 0;
    flag = 1;
  }else{
    x1 = x0;
    y1 = y0;
    z1 = z0;
    dx1 = x-x1;
    dy1 = y-y1;
    dz1 = z-z1;
    nseg++;
    if ((status&0x0004)!=0) flag = 0; //exiting
    if ((status&0x0001)!=0) flag = 2; // inside
    else flag = 2; //inside ?
    x0 = x;
    y0 = y;
    z0 = z;
  } // end if
}

//___________________________________________________________________________
Bool_t AliITSUChip::LineSegmentL(Int_t hitindex,Double_t &a,Double_t &b,Double_t &c,Double_t &d,
				  Double_t &e,Double_t &f,Double_t &de)
{
  // line segment
  AliITSUHit *h1;
  Double_t t;
  //  
  if(hitindex>= fHitsM->GetEntriesFast()) return kFALSE;
  //
  h1 = (AliITSUHit *) (fHitsM->At(hitindex));
  if(h1->StatusEntering()) return kFALSE; // if track entering volume, get index for next step
  de = h1->GetIonization();
  h1->GetPositionL0(a,c,e,t);
  h1->GetPositionL(b,d,f);
  b = b - a;
  d = d - c;
  f = f - e;
  return kTRUE;
}

//___________________________________________________________________________
Bool_t AliITSUChip::LineSegmentG(Int_t hitindex,Double_t &a,Double_t &b,Double_t &c,Double_t &d,
				  Double_t &e,Double_t &f,Double_t &de)
{
  // line segment
  AliITSUHit *h1;
  Double_t t;
  //
  if(hitindex>= fHitsM->GetEntriesFast()) return kFALSE;
  h1 = (AliITSUHit *) (fHitsM->At(hitindex));
  if(h1->StatusEntering()) return kFALSE; // if track entering volume, get index for next step
  de = h1->GetIonization();
  h1->GetPositionG0(a,c,e,t);
  h1->GetPositionG(b,d,f);
  b = b - a;
  d = d - c;
  f = f - e;
  return kTRUE;
}

//___________________________________________________________________________
Bool_t AliITSUChip::LineSegmentL(Int_t hitindex,Double_t &a,Double_t &b,Double_t &c,Double_t &d,
				   Double_t &e,Double_t &f,Double_t &de,Double_t &tof, Int_t &track)
{
  // line segmente
  AliITSUHit *h1;
  if(hitindex>= fHitsM->GetEntriesFast()) return kFALSE;
  //
  h1 = (AliITSUHit *) (fHitsM->At(hitindex));
  if(h1->StatusEntering()){ // if track entering volume, get index for next
    // step
    track = h1->GetTrack();
    return kFALSE;
  } // end if StatusEntering()
    // else stepping
  de = h1->GetIonization();
  h1->GetPositionL0(a,c,e,tof);
  h1->GetPositionL(b,d,f);
  b = b - a;
  d = d - c;
  f = f - e;
  track = h1->GetTrack();
  return kTRUE;
}

//___________________________________________________________________________
Bool_t AliITSUChip::LineSegmentG(Int_t hitindex,Double_t &a,Double_t &b,Double_t &c,Double_t &d,
				   Double_t &e,Double_t &f,Double_t &de,Double_t &tof, Int_t &track)
{
  // line segment
  AliITSUHit *h1;
  if(hitindex>= fHitsM->GetEntriesFast()) return kFALSE;
  //
  h1 = (AliITSUHit *) (fHitsM->At(hitindex));
  if(h1->StatusEntering()){ // if track entering volume, get index for next
    // step
    track = h1->GetTrack();
    return kFALSE;
  } // end if StatusEntering()
  de = h1->GetIonization();
  h1->GetPositionG0(a,c,e,tof);
  h1->GetPositionG(b,d,f);
  b = b - a;
  d = d - c;
  f = f - e;
  track = h1->GetTrack();
  return kTRUE;
}

//______________________________________________________________________
Bool_t AliITSUChip::MedianHitG(AliITSUHit *h1,AliITSUHit *h2,Float_t &x,Float_t &y,Float_t &z)
{
  // Computes the mean hit location for a set of hits that make up a track
  // passing through a volume. Returns kFALSE untill the the track leaves
  // the volume.
  // median hit
  Float_t x1l=0.,y1l=0.,z1l=0.;
  Float_t x2l=0.,y2l=0.,z2l=0.;
  Float_t xMl,yMl=0,zMl;
  Double_t l[3], g[3];
  
  h1->GetPositionG(x1l,y1l,z1l);
  h2->GetPositionG(x2l,y2l,z2l);
  
  if((y2l*y1l)<0.) {
    xMl = (-y1l / (y2l-y1l))*(x2l-x1l) + x1l;
    zMl = (-y1l / (y2l-y1l))*(z2l-z1l) + z1l;
  } else {
    xMl = 0.5*(x1l+x2l);
    zMl = 0.5*(z1l+z2l);
  }
  
  l[0] = xMl;
  l[1] = yMl;
  l[2] = zMl;
  fGeomTG->LocalToGlobal(h1->GetChip(),l,g);
  x = g[0];
  y = g[1];
  z = g[2];
  return kTRUE;
}

//___________________________________________________________________________
void AliITSUChip::MedianHitG(Int_t index,Float_t hitx1,Float_t hity1,Float_t hitz1,Float_t hitx2,Float_t hity2,Float_t hitz2,
				 Float_t &xMg, Float_t &yMg, Float_t &zMg)
{
  // median hit
  Float_t x1l,y1l,z1l;
  Float_t x2l,y2l,z2l;
  Float_t xMl,yMl=0,zMl;
  Double_t l[3], g[3];
  
  g[0] = hitx1;
  g[1] = hity1;
  g[2] = hitz1;
  fGeomTG->GlobalToLocal(index,g,l);
  x1l = l[0];
  y1l = l[1];
  z1l = l[2];
  
  g[0] = hitx2;
  g[1] = hity2;
  g[2] = hitz2;
  fGeomTG->GlobalToLocal(index,g,l);
  x2l = l[0];
  y2l = l[1];
  z2l = l[2];
  
  if((y2l*y1l)<0.) {
    xMl = (-y1l / (y2l-y1l))*(x2l-x1l) + x1l;
    zMl = (-y1l / (y2l-y1l))*(z2l-z1l) + z1l;
  } else {
    xMl = 0.5*(x1l+x2l);
    zMl = 0.5*(z1l+z2l);
  }
  
  l[0] = xMl;
  l[1] = yMl;
  l[2] = zMl;
  fGeomTG->LocalToGlobal(index,l,g);
  xMg = g[0];
  yMg = g[1];
  zMg = g[2];
}

//___________________________________________________________________________
Bool_t AliITSUChip::MedianHitL( AliITSUHit *itsHit1,AliITSUHit *itsHit2, Float_t &xMl, Float_t &yMl, Float_t &zMl) const
{
  // median hit
  Float_t x1l,y1l,z1l;
  Float_t x2l,y2l,z2l;
  
  itsHit1->GetPositionL(x1l,y1l,z1l);
  itsHit2->GetPositionL(x2l,y2l,z2l);
  
  yMl = 0.0;
  if((y2l*y1l)<0.) {
    xMl = (-y1l / (y2l-y1l))*(x2l-x1l) + x1l;
    zMl = (-y1l / (y2l-y1l))*(z2l-z1l) + z1l;	     
  } else {
    xMl = 0.5*(x1l+x2l);
    zMl = 0.5*(z1l+z2l);
  }
  return kTRUE;
}

//___________________________________________________________________________
void AliITSUChip::MedianHit(Int_t index,Float_t xg,Float_t yg,Float_t zg,Int_t status,
			     Float_t &xMg,Float_t &yMg,Float_t &zMg,Int_t &flag)
{
  // median hit
  static Float_t x1,y1,z1;
  //
  if ((status&0x0002)!=0){ // entering
    x1 = xg;
    y1 = yg;
    z1 = zg;
    flag = 1;
  } else if ((status&0x0004)!=0){ // exiting
    MedianHitG(index,x1,y1,z1,xg,yg,zg,xMg,yMg,zMg);
    flag = 0;
  } // end if
  else  flag = 1;
}


 AliITSUChip.cxx:1
 AliITSUChip.cxx:2
 AliITSUChip.cxx:3
 AliITSUChip.cxx:4
 AliITSUChip.cxx:5
 AliITSUChip.cxx:6
 AliITSUChip.cxx:7
 AliITSUChip.cxx:8
 AliITSUChip.cxx:9
 AliITSUChip.cxx:10
 AliITSUChip.cxx:11
 AliITSUChip.cxx:12
 AliITSUChip.cxx:13
 AliITSUChip.cxx:14
 AliITSUChip.cxx:15
 AliITSUChip.cxx:16
 AliITSUChip.cxx:17
 AliITSUChip.cxx:18
 AliITSUChip.cxx:19
 AliITSUChip.cxx:20
 AliITSUChip.cxx:21
 AliITSUChip.cxx:22
 AliITSUChip.cxx:23
 AliITSUChip.cxx:24
 AliITSUChip.cxx:25
 AliITSUChip.cxx:26
 AliITSUChip.cxx:27
 AliITSUChip.cxx:28
 AliITSUChip.cxx:29
 AliITSUChip.cxx:30
 AliITSUChip.cxx:31
 AliITSUChip.cxx:32
 AliITSUChip.cxx:33
 AliITSUChip.cxx:34
 AliITSUChip.cxx:35
 AliITSUChip.cxx:36
 AliITSUChip.cxx:37
 AliITSUChip.cxx:38
 AliITSUChip.cxx:39
 AliITSUChip.cxx:40
 AliITSUChip.cxx:41
 AliITSUChip.cxx:42
 AliITSUChip.cxx:43
 AliITSUChip.cxx:44
 AliITSUChip.cxx:45
 AliITSUChip.cxx:46
 AliITSUChip.cxx:47
 AliITSUChip.cxx:48
 AliITSUChip.cxx:49
 AliITSUChip.cxx:50
 AliITSUChip.cxx:51
 AliITSUChip.cxx:52
 AliITSUChip.cxx:53
 AliITSUChip.cxx:54
 AliITSUChip.cxx:55
 AliITSUChip.cxx:56
 AliITSUChip.cxx:57
 AliITSUChip.cxx:58
 AliITSUChip.cxx:59
 AliITSUChip.cxx:60
 AliITSUChip.cxx:61
 AliITSUChip.cxx:62
 AliITSUChip.cxx:63
 AliITSUChip.cxx:64
 AliITSUChip.cxx:65
 AliITSUChip.cxx:66
 AliITSUChip.cxx:67
 AliITSUChip.cxx:68
 AliITSUChip.cxx:69
 AliITSUChip.cxx:70
 AliITSUChip.cxx:71
 AliITSUChip.cxx:72
 AliITSUChip.cxx:73
 AliITSUChip.cxx:74
 AliITSUChip.cxx:75
 AliITSUChip.cxx:76
 AliITSUChip.cxx:77
 AliITSUChip.cxx:78
 AliITSUChip.cxx:79
 AliITSUChip.cxx:80
 AliITSUChip.cxx:81
 AliITSUChip.cxx:82
 AliITSUChip.cxx:83
 AliITSUChip.cxx:84
 AliITSUChip.cxx:85
 AliITSUChip.cxx:86
 AliITSUChip.cxx:87
 AliITSUChip.cxx:88
 AliITSUChip.cxx:89
 AliITSUChip.cxx:90
 AliITSUChip.cxx:91
 AliITSUChip.cxx:92
 AliITSUChip.cxx:93
 AliITSUChip.cxx:94
 AliITSUChip.cxx:95
 AliITSUChip.cxx:96
 AliITSUChip.cxx:97
 AliITSUChip.cxx:98
 AliITSUChip.cxx:99
 AliITSUChip.cxx:100
 AliITSUChip.cxx:101
 AliITSUChip.cxx:102
 AliITSUChip.cxx:103
 AliITSUChip.cxx:104
 AliITSUChip.cxx:105
 AliITSUChip.cxx:106
 AliITSUChip.cxx:107
 AliITSUChip.cxx:108
 AliITSUChip.cxx:109
 AliITSUChip.cxx:110
 AliITSUChip.cxx:111
 AliITSUChip.cxx:112
 AliITSUChip.cxx:113
 AliITSUChip.cxx:114
 AliITSUChip.cxx:115
 AliITSUChip.cxx:116
 AliITSUChip.cxx:117
 AliITSUChip.cxx:118
 AliITSUChip.cxx:119
 AliITSUChip.cxx:120
 AliITSUChip.cxx:121
 AliITSUChip.cxx:122
 AliITSUChip.cxx:123
 AliITSUChip.cxx:124
 AliITSUChip.cxx:125
 AliITSUChip.cxx:126
 AliITSUChip.cxx:127
 AliITSUChip.cxx:128
 AliITSUChip.cxx:129
 AliITSUChip.cxx:130
 AliITSUChip.cxx:131
 AliITSUChip.cxx:132
 AliITSUChip.cxx:133
 AliITSUChip.cxx:134
 AliITSUChip.cxx:135
 AliITSUChip.cxx:136
 AliITSUChip.cxx:137
 AliITSUChip.cxx:138
 AliITSUChip.cxx:139
 AliITSUChip.cxx:140
 AliITSUChip.cxx:141
 AliITSUChip.cxx:142
 AliITSUChip.cxx:143
 AliITSUChip.cxx:144
 AliITSUChip.cxx:145
 AliITSUChip.cxx:146
 AliITSUChip.cxx:147
 AliITSUChip.cxx:148
 AliITSUChip.cxx:149
 AliITSUChip.cxx:150
 AliITSUChip.cxx:151
 AliITSUChip.cxx:152
 AliITSUChip.cxx:153
 AliITSUChip.cxx:154
 AliITSUChip.cxx:155
 AliITSUChip.cxx:156
 AliITSUChip.cxx:157
 AliITSUChip.cxx:158
 AliITSUChip.cxx:159
 AliITSUChip.cxx:160
 AliITSUChip.cxx:161
 AliITSUChip.cxx:162
 AliITSUChip.cxx:163
 AliITSUChip.cxx:164
 AliITSUChip.cxx:165
 AliITSUChip.cxx:166
 AliITSUChip.cxx:167
 AliITSUChip.cxx:168
 AliITSUChip.cxx:169
 AliITSUChip.cxx:170
 AliITSUChip.cxx:171
 AliITSUChip.cxx:172
 AliITSUChip.cxx:173
 AliITSUChip.cxx:174
 AliITSUChip.cxx:175
 AliITSUChip.cxx:176
 AliITSUChip.cxx:177
 AliITSUChip.cxx:178
 AliITSUChip.cxx:179
 AliITSUChip.cxx:180
 AliITSUChip.cxx:181
 AliITSUChip.cxx:182
 AliITSUChip.cxx:183
 AliITSUChip.cxx:184
 AliITSUChip.cxx:185
 AliITSUChip.cxx:186
 AliITSUChip.cxx:187
 AliITSUChip.cxx:188
 AliITSUChip.cxx:189
 AliITSUChip.cxx:190
 AliITSUChip.cxx:191
 AliITSUChip.cxx:192
 AliITSUChip.cxx:193
 AliITSUChip.cxx:194
 AliITSUChip.cxx:195
 AliITSUChip.cxx:196
 AliITSUChip.cxx:197
 AliITSUChip.cxx:198
 AliITSUChip.cxx:199
 AliITSUChip.cxx:200
 AliITSUChip.cxx:201
 AliITSUChip.cxx:202
 AliITSUChip.cxx:203
 AliITSUChip.cxx:204
 AliITSUChip.cxx:205
 AliITSUChip.cxx:206
 AliITSUChip.cxx:207
 AliITSUChip.cxx:208
 AliITSUChip.cxx:209
 AliITSUChip.cxx:210
 AliITSUChip.cxx:211
 AliITSUChip.cxx:212
 AliITSUChip.cxx:213
 AliITSUChip.cxx:214
 AliITSUChip.cxx:215
 AliITSUChip.cxx:216
 AliITSUChip.cxx:217
 AliITSUChip.cxx:218
 AliITSUChip.cxx:219
 AliITSUChip.cxx:220
 AliITSUChip.cxx:221
 AliITSUChip.cxx:222
 AliITSUChip.cxx:223
 AliITSUChip.cxx:224
 AliITSUChip.cxx:225
 AliITSUChip.cxx:226
 AliITSUChip.cxx:227
 AliITSUChip.cxx:228
 AliITSUChip.cxx:229
 AliITSUChip.cxx:230
 AliITSUChip.cxx:231
 AliITSUChip.cxx:232
 AliITSUChip.cxx:233
 AliITSUChip.cxx:234
 AliITSUChip.cxx:235
 AliITSUChip.cxx:236
 AliITSUChip.cxx:237
 AliITSUChip.cxx:238
 AliITSUChip.cxx:239
 AliITSUChip.cxx:240
 AliITSUChip.cxx:241
 AliITSUChip.cxx:242
 AliITSUChip.cxx:243
 AliITSUChip.cxx:244
 AliITSUChip.cxx:245
 AliITSUChip.cxx:246
 AliITSUChip.cxx:247
 AliITSUChip.cxx:248
 AliITSUChip.cxx:249
 AliITSUChip.cxx:250
 AliITSUChip.cxx:251
 AliITSUChip.cxx:252
 AliITSUChip.cxx:253
 AliITSUChip.cxx:254
 AliITSUChip.cxx:255
 AliITSUChip.cxx:256
 AliITSUChip.cxx:257
 AliITSUChip.cxx:258
 AliITSUChip.cxx:259
 AliITSUChip.cxx:260
 AliITSUChip.cxx:261
 AliITSUChip.cxx:262
 AliITSUChip.cxx:263
 AliITSUChip.cxx:264
 AliITSUChip.cxx:265
 AliITSUChip.cxx:266
 AliITSUChip.cxx:267
 AliITSUChip.cxx:268
 AliITSUChip.cxx:269
 AliITSUChip.cxx:270
 AliITSUChip.cxx:271
 AliITSUChip.cxx:272
 AliITSUChip.cxx:273
 AliITSUChip.cxx:274
 AliITSUChip.cxx:275
 AliITSUChip.cxx:276
 AliITSUChip.cxx:277
 AliITSUChip.cxx:278
 AliITSUChip.cxx:279
 AliITSUChip.cxx:280
 AliITSUChip.cxx:281
 AliITSUChip.cxx:282
 AliITSUChip.cxx:283
 AliITSUChip.cxx:284
 AliITSUChip.cxx:285
 AliITSUChip.cxx:286
 AliITSUChip.cxx:287
 AliITSUChip.cxx:288
 AliITSUChip.cxx:289
 AliITSUChip.cxx:290
 AliITSUChip.cxx:291
 AliITSUChip.cxx:292
 AliITSUChip.cxx:293
 AliITSUChip.cxx:294
 AliITSUChip.cxx:295
 AliITSUChip.cxx:296
 AliITSUChip.cxx:297
 AliITSUChip.cxx:298
 AliITSUChip.cxx:299
 AliITSUChip.cxx:300
 AliITSUChip.cxx:301
 AliITSUChip.cxx:302
 AliITSUChip.cxx:303
 AliITSUChip.cxx:304
 AliITSUChip.cxx:305
 AliITSUChip.cxx:306
 AliITSUChip.cxx:307
 AliITSUChip.cxx:308
 AliITSUChip.cxx:309
 AliITSUChip.cxx:310
 AliITSUChip.cxx:311
 AliITSUChip.cxx:312
 AliITSUChip.cxx:313
 AliITSUChip.cxx:314
 AliITSUChip.cxx:315
 AliITSUChip.cxx:316
 AliITSUChip.cxx:317
 AliITSUChip.cxx:318
 AliITSUChip.cxx:319
 AliITSUChip.cxx:320
 AliITSUChip.cxx:321
 AliITSUChip.cxx:322
 AliITSUChip.cxx:323
 AliITSUChip.cxx:324
 AliITSUChip.cxx:325
 AliITSUChip.cxx:326
 AliITSUChip.cxx:327
 AliITSUChip.cxx:328
 AliITSUChip.cxx:329
 AliITSUChip.cxx:330
 AliITSUChip.cxx:331
 AliITSUChip.cxx:332
 AliITSUChip.cxx:333
 AliITSUChip.cxx:334
 AliITSUChip.cxx:335
 AliITSUChip.cxx:336
 AliITSUChip.cxx:337
 AliITSUChip.cxx:338