ROOT logo
#include "AliITSURecoSens.h"
#include "AliITSUGeomTGeo.h"
#include "AliITSsegmentation.h"
#include "AliExternalTrackParam.h"
#include "AliITSUAux.h"
#include "AliLog.h"

using namespace AliITSUAux;
using namespace TMath;

ClassImp(AliITSURecoSens)

//______________________________________________________
AliITSURecoSens::AliITSURecoSens(Int_t id)
:  fNClusters(0)
  ,fFirstClusterId(-1)
  ,fXTF(0)
  ,fPhiTF(0)
  ,fPhiMin(0)
  ,fPhiMax(0)
  ,fZMin(0)
  ,fZMax(0)
{
  // def. c-tor
  SetID(id);
}

//______________________________________________________
AliITSURecoSens::AliITSURecoSens(const AliITSURecoSens &source)
  :TObject(source)
  ,fNClusters(source.fNClusters)
  ,fFirstClusterId(source.fFirstClusterId)
  ,fXTF(source.fXTF)
  ,fPhiTF(source.fPhiTF)
  ,fPhiMin(source.fPhiMin)
  ,fPhiMax(source.fPhiMax)
  ,fZMin(source.fZMin)
  ,fZMax(source.fZMax)
{
  // copy c-tor
}

//______________________________________________________
AliITSURecoSens& AliITSURecoSens::operator=(const AliITSURecoSens &source)
{
  // = operator
  if (&source==this) return *this;
  TObject::operator=(source);
  fNClusters = source.fNClusters;
  fFirstClusterId = source.fFirstClusterId;
  fXTF = source.fXTF;
  fPhiTF = source.fPhiTF;
  fPhiMin = source.fPhiMin;
  fPhiMax = source.fPhiMax;
  fZMin   = source.fZMin;
  fZMax   = source.fZMax;
  //
  return *this;
}

//______________________________________________________
void AliITSURecoSens::SetBoundaries(double phiMn,double phiMx, double zMn, double zMx)
{
  // set phi,z limits 
  fPhiMin = phiMn;
  fPhiMax = phiMx;
  fZMin = zMn;
  fZMax = zMx;
}

//______________________________________________________
void AliITSURecoSens::Print(Option_t*) const			      
{
  //print 
  printf("Sensor%4d xTF=%+.3e phiTF=%+.3e | Phi:[%5.3f:%5.3f] Z:[%+7.3f:%+7.3f]\n",
	 GetID(),GetXTF(),GetPhiTF(), fPhiMin,fPhiMax, fZMin,fZMax);
}

//______________________________________________________
void AliITSURecoSens::ResetClusters()
{
  // discard old clusters
  fNClusters = 0;
  fFirstClusterId = -1;
}

//______________________________________________________
void AliITSURecoSens::ProcessClusters(Int_t)
{
  // create structures for fast finding
  //
  // to do
}

//______________________________________________________________________________
Int_t AliITSURecoSens::Compare(const TObject* obj)  const
{
  // compare sensor positions
  AliITSURecoSens* copy = (AliITSURecoSens*)obj;
  double phi  = MeanPhiSmall(fPhiMin,fPhiMax);
  double phiC = MeanPhiSmall(copy->fPhiMin,copy->fPhiMax);
  double span = DeltaPhiSmall(fPhiMin,fPhiMax)/2;
  double dPhi = DeltaPhiSmall(phi,phiC);
  //
  // special case to well define 1st raw (closest to 0 from above): wrap around 0/2pi
  if (dPhi>span) return phi<phiC ? -1 : 1;
  //
  double phiT = phi+span;
  BringTo02Pi(phiT);
  //  if (phiT<phiC && OKforPhiMin(phiT,phiC)) return -1;
  if (OKforPhiMin(phiT,phiC)) return -1;
  phiT = phi-span;
  BringTo02Pi(phiT);
  //if (phiT>phiC && OKforPhiMax( phiT,phiC)) return 1;
  if (OKforPhiMax( phiT,phiC)) return 1;
  //
  // sane phi range, check Z
  double dz = (fZMax-fZMin)/2;
  if (fZMax+dz < copy->fZMax) return -1;
  if (fZMin-dz > copy->fZMin) return 1;
  AliError(Form("Same chip compared? %d %d",GetID(),copy->GetID()));
  Print();
  copy->Print();
  return 0;
  //
}

