X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TOF%2FAliTOFtracker.cxx;h=a711dcf26577a38ac6d7675433d683eab77c6145;hb=3d4dc3e222b98f34c8819ac10455485f4d3b1fcb;hp=8407e05be6bde4b0fef9862e51bf423cc05e2f2e;hpb=de40f9c164af24b8045f4348e22c45f2f6dd8acf;p=u%2Fmrichter%2FAliRoot.git diff --git a/TOF/AliTOFtracker.cxx b/TOF/AliTOFtracker.cxx index 8407e05be6b..a711dcf2657 100644 --- a/TOF/AliTOFtracker.cxx +++ b/TOF/AliTOFtracker.cxx @@ -90,15 +90,15 @@ AliTOFtracker::AliTOFtracker(): fExpTimePi(-1.), fExpTimeKa(-1.), fExpTimePr(-1.) - { +{ //AliTOFtracker main Ctor - - for (Int_t ii=0; iiDelete(); - } + for (Int_t ii=0; iiDelete(); } //_____________________________________________________________________________ @@ -334,6 +332,7 @@ void AliTOFtracker::CollectESD() { //prepare the set of ESD tracks to be matched to clusters in TOF Int_t seedsTOF1=0; + Int_t seedsTOF3=0; Int_t seedsTOF2=0; TClonesArray &aTOFTrack = *fTracks; @@ -345,26 +344,57 @@ void AliTOFtracker::CollectESD() { AliTOFtrack *track = new AliTOFtrack(*t); // New Float_t x = (Float_t)track->GetX(); //New - // TRD 'good' tracks, already propagated at 371 cm - if ( ( (t->GetStatus()&AliESDtrack::kTRDout)!=0 ) && - ( x >= AliTOFGeometry::Rmin() ) ) { - if ( track->PropagateToInnerTOF() ) { + // TRD 'good' tracks + if ( ( (t->GetStatus()&AliESDtrack::kTRDout)!=0 ) ) { - AliDebug(1,Form(" TRD propagated track till rho = %fcm." - " And then the track has been propagated till rho = %fcm.", - x, (Float_t)track->GetX())); + AliDebug(1,Form(" Before propagation till inner TOF radius, ESDtrackLength=%f, TOFtrackLength=%f",t->GetIntegratedLength(),track->GetIntegratedLength())); + + // TRD 'good' tracks, already propagated at 371 cm + if( x >= AliTOFGeometry::Rmin() ) { + + if ( track->PropagateToInnerTOF() ) { + + AliDebug(1,Form(" TRD propagated track till rho = %fcm." + " And then the track has been propagated till rho = %fcm.", + x, (Float_t)track->GetX())); + + track->SetSeedIndex(i); + t->UpdateTrackParams(track,AliESDtrack::kTOFin); + new(aTOFTrack[fNseedsTOF]) AliTOFtrack(*track); + fNseedsTOF++; + seedsTOF1++; + + AliDebug(1,Form(" After propagation till inner TOF radius, ESDtrackLength=%f, TOFtrackLength=%f",t->GetIntegratedLength(),track->GetIntegratedLength())); + } + delete track; - track->SetSeedIndex(i); - t->UpdateTrackParams(track,AliESDtrack::kTOFin); - new(aTOFTrack[fNseedsTOF]) AliTOFtrack(*track); - fNseedsTOF++; - seedsTOF1++; } - delete track; + else { // TRD 'good' tracks, propagated rho<371cm + + if ( track->PropagateToInnerTOF() ) { + + AliDebug(1,Form(" TRD propagated track till rho = %fcm." + " And then the track has been propagated till rho = %fcm.", + x, (Float_t)track->GetX())); + + track->SetSeedIndex(i); + t->UpdateTrackParams(track,AliESDtrack::kTOFin); + new(aTOFTrack[fNseedsTOF]) AliTOFtrack(*track); + fNseedsTOF++; + seedsTOF3++; + + AliDebug(1,Form(" After propagation till inner TOF radius, ESDtrackLength=%f, TOFtrackLength=%f",t->GetIntegratedLength(),track->GetIntegratedLength())); + } + delete track; + + } + //delete track; } - // Propagate the rest of TPCbp - else { + else { // Propagate the rest of TPCbp + + AliDebug(1,Form(" Before propagation till inner TOF radius, ESDtrackLength=%f, TOFtrackLength=%f",t->GetIntegratedLength(),track->GetIntegratedLength())); + if ( track->PropagateToInnerTOF() ) { AliDebug(1,Form(" TPC propagated track till rho = %fcm." @@ -376,25 +406,27 @@ void AliTOFtracker::CollectESD() { new(aTOFTrack[fNseedsTOF]) AliTOFtrack(*track); fNseedsTOF++; seedsTOF2++; + + AliDebug(1,Form(" After propagation till inner TOF radius, ESDtrackLength=%f, TOFtrackLength=%f",t->GetIntegratedLength(),track->GetIntegratedLength())); } delete track; } } - AliInfo(Form("Number of TOF seeds = %d (Type 1 = %d, Type 2 = %d)",fNseedsTOF,seedsTOF1,seedsTOF2)); + AliInfo(Form("Number of TOF seeds = %d (kTRDout371 = %d, kTRDoutLess371 = %d, !kTRDout = %d)",fNseedsTOF,seedsTOF1,seedsTOF3,seedsTOF2)); // Sort according uncertainties on track position fTracks->Sort(); } + //_________________________________________________________________________ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ - // Parameters used/regulating the reconstruction - static Float_t corrLen=0.75; - static Float_t detDepth=15.3; + //static Float_t corrLen=0.;//0.75; + static Float_t detDepth=18.; static Float_t padDepth=0.5; const Float_t kSpeedOfLight= 2.99792458e-2; // speed of light [cm/ps] @@ -405,10 +437,15 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ Float_t sensRadius = fkRecoParam->GetSensRadius(); Float_t stepSize = fkRecoParam->GetStepSize(); - Float_t scaleFact = fkRecoParam->GetWindowScaleFact(); + Float_t scaleFact = fkRecoParam->GetWindowScaleFact(); Float_t dyMax=fkRecoParam->GetWindowSizeMaxY(); Float_t dzMax=fkRecoParam->GetWindowSizeMaxZ(); Float_t dCut=fkRecoParam->GetDistanceCut(); + if (dCut==3. && fNseedsTOF<=10) { + dCut=10.; + AliInfo(Form("Matching window=%f, since low multiplicity event (fNseedsTOF=%d)", + dCut, fNseedsTOF)); + } Double_t maxChi2=fkRecoParam->GetMaxChi2TRD(); Bool_t timeWalkCorr = fkRecoParam->GetTimeWalkCorr(); if(!mLastStep){ @@ -427,6 +464,7 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ // Get the number of propagation steps Int_t nSteps=(Int_t)(detDepth/stepSize); + AliDebug(1,Form(" Number of steps to be done %d",nSteps)); //PH Arrays (moved outside of the loop) Float_t * trackPos[4]; @@ -440,7 +478,7 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ //The matching loop for (Int_t iseed=0; iseedClear(); + fTOFtrackPoints->Delete(); for (Int_t ii=0; iiPropagateTo(xs))) break; - Bool_t skip=kFALSE; - Double_t ysect=trackTOFin->GetYat(xs,skip); - if (skip) break; + // ...and then, if necessary, rotate the track + Double_t ymax = xs*TMath::Tan(0.5*AliTOFGeometry::GetAlpha()); + Double_t ysect = trackTOFin->GetY(); if (ysect > ymax) { - if (!trackTOFin->Rotate(AliTOFGeometry::GetAlpha())) { - break; - } + if (!(trackTOFin->Rotate(AliTOFGeometry::GetAlpha()))) break; } else if (ysect <-ymax) { - if (!trackTOFin->Rotate(-AliTOFGeometry::GetAlpha())) { - break; - } - } - - if(!trackTOFin->PropagateTo(xs)) { - break; + if (!(trackTOFin->Rotate(-AliTOFGeometry::GetAlpha()))) break; } nStepsDone++; + AliDebug(2,Form(" current step %d (%d) - nStepsDone=%d",istep,nSteps,nStepsDone)); // store the running point (Globalrf) - fine propagation Double_t r[3]; trackTOFin->GetXYZ(r); - trackPos[0][istep]= (Float_t) r[0]; - trackPos[1][istep]= (Float_t) r[1]; - trackPos[2][istep]= (Float_t) r[2]; - trackPos[3][istep]= trackTOFin->GetIntegratedLength(); + trackPos[0][nStepsDone-1]= (Float_t) r[0]; + trackPos[1][nStepsDone-1]= (Float_t) r[1]; + trackPos[2][nStepsDone-1]= (Float_t) r[2]; + trackPos[3][nStepsDone-1]= trackTOFin->GetIntegratedLength(); } +#if 0 + /*****************/ + /**** OLD CODE ***/ + /*****************/ + Int_t nfound = 0; Bool_t accept = kFALSE; Bool_t isInside = kFALSE; @@ -574,7 +617,7 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ Float_t dist3d[3]; accept = kFALSE; for (Int_t i=0; iIsInsideThePad(global[i],ctrackPos,dist3d); + isInside = fGeom->IsInsideThePad((TGeoHMatrix*)(&global[i]),ctrackPos,dist3d); if ( mLastStep ) { Float_t yLoc = dist3d[1]; @@ -589,8 +632,8 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ fTOFtrackPoints->AddLast(new AliTOFtrackPoint(clind[i], TMath::Sqrt(dist3d[0]*dist3d[0] + dist3d[1]*dist3d[1] + dist3d[2]*dist3d[2]), - dist3d[2], dist3d[0], - AliTOFGeometry::RinTOF()+istep*0.1,trackPos[3][istep])); + dist3d[2],dist3d[0],dist3d[1], + AliTOFGeometry::RinTOF()+istep*stepSize,trackPos[3][istep])); AliDebug(2,Form(" dist3dLoc[0] = %f, dist3dLoc[1] = %f, dist3dLoc[2] = %f ",dist3d[0],dist3d[1],dist3d[2])); nfound++; @@ -601,8 +644,110 @@ 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)); + /*****************/ + /**** OLD CODE ***/ + /*****************/ +#endif + + AliDebug(1,Form(" Number of steps done for the track number %d: %d",iseed,nStepsDone)); + + if ( nStepsDone == 0 ) { + fnunmatch++; + delete trackTOFin; + continue; + } + /*****************/ + /**** NEW CODE ***/ + /*****************/ + + Int_t nfound = 0; + Bool_t accept = kFALSE; + Bool_t isInside = kFALSE; + for (Int_t istep=0; istepIsInsideThePad((TGeoHMatrix*)(&global[i]),ctrackPos,dist3d); + + // ***** NEW ***** + /* if track is inside this cluster set flags which will then + * inhibit to add track points for the other clusters */ + if (isInside) { + gotInsideCluster = kTRUE; + trackInsideCluster = i; + } + + if ( mLastStep ) { + Float_t yLoc = dist3d[1]; + Float_t rLoc = TMath::Sqrt(dist3d[0]*dist3d[0]+dist3d[2]*dist3d[2]); + accept = (TMath::Abs(yLoc)AddLast(new AliTOFtrackPoint(clind[i], + TMath::Sqrt(dist3d[0]*dist3d[0] + dist3d[1]*dist3d[1] + dist3d[2]*dist3d[2]), + dist3d[2],dist3d[0],dist3d[1], + AliTOFGeometry::RinTOF()+istep*stepSize,trackPos[3][istep])); + + AliDebug(2,Form(" dist3dLoc[0] = %f, dist3dLoc[1] = %f, dist3dLoc[2] = %f ",dist3d[0],dist3d[1],dist3d[2])); + nfound++; + + AliDebug(2,Form(" C - istep=%d ~ %d %d ~ nfound=%d",istep,trackInsideCluster,i,nfound)); + + // ***** NEW ***** + /* do not break loop in any case + * if the track got inside a cluster all other clusters + * are inhibited */ + // if(accept &&!mLastStep)break; + + }//end if accept + + } //end for on the clusters + + // ***** NEW ***** + /* do not break loop in any case + * if the track got inside a cluster all other clusters + * are inhibited but we want to go on adding track points */ + // 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 ) { fnunmatch++; @@ -610,8 +755,6 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ continue; } - fnmatch++; - // now choose the cluster to be matched with the track. Int_t idclus=-1; @@ -620,32 +763,55 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ Float_t mindist=1000.; Float_t mindistZ=0.; Float_t mindistY=0.; - for (Int_t iclus= 0; iclusAt(iclus); - if (matchableTOFcluster->Distance()Distance()DistanceX())DistanceX())<=stepSize ) { mindist = matchableTOFcluster->Distance(); - mindistZ = matchableTOFcluster->DistanceZ(); // Z distance in the - // RF of the hit pad - // closest to the - // reconstructed - // track + mindistZ = matchableTOFcluster->DistanceZ(); // Z distance in the + // RF of the hit pad + // closest to the + // reconstructed + // track mindistY = matchableTOFcluster->DistanceY(); // Y distance in the // RF of the hit pad // closest to the // reconstructed // track - xpos = matchableTOFcluster->PropRadius(); + mindistX = matchableTOFcluster->DistanceX(); // X distance in the + // RF of the hit pad + // closest to the + // reconstructed + // track + xpos = matchableTOFcluster->PropRadius(); idclus = matchableTOFcluster->Index(); - recL = matchableTOFcluster->Length() + corrLen*0.5; + recL = matchableTOFcluster->Length();// + corrLen*0.5; + + AliDebug(1,Form(" %d(%d) --- %f (%f, %f, %f), step=%f -- idclus=%d --- seed=%d, trackId=%d, trackLab=%d", iclus,nfound, + mindist,mindistX,mindistY,mindistZ,stepSize,idclus,iseed,track->GetSeedIndex(),track->GetLabel())); + } } // loop on found TOF track points + if (TMath::Abs(mindistX)>stepSize && idclus!=-1) { + AliInfo(Form("--------Not matched --- but idclus=%d, trackId=%d, trackLab=%d", + idclus,track->GetSeedIndex(),track->GetLabel())); + idclus=-1; + } + if (idclus==-1) { AliDebug(1,Form("Reconstructed track %d doesn't match any TOF cluster", iseed)); + fnunmatch++; delete trackTOFin; continue; } + AliDebug(1,"--------Matched"); + + fnmatch++; + AliTOFcluster *c=fClusters[idclus]; AliDebug(2, Form("%7d %7d %10d %10d %10d %10d %7d", @@ -658,7 +824,7 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ c->Use(); // Track length correction for matching Step 2 - + /* if (mLastStep) { Float_t rc = TMath::Sqrt(c->GetR()*c->GetR() + c->GetZ()*c->GetZ()); Float_t rt = TMath::Sqrt(trackPos[0][70]*trackPos[0][70] @@ -667,7 +833,7 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ Float_t dlt=rc-rt; recL=trackPos[3][70]+dlt; } - + */ if ( (c->GetLabel(0)==TMath::Abs(trackTOFin->GetLabel())) || @@ -741,7 +907,25 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ } AliTOFtrack *trackTOFout = new AliTOFtrack(*t); - trackTOFout->PropagateTo(xpos); + if (!(trackTOFout->PropagateTo(xpos))) { + delete trackTOFout; + continue; + } + + // If necessary, rotate the track + Double_t yATxposMax=xpos*TMath::Tan(0.5*AliTOFGeometry::GetAlpha()); + Double_t yATxpos=trackTOFout->GetY(); + if (yATxpos > yATxposMax) { + if (!(trackTOFout->Rotate(AliTOFGeometry::GetAlpha()))) { + delete trackTOFout; + continue; + } + } else if (yATxpos < -yATxposMax) { + if (!(trackTOFout->Rotate(-AliTOFGeometry::GetAlpha()))) { + delete trackTOFout; + continue; + } + } // Fill the track residual histograms. FillResiduals(trackTOFout,c,kFALSE);