From 8676d69171fcaef4ccb5eee2168eb81d301b411b Mon Sep 17 00:00:00 2001 From: hristov Date: Mon, 17 Mar 2003 16:10:07 +0000 Subject: [PATCH] Possibility to set the errors on the primary vertex position in AliITStrackerV2 (Yu.Belikov) --- ITS/AliITSFindTracksV2.C | 3 +- ITS/AliITSrecoV2.h | 8 +- ITS/AliITStrackV2.cxx | 114 ++++-------------- ITS/AliITStrackV2.h | 12 +- ITS/AliITStrackerV2.cxx | 246 +++++++++++++-------------------------- ITS/AliITStrackerV2.h | 4 +- 6 files changed, 118 insertions(+), 269 deletions(-) diff --git a/ITS/AliITSFindTracksV2.C b/ITS/AliITSFindTracksV2.C index ab96d5f8186..2199a9fae43 100644 --- a/ITS/AliITSFindTracksV2.C +++ b/ITS/AliITSFindTracksV2.C @@ -28,7 +28,8 @@ Int_t AliITSFindTracksV2(Int_t nev=1) { //number of events to process for (Int_t i=0; i #include -#include #include "AliCluster.h" #include "AliTPCtrack.h" @@ -32,8 +31,7 @@ ClassImp(AliITStrackV2) const Int_t kWARN=5; -Double_t AliITStrackV2::fSigmaYV = 0.005; -Double_t AliITStrackV2::fSigmaZV = 0.01; + //____________________________________________________________________________ AliITStrackV2::AliITStrackV2():AliKalmanTrack(), fX(0), @@ -178,7 +176,7 @@ GetGlobalXYZat(Double_t xk, Double_t &x, Double_t &y, Double_t &z) const { if (TMath::Abs(f2) >= 0.9999) { Int_t n=GetNumberOfClusters(); if (n>kWARN) - cerr<kWARN) - cerr<GetY() - m[0]), dz=(c->GetZ() - m[1]); - - Double_t dr=TMath::Sqrt(fX*fX + dy*dy); - Double_t r =TMath::Sqrt(4/dr/dr - fP4*fP4); - Double_t sn=0.5*(fP4*fX + dy*r); - Double_t tg=0.5*fP4*dz/TMath::ASin(0.5*fP4*dr); - TVectorD mm(4); - mm(0)=m[0]=c->GetY(); mm(1)=m[1]=c->GetZ(); mm(2)=m[2]=sn; mm(3)=m[3]=tg; - - Double_t v22=0.,v33=0.; - //x0=0.; - if (x0!=0.) { - Double_t pp2=(1.+ GetTgl()*GetTgl())/(Get1Pt()*Get1Pt()); - Double_t beta2=pp2/(pp2 + GetMass()*GetMass()); - x0*=TMath::Sqrt((1.+ GetTgl()*GetTgl())/(1.- GetSnp()*GetSnp())); - Double_t theta2=14.1*14.1/(beta2*pp2*1e6)*x0; - v22 = theta2*(1.- GetSnp()*GetSnp())*(1. + GetTgl()*GetTgl()); - v33 = theta2*(1.+ GetTgl()*GetTgl())*(1. + GetTgl()*GetTgl()); - } - Double_t sy2=c->GetSigmaY2(), sz2=c->GetSigmaZ2(); - v22+=fSigmaYV*fSigmaYV/dr/dr; - v22+=sy2/dr/dr; - Double_t v20=sy2/dr; - - v33+=fSigmaZV*fSigmaZV/dr/dr; - v33+=sz2/dr/dr; - Double_t v31=sz2/dr; - - TMatrixD V(4,4); - V(0,0)=m[4 ]=sy2; V(0,1)=m[5 ]=0.; V(0,2)=m[6 ]=v20; V(0,3)=m[7 ]=0.; - V(1,0)=m[8 ]=0.; V(1,1)=m[9 ]=sz2; V(1,2)=m[10]=0.; V(1,3)=m[11]=v31; - V(2,0)=m[12]=v20; V(2,1)=m[13]=0.; V(2,2)=m[14]=v22; V(2,3)=m[15]=0.; - V(3,0)=m[16]=0.; V(3,1)=m[17]=v31; V(3,2)=m[18]=0.; V(3,3)=m[19]=v33; - - TVectorD res=x; res*=H; res-=mm; //res*=-1; - TMatrixD tmp(H,TMatrixD::kMult,C); - TMatrixD R(tmp,TMatrixD::kMult,TMatrixD(TMatrixD::kTransposed,H)); R+=V; - - Double_t det=R.Determinant(); - if (TMath::Abs(det) < 1.e-30) { - Int_t n=GetNumberOfClusters(); - if (n>kWARN) - cerr<= 0.9999) { Int_t n=GetNumberOfClusters(); if (n>kWARN) - cerr<=0.9999){ - if (n>kWARN) cout<<"AliITStrackV2::Invariant : fP2="<kWARN) Warning("Invariant","fP2=%f\n",fP2); return 0; } if (fC00<=0 || fC00>9.) { - if (n>kWARN) cout<<"AliITStrackV2::Invariant : fC00="<kWARN) Warning("Invariant","fC00=%f\n",fC00); return 0; } if (fC11<=0 || fC11>9.) { - if (n>kWARN) cout<<"AliITStrackV2::Invariant : fC11="<kWARN) Warning("Invariant","fC11=%f\n",fC11); return 0; } if (fC22<=0 || fC22>1.) { - if (n>kWARN) cout<<"AliITStrackV2::Invariant : fC22="<kWARN) Warning("Invariant","fC22=%f\n",fC22); return 0; } if (fC33<=0 || fC33>1.) { - if (n>kWARN) cout<<"AliITStrackV2::Invariant : fC33="<kWARN) Warning("Invariant","fC33=%f\n",fC33); return 0; } if (fC44<=0 || fC44>6e-5) { - if (n>kWARN) cout<<"AliITStrackV2::Invariant : fC44="<kWARN) Warning("Invariant","fC44=%f\n",fC44); return 0; } return 1; @@ -556,7 +482,7 @@ Int_t AliITStrackV2::Propagate(Double_t alp,Double_t xk) { if (TMath::Abs(f2) >= 0.9999) { Int_t n=GetNumberOfClusters(); if (n>kWARN) - cerr< #include #include #include -#include #include "AliITSgeom.h" #include "AliITSRecPoint.h" @@ -32,11 +30,7 @@ #include "AliITSclusterV2.h" #include "AliITStrackerV2.h" -//#define DEBUG - -#ifdef DEBUG -Int_t LAB=38; -#endif +ClassImp(AliITStrackerV2) AliITStrackerV2::AliITSlayer AliITStrackerV2::fLayers[kMaxLayer]; // ITS layers @@ -87,9 +81,12 @@ AliITStrackerV2::AliITStrackerV2(const AliITSgeom *geom) : AliTracker() { fPass=0; fConstraint[0]=1; fConstraint[1]=0; + + Double_t xyz[]={kXV,kYV,kZV}, ers[]={kSigmaXV,kSigmaYV,kSigmaZV}; + SetVertex(xyz,ers); } -void AliITStrackerV2::LoadClusters() { +Int_t AliITStrackerV2::LoadClusters() { //-------------------------------------------------------------------- //This function loads ITS clusters //-------------------------------------------------------------------- @@ -97,13 +94,13 @@ void AliITStrackerV2::LoadClusters() { sprintf(cname,"TreeC_ITS_%d",GetEventNumber()); TTree *cTree=(TTree*)gDirectory->Get(cname); if (!cTree) { - cerr<<"AliITStrackerV2::LoadClusters can't get cTree !\n"; - exit(1); + Error("LoadClusters"," can't get cTree !\n"); + return 1; } TBranch *branch=cTree->GetBranch("Clusters"); if (!branch) { - cerr<<"AliITStrackerV2::LoadClusters can't get Clusters branch !\n"; - exit(1); + Error("LoadClusters"," can't get Clusters branch !\n"); + return 1; } TClonesArray dummy("AliITSclusterV2",10000), *clusters=&dummy; @@ -118,16 +115,6 @@ void AliITStrackerV2::LoadClusters() { Int_t ncl=clusters->GetEntriesFast(); while (ncl--) { AliITSclusterV2 *c=(AliITSclusterV2*)clusters->UncheckedAt(ncl); - -#ifdef DEBUG -if (c->GetLabel(2)!=LAB) -if (c->GetLabel(1)!=LAB) -if (c->GetLabel(0)!=LAB) continue; -Int_t idx=c->GetDetectorIndex(); -Int_t lay=i, lad=idx/ndet, det=idx-lad*ndet; -cout<GetY()<<' '<GetZ()<Delete(); @@ -135,6 +122,8 @@ cout<GetY()<<' '<GetZ()<IsOpen()) { - cerr<<"AliITStrackerV2::Clusters2Tracks(): "; - cerr<<"file with TPC tracks is not open !\n"; - return 1; + Error("Clusters2Tracks","file with TPC tracks is not open !\n"); + return 1; } if (!out->IsOpen()) { - cerr<<"AliITStrackerV2::Clusters2Tracks(): "; - cerr<<"file for ITS tracks is not open !\n"; - return 2; + Error("Clusters2Tracks","file for ITS tracks is not open !\n"); + return 2; } in->cd(); @@ -178,9 +161,8 @@ Int_t AliITStrackerV2::Clusters2Tracks(const TFile *inp, TFile *out) { sprintf(tname,"TreeT_TPC_%d",GetEventNumber()); TTree *tpcTree=(TTree*)in->Get(tname); if (!tpcTree) { - cerr<<"AliITStrackerV2::Clusters2Tracks(): " - "can't get a tree with TPC tracks !\n"; - return 3; + Error("Clusters2Tracks","can't get a tree with TPC tracks !\n"); + return 3; } AliTPCtrack *itrack=new AliTPCtrack; tpcTree->SetBranchAddress("tracks",&itrack); @@ -191,7 +173,7 @@ Int_t AliITStrackerV2::Clusters2Tracks(const TFile *inp, TFile *out) { try { t=new AliITStrackV2(*itrack); } catch (const Char_t *msg) { - cerr<GetLabel(); //save the TPC track label -lbl=tpcLabel; -#ifdef DEBUG -lbl=tpcLabel; -if (TMath::Abs(tpcLabel)!=LAB) continue; -cout<>28; - index[nl]=idx; - } - fBestTrack.~AliITStrackV2(); new(&fBestTrack) AliITStrackV2(*t); - if (!RefitAt(3.7, &fBestTrack, index)) continue; - } + if (fBestTrack.GetNumberOfClusters() < kMaxLayer-kLayersToSkip)continue; + + if (fConstraint[fPass]) { + Int_t index[kMaxLayer]; + Int_t k; + for (k=0; k>28; + index[nl]=idx; + } + fBestTrack.~AliITStrackV2(); new(&fBestTrack) AliITStrackV2(*t); + if (!RefitAt(3.7, &fBestTrack, index)) continue; + } - fBestTrack.SetLabel(tpcLabel); - fBestTrack.CookdEdx(); - CookLabel(&fBestTrack,0.); //For comparison only - itsTree.Fill(); - UseClusters(&fBestTrack); - delete itsTracks.RemoveAt(i); + fBestTrack.SetLabel(tpcLabel); + fBestTrack.CookdEdx(); + CookLabel(&fBestTrack,0.); //For comparison only + itsTree.Fill(); + UseClusters(&fBestTrack); + delete itsTracks.RemoveAt(i); } } + Info("Clusters2Tracks","Number of TPC tracks: %d\n",nentr); + Info("Clusters2Tracks","Number of prolonged tracks: %d\n", + (Int_t)itsTree.GetEntries()); + itsTree.Write(); itsTracks.Delete(); @@ -277,9 +251,6 @@ cout<cd(); - cerr<<"Number of TPC tracks: "<IsOpen()) { - cerr<<"AliITStrackerV2::PropagateBack(): "; - cerr<<"file with ITS tracks is not open !\n"; - return 1; + Error("PropagateBack","file with ITS tracks is not open !\n"); + return 1; } if (!out->IsOpen()) { - cerr<<"AliITStrackerV2::PropagateBack(): "; - cerr<<"file for back propagated ITS tracks is not open !\n"; - return 2; + Error("PropagateBack","file for back propagated ITS tracks is not open !\n"); + return 2; } in->cd(); @@ -310,9 +279,8 @@ Int_t AliITStrackerV2::PropagateBack(const TFile *inp, TFile *out) { sprintf(tname,"TreeT_ITS_%d",GetEventNumber()); TTree *itsTree=(TTree*)in->Get(tname); if (!itsTree) { - cerr<<"AliITStrackerV2::PropagateBack() "; - cerr<<"can't get a tree with ITS tracks !\n"; - return 3; + Error("PropagateBack","can't get a tree with ITS tracks !\n"); + return 3; } AliITStrackV2 *itrack=new AliITStrackV2; itsTree->SetBranchAddress("tracks",&itrack); @@ -344,20 +312,8 @@ Int_t AliITStrackerV2::PropagateBack(const TFile *inp, TFile *out) { Int_t itsLabel=fTrackToFollow.GetLabel(); //save the ITS track label -#ifdef DEBUG -if (TMath::Abs(itsLabel)!=LAB) continue; -cout<GetNumberOfClusters(); -#ifdef DEBUG -for (Int_t k=0; kGetClusterIndex(k); - AliITSclusterV2 *c=(AliITSclusterV2*)GetCluster(index); - cout<GetLabel(0)<<' '<GetLabel(1)<<' '<GetLabel(2)<road*road) { - Double_t dd=TMath::Sqrt(dz*dy), scz=dz/dd, scy=dy/dd; - dz=road*scz; dy=road*scy; - } + Double_t dz=7*TMath::Sqrt(track.GetSigmaZ2() + kSigmaZ2[i]); + Double_t dy=7*TMath::Sqrt(track.GetSigmaY2() + kSigmaY2[i]); + Double_t road=layer.GetRoad(); + if (dz*dy>road*road) { + Double_t dd=TMath::Sqrt(dz*dy), scz=dz/dd, scy=dy/dd; + dz=road*scz; dy=road*scy; + } //Double_t dz=4*TMath::Sqrt(track.GetSigmaZ2() + kSigmaZ2[i]); if (dz < 0.5*TMath::Abs(track.GetTgl())) dz=0.5*TMath::Abs(track.GetTgl()); if (dz > kMaxRoad) { - //cerr<<"AliITStrackerV2::FollowProlongation: too broad road in Z !\n"; + //Warning("FollowProlongation","too broad road in Z !\n"); break; } @@ -568,7 +520,7 @@ cout< kMaxRoad) { - //cerr<<"AliITStrackerV2::FollowProlongation: too broad road in Y !\n"; + //Warning("FollowProlongation","too broad road in Y !\n"); break; } @@ -611,33 +563,26 @@ Int_t AliITStrackerV2::TakeNextProlongation() { Double_t dz=7*TMath::Sqrt(fTrackToFollow.GetSigmaZ2() + kSigmaZ2[fI]); Double_t dy=7*TMath::Sqrt(fTrackToFollow.GetSigmaY2() + kSigmaY2[fI]); -Double_t road=layer.GetRoad(); -if (dz*dy>road*road) { - Double_t dd=TMath::Sqrt(dz*dy), scz=dz/dd, scy=dy/dd; - dz=road*scz; dy=road*scy; -} + Double_t road=layer.GetRoad(); + if (dz*dy>road*road) { + Double_t dd=TMath::Sqrt(dz*dy), scz=dz/dd, scy=dy/dd; + dz=road*scz; dy=road*scy; + } const AliITSclusterV2 *c=0; Int_t ci=-1; Double_t chi2=12345.; while ((c=layer.GetNextCluster(ci))!=0) { - //if (c->GetLabel(0)!=TMath::Abs(lbl)) continue; Int_t idet=c->GetDetectorIndex(); if (fTrackToFollow.GetDetectorIndex()!=idet) { const AliITSdetector &det=layer.GetDetector(idet); ResetTrackToFollow(fTracks[fI]); if (!fTrackToFollow.Propagate(det.GetPhi(),det.GetR())) { - //cerr<<"AliITStrackerV2::TakeNextProlongation: " - //"propagation failed !\n"; + //Warning("TakeNextProlongation","propagation failed !\n"); continue; } fTrackToFollow.SetDetectorIndex(idet); if (TMath::Abs(fTrackToFollow.GetZ()-GetZ())>layer.GetR()+dz) continue; - -#ifdef DEBUG -cout<GetZ()) > dz) continue; @@ -646,22 +591,11 @@ cout<=fNdetectors) return -1; if (nz<0) return -1; -#ifdef DEBUG -cout<