//______________________________________________________________________________
Int_t AliITSURecoSens::CheckCoverage(double phi, double z) const
{
  // check if the sensor contains the impact point phi, z
  // if not, tell in which direction to move. 
  // kLeft, kRight are for smaller/larger angles, kUp,kDown for larger/smaller Z
  //
  int res = 0;
  if      (z<fZMin) res |= kDown;
  else if (z>fZMax) res |= kUp;
  //
  if      (!OKforPhiMin(fPhiMin,phi)) res |= kLeft;
  else if (!OKforPhiMax(fPhiMax,phi)) res |= kRight;
  return res;
}
 AliITSURecoSens.cxx:1
 AliITSURecoSens.cxx:2
 AliITSURecoSens.cxx:3
 AliITSURecoSens.cxx:4
 AliITSURecoSens.cxx:5
 AliITSURecoSens.cxx:6
 AliITSURecoSens.cxx:7
 AliITSURecoSens.cxx:8
 AliITSURecoSens.cxx:9
 AliITSURecoSens.cxx:10
 AliITSURecoSens.cxx:11
 AliITSURecoSens.cxx:12
 AliITSURecoSens.cxx:13
 AliITSURecoSens.cxx:14
 AliITSURecoSens.cxx:15
 AliITSURecoSens.cxx:16
 AliITSURecoSens.cxx:17
 AliITSURecoSens.cxx:18
 AliITSURecoSens.cxx:19
 AliITSURecoSens.cxx:20
 AliITSURecoSens.cxx:21
 AliITSURecoSens.cxx:22
 AliITSURecoSens.cxx:23
 AliITSURecoSens.cxx:24
 AliITSURecoSens.cxx:25
 AliITSURecoSens.cxx:26
 AliITSURecoSens.cxx:27
 AliITSURecoSens.cxx:28
 AliITSURecoSens.cxx:29
 AliITSURecoSens.cxx:30
 AliITSURecoSens.cxx:31
 AliITSURecoSens.cxx:32
 AliITSURecoSens.cxx:33
 AliITSURecoSens.cxx:34
 AliITSURecoSens.cxx:35
 AliITSURecoSens.cxx:36
 AliITSURecoSens.cxx:37
 AliITSURecoSens.cxx:38
 AliITSURecoSens.cxx:39
 AliITSURecoSens.cxx:40
 AliITSURecoSens.cxx:41
 AliITSURecoSens.cxx:42
 AliITSURecoSens.cxx:43
 AliITSURecoSens.cxx:44
 AliITSURecoSens.cxx:45
 AliITSURecoSens.cxx:46
 AliITSURecoSens.cxx:47
 AliITSURecoSens.cxx:48
 AliITSURecoSens.cxx:49
 AliITSURecoSens.cxx:50
 AliITSURecoSens.cxx:51
 AliITSURecoSens.cxx:52
 AliITSURecoSens.cxx:53
 AliITSURecoSens.cxx:54
 AliITSURecoSens.cxx:55
 AliITSURecoSens.cxx:56
 AliITSURecoSens.cxx:57
 AliITSURecoSens.cxx:58
 AliITSURecoSens.cxx:59
 AliITSURecoSens.cxx:60
 AliITSURecoSens.cxx:61
 AliITSURecoSens.cxx:62
 AliITSURecoSens.cxx:63
 AliITSURecoSens.cxx:64
 AliITSURecoSens.cxx:65
 AliITSURecoSens.cxx:66
 AliITSURecoSens.cxx:67
 AliITSURecoSens.cxx:68
 AliITSURecoSens.cxx:69
 AliITSURecoSens.cxx:70
 AliITSURecoSens.cxx:71
 AliITSURecoSens.cxx:72
 AliITSURecoSens.cxx:73
 AliITSURecoSens.cxx:74
 AliITSURecoSens.cxx:75
 AliITSURecoSens.cxx:76
 AliITSURecoSens.cxx:77
 AliITSURecoSens.cxx:78
 AliITSURecoSens.cxx:79
 AliITSURecoSens.cxx:80
 AliITSURecoSens.cxx:81
 AliITSURecoSens.cxx:82
 AliITSURecoSens.cxx:83
 AliITSURecoSens.cxx:84
 AliITSURecoSens.cxx:85
 AliITSURecoSens.cxx:86
 AliITSURecoSens.cxx:87
 AliITSURecoSens.cxx:88
 AliITSURecoSens.cxx:89
 AliITSURecoSens.cxx:90
 AliITSURecoSens.cxx:91
 AliITSURecoSens.cxx:92
 AliITSURecoSens.cxx:93
 AliITSURecoSens.cxx:94
 AliITSURecoSens.cxx:95
 AliITSURecoSens.cxx:96
 AliITSURecoSens.cxx:97
 AliITSURecoSens.cxx:98
 AliITSURecoSens.cxx:99
 AliITSURecoSens.cxx:100
 AliITSURecoSens.cxx:101
 AliITSURecoSens.cxx:102
 AliITSURecoSens.cxx:103
 AliITSURecoSens.cxx:104
 AliITSURecoSens.cxx:105
 AliITSURecoSens.cxx:106
 AliITSURecoSens.cxx:107
 AliITSURecoSens.cxx:108
 AliITSURecoSens.cxx:109
 AliITSURecoSens.cxx:110
 AliITSURecoSens.cxx:111
 AliITSURecoSens.cxx:112
 AliITSURecoSens.cxx:113
 AliITSURecoSens.cxx:114
 AliITSURecoSens.cxx:115
 AliITSURecoSens.cxx:116
 AliITSURecoSens.cxx:117
 AliITSURecoSens.cxx:118
 AliITSURecoSens.cxx:119
 AliITSURecoSens.cxx:120
 AliITSURecoSens.cxx:121
 AliITSURecoSens.cxx:122
 AliITSURecoSens.cxx:123
 AliITSURecoSens.cxx:124
 AliITSURecoSens.cxx:125
 AliITSURecoSens.cxx:126
 AliITSURecoSens.cxx:127
 AliITSURecoSens.cxx:128
 AliITSURecoSens.cxx:129
 AliITSURecoSens.cxx:130
 AliITSURecoSens.cxx:131
 AliITSURecoSens.cxx:132
 AliITSURecoSens.cxx:133
 AliITSURecoSens.cxx:134
 AliITSURecoSens.cxx:135
 AliITSURecoSens.cxx:136
 AliITSURecoSens.cxx:137
 AliITSURecoSens.cxx:138
 AliITSURecoSens.cxx:139
 AliITSURecoSens.cxx:140
 AliITSURecoSens.cxx:141
 AliITSURecoSens.cxx:142