X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITStrackerV2.cxx;h=d80e89f8f05dcfcdc408f0a37557d7918f230812;hb=09ed5594a8b7db55b0a7fe70f025be11aefad2f3;hp=8a4173435207ef2b49445287899b4018af0c1a22;hpb=aad72f45c9c3fa068d01f3542578bc05ca9ee907;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITStrackerV2.cxx b/ITS/AliITStrackerV2.cxx index 8a417343520..d80e89f8f05 100644 --- a/ITS/AliITStrackerV2.cxx +++ b/ITS/AliITStrackerV2.cxx @@ -12,7 +12,7 @@ * about the suitability of this software for any purpose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ - +/* $Id$ */ //------------------------------------------------------------------------- // Implementation of the ITS tracker class // It reads AliITSRecPoint clusters and creates AliITStrackV2 tracks @@ -40,21 +40,21 @@ ClassImp(AliITStrackerV2) -AliITStrackerV2::AliITSlayer AliITStrackerV2::fgLayers[kMaxLayer]; //ITS layers +AliITStrackerV2::AliITSlayer AliITStrackerV2::fgLayers[AliITSgeomTGeo::kNLayers]; //ITS layers AliITStrackerV2::AliITStrackerV2(): AliTracker(), - fI(kMaxLayer), + fI(AliITSgeomTGeo::GetNLayers()), fBestTrack(), fTrackToFollow(), fPass(0), - fLastLayerToTrackTo(kLastLayerToTrackTo) + fLastLayerToTrackTo(AliITSRecoParam::GetLastLayerToTrackTo()) { //-------------------------------------------------------------------- //This is the AliITStrackerV2 default constructor //-------------------------------------------------------------------- - for (Int_t i=1; iGetSigmaZVdef()}; SetVertex(xyz,ers); - for (Int_t i=0; iGetSigmaZVdef()}; SetVertex(xyz,ers); - for (Int_t i=0; iSetAddress(&clusters); Int_t j=0; - for (Int_t i=0; iGetStatus()&AliESDtrack::kTPCout) continue; if (esd->GetStatus()&AliESDtrack::kITSin) continue; - AliITStrackV2 *t=0; - try { - t=new AliITStrackV2(*esd); - } catch (const Char_t *msg) { - Warning("Clusters2Tracks",msg); - delete t; - continue; - } + AliITStrackV2 *t = new AliITStrackV2(*esd); + if (TMath::Abs(t->GetD(GetX(),GetY()))>4) { delete t; continue; @@ -318,7 +313,7 @@ Int_t AliITStrackerV2::Clusters2Tracks(AliESDEvent *event) { ResetTrackToFollow(*t); ResetBestTrack(); - for (FollowProlongation(); fIGetStatus()&AliESDtrack::kITSin)==0) continue; if (esd->GetStatus()&AliESDtrack::kITSout) continue; - AliITStrackV2 *t=0; - try { - t=new AliITStrackV2(*esd); - } catch (const Char_t *msg) { - Warning("PropagateBack",msg); - delete t; - continue; - } + AliITStrackV2 *t = new AliITStrackV2(*esd); ResetTrackToFollow(*t); @@ -379,7 +367,10 @@ Int_t AliITStrackerV2::PropagateBack(AliESDEvent *event) { if (fTrackToFollow.PropagateToVertex(event->GetVertex())) { fTrackToFollow.StartTimeIntegral(); } - fTrackToFollow.PropagateTo(3.,-0.0028,65.19); + Bool_t okProp=fTrackToFollow.PropagateTo(3.,-0.0028,65.19); + if(!okProp){ + AliWarning("Propagation to beam pipe radius failed"); + } } fTrackToFollow.ResetCovariance(10.); fTrackToFollow.ResetClusters(); @@ -423,14 +414,7 @@ Int_t AliITStrackerV2::RefitInward(AliESDEvent *event) { if (esd->GetStatus()&AliESDtrack::kTPCout) if ((esd->GetStatus()&AliESDtrack::kTPCrefit)==0) continue; - AliITStrackV2 *t=0; - try { - t=new AliITStrackV2(*esd); - } catch (const Char_t *msg) { - Warning("RefitInward",msg); - delete t; - continue; - } + AliITStrackV2 *t = new AliITStrackV2(*esd); if (CorrectForDeadZoneMaterial(t)!=0) { Warning("RefitInward", @@ -449,9 +433,9 @@ Int_t AliITStrackerV2::RefitInward(AliESDEvent *event) { CookLabel(&fTrackToFollow,0.); //For comparison only if (fTrackToFollow.PropagateTo(3.,0.0028,65.19)) {//The beam pipe + fTrackToFollow.UpdateESDtrack(AliESDtrack::kITSrefit); AliESDtrack *esdTrack =fTrackToFollow.GetESDtrack(); - esdTrack->UpdateTrackParams(&fTrackToFollow,AliESDtrack::kITSrefit); - Float_t r[3]={0.,0.,0.}; + Double_t r[3]={0.,0.,0.}; Double_t maxD=3.; esdTrack->RelateToVertex(event->GetVertex(),GetBz(r),maxD); ntrk++; @@ -633,7 +617,7 @@ Int_t AliITStrackerV2::TakeNextProlongation() { if (TMath::Abs(fTrackToFollow.GetD(GetX(),GetY()))>4) return 0; fTrackToFollow. - SetSampledEdx(cc->GetQ(),fTrackToFollow.GetNumberOfClusters()-1); //b.b. + SetSampledEdx(cc->GetQ(),fI-2); //b.b. { Double_t x0; @@ -667,7 +651,10 @@ AliITStrackerV2::AliITSlayer::AliITSlayer(): //-------------------------------------------------------------------- for (Int_t i=0; iGetNumberOfClusters(); for (k=0; kGetClusterIndex(k),nl=(idx&0xf0000000)>>28; @@ -1011,10 +1000,10 @@ Bool_t AliITStrackerV2::RefitAt(Double_t xx,AliITStrackV2 *t, Int_t from, to, step; if (xx > t->GetX()) { - from=0; to=kMaxLayer; + from=0; to=AliITSgeomTGeo::GetNLayers(); step=+1; } else { - from=kMaxLayer-1; to=-1; + from=AliITSgeomTGeo::GetNLayers()-1; to=-1; step=-1; } @@ -1024,13 +1013,21 @@ Bool_t AliITStrackerV2::RefitAt(Double_t xx,AliITStrackV2 *t, { Double_t hI=i-0.5*step; - if (TMath::Abs(hI-1.5)<0.01 || TMath::Abs(hI-3.5)<0.01) { - Double_t rs=0.5*(fgLayers[i-step].GetR() + r); - Double_t d=0.0034, x0=38.6; - if (TMath::Abs(hI-1.5)<0.01) {rs=9.; d=0.0097; x0=42;} - if (!t->PropagateTo(rs,-step*d,x0)) { - return kFALSE; - } + if (TMath::Abs(hI-1.5)<0.01 || TMath::Abs(hI-3.5)<0.01) { + Int_t iLay = i-step; + Double_t rs = 0.; + if(iLay<0 || iLay>= AliITSgeomTGeo::kNLayers){ + AliError(Form("Invalid layer %d ",iLay)); + return kFALSE; + } + else{ + rs=0.5*(fgLayers[i-step].GetR() + r); + } + Double_t d=0.0034, x0=38.6; + if (TMath::Abs(hI-1.5)<0.01) {rs=9.; d=0.0097; x0=42;} + if (!t->PropagateTo(rs,-step*d,x0)) { + return kFALSE; + } } } @@ -1062,18 +1059,18 @@ Bool_t AliITStrackerV2::RefitAt(Double_t xx,AliITStrackV2 *t, Int_t idx=index[i]; if (idx>=0) { - const AliITSRecPoint *c=(AliITSRecPoint *)GetCluster(idx); - if (idet != c->GetDetectorIndex()) { - idet=c->GetDetectorIndex(); - const AliITSdetector &det=layer.GetDetector(idet); - if (!t->Propagate(det.GetPhi(),det.GetR())) { + const AliITSRecPoint *ccc=(AliITSRecPoint *)GetCluster(idx); + if (idet != ccc->GetDetectorIndex()) { + idet=ccc->GetDetectorIndex(); + const AliITSdetector &det2=layer.GetDetector(idet); + if (!t->Propagate(det2.GetPhi(),det2.GetR())) { return kFALSE; } t->SetDetectorIndex(idet); } - Double_t chi2=t->GetPredictedChi2(c); + Double_t chi2=t->GetPredictedChi2(ccc); if (chi2Update(cl,maxchi2,idx)) { return kFALSE; } - t->SetSampledEdx(cl->GetQ(),t->GetNumberOfClusters()-1); + t->SetSampledEdx(cl->GetQ(),i-2); } { @@ -1108,19 +1105,20 @@ Bool_t AliITStrackerV2::RefitAt(Double_t xx,AliITStrackV2 *t, Double_t ymax=t->GetY() + phi*r + dy; layer.SelectClusters(zmin,zmax,ymin,ymax); - const AliITSRecPoint *c=0; Int_t ci=-1,cci=-1; - Double_t maxchi2=1000.*AliITSReconstructor::GetRecoParam()->GetMaxChi2(), tolerance=0.1; - while ((c=layer.GetNextCluster(ci))!=0) { - if (idet == c->GetDetectorIndex()) continue; + const AliITSRecPoint *cx=0; Int_t ci=-1,cci=-1; + maxchi2=1000.*AliITSReconstructor::GetRecoParam()->GetMaxChi2(); + Double_t tolerance=0.1; + while ((cx=layer.GetNextCluster(ci))!=0) { + if (idet == cx->GetDetectorIndex()) continue; - const AliITSdetector &det=layer.GetDetector(c->GetDetectorIndex()); + const AliITSdetector &detx=layer.GetDetector(cx->GetDetectorIndex()); - if (!tmp.Propagate(det.GetPhi(),det.GetR())) continue; + if (!tmp.Propagate(detx.GetPhi(),detx.GetR())) continue; - if (TMath::Abs(tmp.GetZ() - c->GetZ()) > tolerance) continue; - if (TMath::Abs(tmp.GetY() - c->GetY()) > tolerance) continue; + if (TMath::Abs(tmp.GetZ() - cx->GetZ()) > tolerance) continue; + if (TMath::Abs(tmp.GetY() - cx->GetY()) > tolerance) continue; - Double_t chi2=tmp.GetPredictedChi2(c); + Double_t chi2=tmp.GetPredictedChi2(cx); if (chi2=0) t->SetExtraCluster(i,(i<<28)+cci);