//
const Double_t AliTPCTrackHitsV2::fgkPrecision=1e-6; //precision
const Double_t AliTPCTrackHitsV2::fgkPrecision2=1e-20; //precision
+const Double_t AliTPCTrackHitsV2::fgkTimePrecision=20.e-9; //hit time precision
{hit.Copy(*this);}
AliTPCTempHitInfoV2& operator = (const AliTPCTempHitInfoV2 &hit)
{hit.Copy(*this); return (*this);}
- void NewParam(Double_t r, Double_t z, Double_t fi, Int_t q);
- void SetHit(Double_t r, Double_t z, Double_t fi, Int_t q);
+ void NewParam(Double_t r, Double_t z, Double_t fi, Int_t q, Float_t time);
+ void SetHit(Double_t r, Double_t z, Double_t fi, Int_t q, Float_t time);
Double_t * GetPosition(Int_t index){return &fPositionStack[index*3];}
void UpdateParam(Double_t maxdelta); //recal
void Fit2(Double_t fSumY, Double_t fSumYX, Double_t fSumYX2,
Double_t fOldR; //previos r
Double_t fPositionStack[3*kStackSize]; //position stack
UInt_t fQStack[kStackSize]; //Q stack
+ Float_t fTimeStack[kStackSize]; //time stack
UInt_t fStackIndex; //current stack index
// UInt_t fInfoIndex; //current track info index
UInt_t fParamIndex; //current track parameters index
}
-void AliTPCTempHitInfoV2::NewParam(Double_t r, Double_t z, Double_t fi, Int_t q)
+void AliTPCTempHitInfoV2::NewParam(Double_t r, Double_t z, Double_t fi, Int_t q, Float_t time)
{
//
//reset stack and sum parameters
fParam->fAd = 0.;
fParam->fTheta =0.;
fParam->fThetaD =0.;
- SetHit(r,z,fi,q);
+ SetHit(r,z,fi,q,time);
}
-void AliTPCTempHitInfoV2::SetHit(Double_t r, Double_t z, Double_t fi, Int_t q)
+void AliTPCTempHitInfoV2::SetHit(Double_t r, Double_t z, Double_t fi, Int_t q, Float_t time)
{
//
//add hit to the stack
f[1] = z;
f[2] = fi;
fQStack[fStackIndex]=q;
+ fTimeStack[fStackIndex]=time;
if (fStackIndex==0) return;
Double_t dr = (r-fParam->fR);
if (TMath::Abs(dr)<AliTPCTrackHitsV2::fgkPrecision) dr =AliTPCTrackHitsV2::fgkPrecision;
fgCounter2++;
fHitDistance=0;
fCharge=0;
+ fTime=0;
fNHits=0;
}
delete[]fCharge;
fCharge =0;
}
+ if (fTime){
+ delete[]fTime;
+ fTime =0;
+ }
}
void AliTPCTrackHitsV2::AddHitKartez(Int_t volumeID, Int_t trackID, Double_t x,
- Double_t y, Double_t z,Int_t q)
+ Double_t y, Double_t z,Int_t q, Float_t time)
{
//
// add hit to the container - it add hit at the end - input in global coordinata
Double_t r = TMath::Sqrt(x*x+y*y);
Double_t fi = TMath::ACos(x/r);
if (y<0) fi*=-1.;
- AddHit(volumeID,trackID,r,z,fi,q);
+ AddHit(volumeID,trackID,r,z,fi,q,time);
}
void AliTPCTrackHitsV2::AddHit(Int_t volumeID, Int_t trackID,
- Double_t r, Double_t z, Double_t fi, Int_t q)
+ Double_t r, Double_t z, Double_t fi, Int_t q, Float_t time)
{
//
// Adding one hit
AddVolume(volumeID);
//
fTempInfo->fParamIndex = 0;
- fTempInfo->NewParam(r,z,fi,q);
+ fTempInfo->NewParam(r,z,fi,q,time);
return;
}
fTempInfo->fParam = new((*fArray)[fTempInfo->fParamIndex]) AliTrackHitsParamV2;
fTempInfo->fParam->fVolumeID = volumeID;
fTempInfo->fParam->fTrackID = trackID;
- fTempInfo->NewParam(r,z,fi,q);
+ fTempInfo->NewParam(r,z,fi,q,time);
return;
}
diff=kTRUE;
else{ // if precision OK
fTempInfo->fStackIndex++;
- fTempInfo->SetHit(r,z,fi,q);
+ fTempInfo->SetHit(r,z,fi,q,time);
return;
}
fTempInfo->fParam = new((*fArray)[fTempInfo->fParamIndex]) AliTrackHitsParamV2;
fTempInfo->fParam->fVolumeID = volumeID;
fTempInfo->fParam->fTrackID = trackID;
- fTempInfo->NewParam(r,z,fi,q);
+ fTempInfo->NewParam(r,z,fi,q,time);
}
else{
fTempInfo->fStackIndex++;
- fTempInfo->SetHit(r,z,fi,q);
+ fTempInfo->SetHit(r,z,fi,q,time);
}
}
param.fNHits = fTempInfo->fStackIndex+1;
if (param.fHitDistance) delete []param.fHitDistance;
if (param.fCharge) delete []param.fCharge;
+ if (param.fTime) delete []param.fTime;
param.fHitDistance = new Short_t[param.fNHits];
param.fCharge = new Short_t[param.fNHits];
+ param.fTime = new Short_t[param.fNHits];
for (i=0; i <= fTempInfo->fStackIndex; i++){
param.fHitDistance[i]= Short_t(TMath::Nint(dl/fStep));
param.fCharge[i]= Short_t(fTempInfo->fQStack[i]);
+ param.fTime[i]= Short_t(fTempInfo->fTimeStack[i]/AliTPCTrackHitsV2::fgkTimePrecision);
}
if (i<=fTempInfo->fStackIndex){ //if previous iteration not succesfull
Short_t * charge = new Short_t[i];
+ Short_t * time = new Short_t[i];
Short_t * hitDistance= new Short_t[i];
memcpy(charge, param.fCharge,sizeof(Short_t)*i);
+ memcpy(time, param.fTime,sizeof(Short_t)*i);
memcpy(hitDistance, param.fHitDistance,sizeof(Short_t)*i);
delete [] param.fCharge;
+ delete [] param.fTime;
delete [] param.fHitDistance;
param.fNHits= i;
param.fCharge = charge;
+ param.fTime = time;
param.fHitDistance = hitDistance;
//
Int_t volumeID = fTempInfo->fParam->fVolumeID;
fTempInfo->fParam = new((*fArray)[fTempInfo->fParamIndex]) AliTrackHitsParamV2;
Double_t * p = fTempInfo->GetPosition(i);
UInt_t index2 = fTempInfo->fStackIndex;
- fTempInfo->NewParam(p[0],p[1],p[2],fTempInfo->fQStack[i]);
+ fTempInfo->NewParam(p[0],p[1],p[2],fTempInfo->fQStack[i],fTempInfo->fTimeStack[i]);
fTempInfo->fParam->fVolumeID= volumeID;
fTempInfo->fParam->fTrackID= trackID;
if (i+1<=index2) FlushHitStack2(i+1,index2);
//
Double_t * positionstack = new Double_t[3*(index2-index1+1)];
UInt_t * qstack = new UInt_t[index2-index1+1];
+ Float_t * timestack = new Float_t[index2-index1+1];
memcpy(positionstack, &fTempInfo->fPositionStack[3*index1],
(3*(index2-index1+1))*sizeof(Double_t));
memcpy(qstack, &fTempInfo->fQStack[index1],(index2-index1+1)*sizeof(UInt_t));
+ memcpy(timestack, &fTempInfo->fTimeStack[index1],(index2-index1+1)*sizeof(Float_t));
Double_t *p = positionstack;
for (Int_t j=0; j<=index2-index1;j++){
fTempInfo->fStackIndex++;
- fTempInfo->SetHit(p[3*j+0],p[3*j+1],p[3*j+2],qstack[j]);
+ fTempInfo->SetHit(p[3*j+0],p[3*j+1],p[3*j+2],qstack[j],timestack[j]);
}
delete []positionstack;
delete []qstack;
+ delete []timestack;
}
((AliTPChit*)fHit)->SetY(param->fR*TMath::Sin(param->fFi));
((AliTPChit*)fHit)->SetZ(param->fZ);
((AliTPChit*)fHit)->fQ = param->fCharge[0];
+ ((AliTPChit*)fHit)->fTime = (Float_t)(param->fTime[0]*AliTPCTrackHitsV2::fgkTimePrecision);
/*
fCurrentHit->fHit.fSector = param->fVolumeID;
fCurrentHit->fHit.SetTrack(param->fTrackID);
fCurrentHit->fHit.SetY(param->fR*TMath::Sin(param->fFi));
fCurrentHit->fHit.SetZ(param->fZ);
fCurrentHit->fHit.fQ = param->fCharge[0];
+ fCurrentHit->fHit.fTime = (Float_t)(param->fTime[0]*AliTPCTrackHitsV2::fgkTimePrecision);
*/
fCurrentHit->fR = param->fR;
Double_t z = param->fZ + (param->fTheta*dR+param->fThetaD*dR*dR);
/*
fCurrentHit->fHit.fQ = param->fCharge[fCurrentHit->fStackIndex];
+ fCurrentHit->fHit.fTime = (Float_t)(param->fTime[fCurrentHit->fStackIndex]*AliTPCTrackHitsV2::fgkTimePrecision);
fCurrentHit->fHit.SetX(fCurrentHit->fR*TMath::Cos(fi));
fCurrentHit->fHit.SetY(fCurrentHit->fR*TMath::Sin(fi));
fCurrentHit->fHit.SetZ(z);
fCurrentHit->fHit.SetTrack(param->fTrackID);
*/
((AliTPChit*)fHit)->fQ = param->fCharge[fCurrentHit->fStackIndex];
+ ((AliTPChit*)fHit)->fTime = (Float_t)(param->fTime[fCurrentHit->fStackIndex]*AliTPCTrackHitsV2::fgkTimePrecision);
((AliTPChit*)fHit)->SetX(fCurrentHit->fR*TMath::Cos(fi));
((AliTPChit*)fHit)->SetY(fCurrentHit->fR*TMath::Sin(fi));
((AliTPChit*)fHit)->SetZ(z);