fSide(-1),
fRod(-1),
fBundle(-1),
- fBeam(-1)
+ fBeam(-1),
+ fRayLength(0)
{
//
// Default constructor
}
-AliTPCLaserTrack::AliTPCLaserTrack(AliTPCLaserTrack <r) :
+AliTPCLaserTrack::AliTPCLaserTrack(const AliTPCLaserTrack <r) :
AliExternalTrackParam(ltr),
fId(ltr.fId),
fSide(ltr.fSide),
fRod(ltr.fRod),
fBundle(ltr.fBundle),
- fBeam(ltr.fBeam)
+ fBeam(ltr.fBeam),
+ fRayLength(ltr.fRayLength)
{
//
// Default constructor
const Int_t bundle, const Int_t beam,
Double_t x, Double_t alpha,
const Double_t param[5],
- const Double_t covar[15]) :
+ const Double_t covar[15], const Float_t rayLength) :
AliExternalTrackParam(x,alpha,param,covar),
fId(id),
fSide(side),
fRod(rod),
fBundle(bundle),
- fBeam(beam)
+ fBeam(beam),
+ fRayLength(rayLength)
{
//
// create laser track from arguments
//
}
+//_____________________________________________________________________
+AliTPCLaserTrack& AliTPCLaserTrack::operator = (const AliTPCLaserTrack &source)
+{
+ //
+ // assignment operator
+ //
+ if (&source == this) return *this;
+ new (this) AliTPCLaserTrack(source);
+
+ return *this;
+}
void AliTPCLaserTrack::LoadTracks()
{
// return its id
//
//
- const Float_t kMaxdphi=0.1;
- const Float_t kMaxdphiP=0.06;
- const Float_t kMaxdz=50;
+ const Float_t kMaxdphi=0.2;
+ const Float_t kMaxdphiP=0.05;
+ const Float_t kMaxdz=40;
if ( !fgArrLaserTracks ) LoadTracks();
TObjArray *arrTracks = GetTracks();
-
-
Double_t lxyz0[3];
Double_t lxyz1[3];
Double_t pxyz0[3];
Double_t pxyz1[3];
track->GetXYZ(lxyz0);
track->GetPxPyPz(pxyz0);
-
+ //
+ Float_t mindist=40; // maxima minimal distance
Int_t id = -1;
+ AliExternalTrackParam* ltr0= (AliExternalTrackParam*)arrTracks->UncheckedAt(0);
for (Int_t itrack=0; itrack<fgkNLaserTracks; itrack++){
AliExternalTrackParam *ltr = (AliExternalTrackParam*)arrTracks->UncheckedAt(itrack);
Double_t * kokot = (Double_t*)ltr->GetParameter();
kokot[4]=-0.0000000001;
//
ltr->GetXYZ(lxyz1);
- if ( (lxyz1[2]>0) && lxyz0[2]<0) continue;
- if ( (lxyz1[2]<0) && lxyz0[2]>0) continue;
if (TMath::Abs(lxyz1[2]-lxyz0[2])>kMaxdz) continue;
// phi position
Double_t phi0 = TMath::ATan2(lxyz0[1],lxyz0[0]);
if (TMath::Abs(phi0-phi1)>kMaxdphi) continue;
// phi direction
ltr->GetPxPyPz(pxyz1);
- Double_t pphi0 = TMath::ATan2(pxyz0[1],pxyz0[0]);
- Double_t pphi1 = TMath::ATan2(pxyz1[1],pxyz1[0]);
- Bool_t phimatch = kFALSE;
+ Float_t distdir = (ltr->GetParameter()[2]-track->GetParameter()[2])*90; //distance at entrance
if (TMath::Abs(ltr->GetParameter()[2]-track->GetParameter()[2])>kMaxdphiP)
continue;
- // if (TMath::Abs(pphi0-pphi1)<kMaxdphiP) phimatch=kTRUE;
-// if (TMath::Abs(pphi0-pphi1-TMath::Pi())<kMaxdphiP) phimatch=kTRUE;
-// if (TMath::Abs(pphi0-pphi1+TMath::Pi())<kMaxdphiP) phimatch=kTRUE;
-// if (!phimatch) continue;
//
- id =itrack;
+ Float_t dist=0;
+ dist+=TMath::Abs(lxyz1[0]-lxyz0[0]);
+ dist+=TMath::Abs(lxyz1[1]-lxyz0[1]);
+ dist+=TMath::Abs(lxyz1[2]-lxyz0[2]);
+ dist+=distdir;
+ //
+ if (id<0) {
+ id =itrack;
+ mindist=dist;
+ ltr0=ltr;
+ continue;
+ }
+ if (dist>mindist) continue;
+ id = itrack;
+ mindist=dist;
+ ltr0=ltr;
}
return id;
}