t->SetTOFsignalToT(seed->GetTOFsignalToT());
t->SetTOFsignalRaw(seed->GetTOFsignalRaw());
t->SetTOFsignalDz(seed->GetTOFsignalDz());
+ t->SetTOFsignalDx(seed->GetTOFsignalDx());
t->SetTOFCalChannel(seed->GetTOFCalChannel());
Int_t tlab[3]; seed->GetTOFLabel(tlab);
t->SetTOFLabel(tlab);
- AliTOFtrack *track = new AliTOFtrack(*seed);
- t->UpdateTrackParams(track,AliESDtrack::kTOFout); // to be checked - AdC
- delete track;
- Double_t time[10]; t->GetIntegratedTimes(time);
- AliDebug(1,Form(" %6d %f %f %f %f %6d %3d %f %f %f %f %f %f",
+ Double_t alphaA = dynamic_cast<AliExternalTrackParam*>(t)->GetAlpha();
+ Double_t xA = dynamic_cast<AliExternalTrackParam*>(t)->GetX();
+ Double_t yA = dynamic_cast<AliExternalTrackParam*>(t)->GetY();
+ Double_t zA = dynamic_cast<AliExternalTrackParam*>(t)->GetZ();
+ Double_t p1A = dynamic_cast<AliExternalTrackParam*>(t)->GetSnp();
+ Double_t p2A = dynamic_cast<AliExternalTrackParam*>(t)->GetTgl();
+ Double_t p3A = dynamic_cast<AliExternalTrackParam*>(t)->GetSigned1Pt();
+ const Double_t *covA = dynamic_cast<AliExternalTrackParam*>(t)->GetCovariance();
+
+ // Make attention, please:
+ // AliESDtrack::fTOFInfo array does not be stored in the AliESDs.root file
+ // it is there only for a check during the reconstruction step.
+ Float_t info[10]; seed->GetTOFInfo(info);
+ t->SetTOFInfo(info);
+ AliDebug(3,Form(" distance=%f; residual in the pad reference frame: dX=%f, dZ=%f", info[0],info[1],info[2]));
+
+ // Check done:
+ // by calling the AliESDtrack::UpdateTrackParams,
+ // the current track parameters are changed
+ // and it could cause refit problems.
+ // We need to update only the following track parameters:
+ // the track length and expected times.
+ // Removed AliESDtrack::UpdateTrackParams call
+ // Called AliESDtrack::SetIntegratedTimes(...) and
+ // AliESDtrack::SetIntegratedLength() routines.
+ /*
+ AliTOFtrack *track = new AliTOFtrack(*seed);
+ t->UpdateTrackParams(track,AliESDtrack::kTOFout); // to be checked - AdC
+ delete track;
+ Double_t time[10]; t->GetIntegratedTimes(time);
+ */
+
+ Double_t time[10]; seed->GetIntegratedTimes(time);
+ t->SetIntegratedTimes(time);
+
+ Double_t length = seed->GetIntegratedLength();
+ t->SetIntegratedLength(length);
+
+ Double_t alphaB = dynamic_cast<AliExternalTrackParam*>(t)->GetAlpha();
+ Double_t xB = dynamic_cast<AliExternalTrackParam*>(t)->GetX();
+ Double_t yB = dynamic_cast<AliExternalTrackParam*>(t)->GetY();
+ Double_t zB = dynamic_cast<AliExternalTrackParam*>(t)->GetZ();
+ Double_t p1B = dynamic_cast<AliExternalTrackParam*>(t)->GetSnp();
+ Double_t p2B = dynamic_cast<AliExternalTrackParam*>(t)->GetTgl();
+ Double_t p3B = dynamic_cast<AliExternalTrackParam*>(t)->GetSigned1Pt();
+ const Double_t *covB = dynamic_cast<AliExternalTrackParam*>(t)->GetCovariance();
+ AliDebug(2,"Track params -now(before)-:");
+ AliDebug(2,Form(" X: %f(%f), Y: %f(%f), Z: %f(%f) --- alpha: %f(%f)",
+ xB,xA,
+ yB,yA,
+ zB,zA,
+ alphaB,alphaA));
+ AliDebug(2,Form(" p1: %f(%f), p2: %f(%f), p3: %f(%f)",
+ p1B,p1A,
+ p2B,p2A,
+ p3B,p3A));
+ AliDebug(2,Form(" cov1: %f(%f), cov2: %f(%f), cov3: %f(%f)"
+ " cov4: %f(%f), cov5: %f(%f), cov6: %f(%f)"
+ " cov7: %f(%f), cov8: %f(%f), cov9: %f(%f)"
+ " cov10: %f(%f), cov11: %f(%f), cov12: %f(%f)"
+ " cov13: %f(%f), cov14: %f(%f), cov15: %f(%f)",
+ covB[0],covA[0],
+ covB[1],covA[1],
+ covB[2],covA[2],
+ covB[3],covA[3],
+ covB[4],covA[4],
+ covB[5],covA[5],
+ covB[6],covA[6],
+ covB[7],covA[7],
+ covB[8],covA[8],
+ covB[9],covA[9],
+ covB[10],covA[10],
+ covB[11],covA[11],
+ covB[12],covA[12],
+ covB[13],covA[13],
+ covB[14],covA[14]
+ ));
+ AliDebug(3,Form(" TOF params: %6d %f %f %f %f %f %6d %3d %f %f %f %f %f %f",
i,
t->GetTOFsignalRaw(),
t->GetTOFsignal(),
t->GetTOFsignalToT(),
t->GetTOFsignalDz(),
+ t->GetTOFsignalDx(),
t->GetTOFCalChannel(),
t->GetTOFcluster(),
t->GetIntegratedLength(),
Bool_t timeZeroFromT0 = fRecoParam->GetTimeZerofromT0();
Bool_t timeZeroFromTOF = fRecoParam->GetTimeZerofromTOF();
- AliDebug(1,Form("Use Time Zero?: %d",usetimeZero));
- AliDebug(1,Form("Time Zero from T0? : %d",timeZeroFromT0));
- AliDebug(1,Form("Time Zero From TOF? : %d",timeZeroFromTOF));
+ AliDebug(2,Form("Use Time Zero?: %d",usetimeZero));
+ AliDebug(2,Form("Time Zero from T0? : %d",timeZeroFromT0));
+ AliDebug(2,Form("Time Zero From TOF? : %d",timeZeroFromTOF));
if(usetimeZero){
if(timeZeroFromT0){
AliDebug(1,Form("TOF Max Chi2: %f",maxChi2));
AliDebug(1,Form("Time Walk Correction? : %d",timeWalkCorr));
}
- //Match ESD tracks to clusters in TOF
+ //Match ESD tracks to clusters in TOF
// Get the number of propagation steps
-
Int_t nSteps=(Int_t)(detDepth/stepSize);
//PH Arrays (moved outside of the loop)
-
Float_t * trackPos[4];
for (Int_t ii=0; ii<4; ii++) trackPos[ii] = new Float_t[nSteps];
Int_t * clind = new Int_t[fN];
+ // Some init
+ const Int_t kNfoundMax = 10000; // related to nSteps value
+ Int_t index[kNfoundMax];
+ Float_t dist[kNfoundMax];
+ Float_t distZ[kNfoundMax];
+ Float_t distY[kNfoundMax]; // delta(rhoXphi) // AdC
+ Float_t cxpos[kNfoundMax];
+ Float_t crecL[kNfoundMax];
+ const Int_t kNclusterMax = 1000; // related to fN value
+ TGeoHMatrix global[kNclusterMax];
+
//The matching loop
for (Int_t iseed=0; iseed<fNseedsTOF; iseed++) {
+ for (Int_t ii=0; ii<kNfoundMax; ii++) {
+ index[ii] = -1;
+ dist[ii] = 9999.;
+ distZ[ii] = 9999.;
+ distY[ii] = 9999.;
+ cxpos[ii] = 9999.;
+ crecL[ii] = 0.;
+ }
+ for (Int_t ii=0; ii<kNclusterMax; ii++)
+ global[ii] = 0x0;
+
AliTOFtrack *track =(AliTOFtrack*)fTracks->UncheckedAt(iseed);
AliESDtrack *t =(AliESDtrack*)fSeeds->UncheckedAt(track->GetSeedIndex());
//if ( t->GetTOFsignal()>0. ) continue;
if ( (t->GetStatus()&AliESDtrack::kTOFout)!=0 ) continue;
AliTOFtrack *trackTOFin =new AliTOFtrack(*track);
- // Some init
-
- Int_t index[10000];
- Float_t dist[10000];
- Float_t distZ[10000];
- Float_t cxpos[10000];
- Float_t crecL[10000];
- TGeoHMatrix global[1000];
-
// Determine a window around the track
-
Double_t x,par[5];
trackTOFin->GetExternalParameters(x,par);
Double_t cov[15];
trackTOFin->GetExternalCovariance(cov);
+ if (cov[0]<0. || cov[2]<0.) {
+ AliWarning(Form("Very strange track (%d)! At least one of its covariance matrix diagonal elements is negative!",iseed));
+ //delete trackTOFin;
+ //continue;
+ }
+
Double_t dphi=
scaleFact*
- ((5*TMath::Sqrt(cov[0]) + 0.5*dY + 2.5*TMath::Abs(par[2]))/sensRadius);
+ ((5*TMath::Sqrt(TMath::Abs(cov[0])) + 0.5*dY + 2.5*TMath::Abs(par[2]))/sensRadius);
Double_t dz=
scaleFact*
- (5*TMath::Sqrt(cov[2]) + 0.5*dZ + 2.5*TMath::Abs(par[3]));
+ (5*TMath::Sqrt(TMath::Abs(cov[2])) + 0.5*dZ + 2.5*TMath::Abs(par[3]));
Double_t phi=TMath::ATan2(par[0],x) + trackTOFin->GetAlpha();
if (phi<-TMath::Pi())phi+=2*TMath::Pi();
for (Int_t k=FindClusterIndex(z-dz); k<fN; k++) {
+ if (nc>=kNclusterMax) {
+ AliWarning("No more matchable clusters can be stored! Please, increase the corresponding vectors size.");
+ break;
+ }
+
AliTOFcluster *c=fClusters[k];
if (c->GetZ() > z+dz) break;
if (c->IsUsed()) continue;
if (!c->GetStatus()) {
- AliDebug(1,"Cluster in channel declared bad!");
- continue; // skip bad channels as declared in OCDB
+ AliDebug(1,"Cluster in channel declared bad!");
+ continue; // skip bad channels as declared in OCDB
}
Double_t dph=TMath::Abs(c->GetPhi()-phi);
nc++;
}
+ AliDebug(1,Form(" Number of matchable TOF clusters for the track number %d: %d",iseed,nc));
+
//start fine propagation
Int_t nStepsDone = 0;
Bool_t isInside = kFALSE;
for (Int_t istep=0; istep<nStepsDone; istep++) {
- Float_t ctrackPos[3];
+ if (nfound>=kNfoundMax) {
+ AliWarning("No more track positions can be stored! Please, increase the corresponding vectors size.");
+ break;
+ }
+ Float_t ctrackPos[3];
ctrackPos[0] = trackPos[0][istep];
ctrackPos[1] = trackPos[1][istep];
ctrackPos[2] = trackPos[2][istep];
dist[nfound] = TMath::Sqrt(dist3d[0]*dist3d[0] +
dist3d[1]*dist3d[1] +
dist3d[2]*dist3d[2]);
- AliDebug(1,Form(" dist3dLoc[0] = %f, dist3dLoc[1] = %f, dist3dLoc[2] = %f ",
+ AliDebug(2,Form(" dist3dLoc[0] = %f, dist3dLoc[1] = %f, dist3dLoc[2] = %f ",
dist3d[0],dist3d[1],dist3d[2]));
distZ[nfound] = dist3d[2]; // Z distance in the RF of the
// hit pad closest to the
// reconstructed track
+ distY[nfound] = dist3d[0]; // X distance in the RF of the
+ // hit pad closest to the
+ // reconstructed track
+ // It corresponds to Y coordinate
+ // in tracking RF
+
- AliDebug(1,Form(" dist3dLoc[2] = %f --- distZ[%d] = %f",
+ AliDebug(2,Form(" dist3dLoc[0] = %f --- distY[%d] = %f",
+ dist3d[0],nfound,distY[nfound]));
+ AliDebug(2,Form(" dist3dLoc[2] = %f --- distZ[%d] = %f",
dist3d[2],nfound,distZ[nfound]));
+
crecL[nfound] = trackPos[3][istep];
index[nfound] = clind[i]; // store cluster id
cxpos[nfound] = AliTOFGeometry::RinTOF()+istep*0.1; //store prop.radius
if(accept &&!mLastStep)break;
} //end for on the steps
+ AliDebug(1,Form(" Number of track points for the track number %d: %d",iseed,nfound));
if (nfound == 0 ) {
Float_t xpos=0.;
Float_t mindist=1000.;
Float_t mindistZ=0.;
+ Float_t mindistY=0.;
for (Int_t iclus= 0; iclus<nfound;iclus++){
if (dist[iclus]< mindist){
mindist = dist[iclus];
mindistZ = distZ[iclus]; // Z distance in the RF of the hit
// pad closest to the reconstructed
// track
+ mindistY = distY[iclus]; // Y distance in the RF of the hit
+ // pad closest to the reconstructed
+ // track
xpos = cxpos[iclus];
idclus =index[iclus];
recL=crecL[iclus]+corrLen*0.5;
AliDebug(2,Form(" track label good %5d",trackTOFin->GetLabel()));
}
- else{
+ else {
fnbadmatch++;
AliDebug(2,Form(" track label bad %5d",trackTOFin->GetLabel()));
Float_t rawTime=AliTOFGeometry::TdcBinWidth()*c->GetTDCRAW()+kTimeOffset; // RAW time,in ps
t->SetTOFsignalRaw(rawTime);
t->SetTOFsignalDz(mindistZ);
+ t->SetTOFsignalDx(mindistY);
+
+ Float_t info[10] = {mindist,mindistY,mindistZ,
+ 0.,0.,0.,0.,0.,0.,0.};
+ t->SetTOFInfo(info);
+ AliDebug(2,Form(" distance=%f; residual in the pad reference frame: dX=%f, dZ=%f", info[0],info[1],info[2]));
+
Int_t ind[5];
ind[0]=c->GetDetInd(0);
//Tracking info
Double_t time[AliPID::kSPECIES]; t->GetIntegratedTimes(time); // in ps
Double_t mom=t->GetP();
- AliDebug(1,Form(" Momentum for track %d -> %f", iseed,mom));
- for(Int_t j=0;j<AliPID::kSPECIES;j++){
+ AliDebug(2,Form(" Momentum for track %d -> %f", iseed,mom));
+ for (Int_t j=0;j<AliPID::kSPECIES;j++) {
Double_t mass=AliPID::ParticleMass(j);
time[j]+=(recL-trackPos[3][0])/kSpeedOfLight*TMath::Sqrt(mom*mom+mass*mass)/mom;
}
// Fill Tree for on-the-fly offline Calibration
- if ( !((t->GetStatus() & AliESDtrack::kTIME)==0 )){
+ if ( !((t->GetStatus() & AliESDtrack::kTIME)==0 ) ) {
fIch=calindex;
fToT=tToT;
fTime=rawTime;
for (Int_t i=0; i<nc; i++) {
AliTOFcluster *c=(AliTOFcluster*)clusters->UncheckedAt(i);
- fClusters[i]=new AliTOFcluster(*c); fN++;
+//PH fClusters[i]=new AliTOFcluster(*c); fN++;
+ fClusters[i]=c; fN++;
// Fill Digits QA histos
//This function unloads TOF clusters
//--------------------------------------------------------------------
for (Int_t i=0; i<fN; i++) {
- delete fClusters[i];
+//PH delete fClusters[i];
fClusters[i] = 0x0;
}
fN=0;