X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TOF%2FAliTOFtracker.cxx;h=9e86a200c0988f7894670f556b31a9738a9f40ac;hb=3f61e9cee1845a88b275d7e23f5c3f7246562431;hp=13f0e1ccb86f964c8535fdf235621164e2e1ffcc;hpb=af61c656de7cc12051d8d980d12cc3b7d1e50885;p=u%2Fmrichter%2FAliRoot.git diff --git a/TOF/AliTOFtracker.cxx b/TOF/AliTOFtracker.cxx index 13f0e1ccb86..9e86a200c09 100644 --- a/TOF/AliTOFtracker.cxx +++ b/TOF/AliTOFtracker.cxx @@ -206,20 +206,95 @@ Int_t AliTOFtracker::PropagateBack(AliESDEvent* event) { 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(t)->GetAlpha(); + Double_t xA = dynamic_cast(t)->GetX(); + Double_t yA = dynamic_cast(t)->GetY(); + Double_t zA = dynamic_cast(t)->GetZ(); + Double_t p1A = dynamic_cast(t)->GetSnp(); + Double_t p2A = dynamic_cast(t)->GetTgl(); + Double_t p3A = dynamic_cast(t)->GetSigned1Pt(); + const Double_t *covA = dynamic_cast(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(t)->GetAlpha(); + Double_t xB = dynamic_cast(t)->GetX(); + Double_t yB = dynamic_cast(t)->GetY(); + Double_t zB = dynamic_cast(t)->GetZ(); + Double_t p1B = dynamic_cast(t)->GetSnp(); + Double_t p2B = dynamic_cast(t)->GetTgl(); + Double_t p3B = dynamic_cast(t)->GetSigned1Pt(); + const Double_t *covB = dynamic_cast(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(), @@ -238,9 +313,9 @@ Int_t AliTOFtracker::PropagateBack(AliESDEvent* event) { 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){ @@ -354,50 +429,66 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ 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; iseedUncheckedAt(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(); @@ -416,13 +507,18 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ for (Int_t k=FindClusterIndex(z-dz); k=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); @@ -448,6 +544,8 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ nc++; } + AliDebug(1,Form(" Number of matchable TOF clusters for the track number %d: %d",iseed,nc)); + //start fine propagation Int_t nStepsDone = 0; @@ -491,8 +589,12 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ Bool_t isInside = kFALSE; for (Int_t istep=0; istep=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]; @@ -518,15 +620,24 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ 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 @@ -538,6 +649,7 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ 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 ) { @@ -555,12 +667,16 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ Float_t xpos=0.; Float_t mindist=1000.; Float_t mindistZ=0.; + Float_t mindistY=0.; for (Int_t iclus= 0; iclusGetLabel())); } - else{ + else { fnbadmatch++; AliDebug(2,Form(" track label bad %5d",trackTOFin->GetLabel())); @@ -624,6 +740,13 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ 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); @@ -654,8 +777,8 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ //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 %f", iseed,mom)); + for (Int_t j=0;jGetStatus() & AliESDtrack::kTIME)==0 )){ + if ( !((t->GetStatus() & AliESDtrack::kTIME)==0 ) ) { fIch=calindex; fToT=tToT; fTime=rawTime; @@ -728,7 +851,8 @@ Int_t AliTOFtracker::LoadClusters(TTree *cTree) { for (Int_t i=0; iUncheckedAt(i); - fClusters[i]=new AliTOFcluster(*c); fN++; +//PH fClusters[i]=new AliTOFcluster(*c); fN++; + fClusters[i]=c; fN++; // Fill Digits QA histos @@ -779,7 +903,7 @@ void AliTOFtracker::UnloadClusters() { //This function unloads TOF clusters //-------------------------------------------------------------------- for (Int_t i=0; i