#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)
{
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)
{
}
AliITSURecoSens& AliITSURecoSens::operator=(const AliITSURecoSens &source)
{
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)
{
fPhiMin = phiMn;
fPhiMax = phiMx;
fZMin = zMn;
fZMax = zMx;
}
void AliITSURecoSens::Print(Option_t*) const
{
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()
{
fNClusters = 0;
fFirstClusterId = -1;
}
void AliITSURecoSens::ProcessClusters(Int_t)
{
}
Int_t AliITSURecoSens::Compare(const TObject* obj) const
{
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);
if (dPhi>span) return phi<phiC ? -1 : 1;
double phiT = phi+span;
BringTo02Pi(phiT);
if (OKforPhiMin(phiT,phiC)) return -1;
phiT = phi-span;
BringTo02Pi(phiT);
if (OKforPhiMax( phiT,phiC)) return 1;
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
{
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;
}