From 024a7fe95dfb0f18bd4b1747687ebdb86d0d239f Mon Sep 17 00:00:00 2001 From: kowal2 Date: Fri, 19 Jul 2002 07:31:40 +0000 Subject: [PATCH] Improvement in tracking by J. Belikov --- TPC/AliTPCComparison.C | 36 ++++++++++++++++++++++-------------- TPC/AliTPCPropagateBack.C | 3 ++- TPC/AliTPCtrack.cxx | 10 ++++++---- TPC/AliTPCtrack.h | 3 ++- TPC/AliTPCtracker.cxx | 23 ++++++++++++++++------- TPC/AliTPCtracker.h | 8 +++----- 6 files changed, 51 insertions(+), 32 deletions(-) diff --git a/TPC/AliTPCComparison.C b/TPC/AliTPCComparison.C index 6e78e025bff..d29d11eca45 100644 --- a/TPC/AliTPCComparison.C +++ b/TPC/AliTPCComparison.C @@ -2,10 +2,9 @@ * Very important, delicate and rather obscure macro. * * * * Creates list of "trackable" tracks, * - * sorts tracks for matching with the ITS, * * calculates efficiency, resolutions etc. * * * - * Origin: J.Belikov, CERN, Jouri.Belikov@cern.ch * + * Origin: I.Belikov, CERN, Jouri.Belikov@cern.ch * * with several nice improvements by: M.Ivanov, GSI, m.ivanov@gsi.de * ****************************************************************************/ @@ -292,19 +291,21 @@ Int_t good_tracks_tpc(GoodTrackTPC *gt, const Int_t max, const Int_t event) { Int_t ver = TPC->IsVersion(); cerr<<"TPC version "<Get("75x40_100x60"); - if(digp){ - cerr<<"2 pad-lenght geom hits with 3 pad-length geom digits...\n"; - delete digp; - digp = new AliTPCParamSR(); - } - else - { - digp =(AliTPCParamSR *)gDirectory->Get("75x40_100x60_150x60"); - } + AliTPCParamSR *digp=(AliTPCParamSR*)file->Get("75x40_100x60"); + if(digp){ + cerr<<"2 pad-lenght geom hits with 3 pad-length geom digits...\n"; + delete digp; + digp = new AliTPCParamSR(); + } + else + { + digp =(AliTPCParamSR *)gDirectory->Get("75x40_100x60_150x60"); + } if (!digp) { cerr<<"TPC parameters have not been found !\n"; exit(6); } TPC->SetParam(digp); + + Int_t nrow_up=digp->GetNRowUp(); Int_t nrows=digp->GetNRowLow()+nrow_up; Int_t zero=digp->GetZeroSup(); @@ -425,8 +426,15 @@ Int_t good_tracks_tpc(GoodTrackTPC *gt, const Int_t max, const Int_t event) { Int_t j=p->GetFirstMother(); if (j>=0) { - TParticle *pp = (TParticle*)gAlice->Particle(j); - if (pp->GetFirstMother()>=0) continue;//only one decay is allowed + TParticle *pp = (TParticle*)gAlice->Particle(j); + if (pp->GetFirstMother()>=0) continue;//only one decay is allowed + /* for cascade hyperons only + Int_t jj=pp->GetFirstMother(); + if (jj>=0) { + TParticle *ppp = (TParticle*)gAlice->Particle(jj); + if (ppp->GetFirstMother()>=0) continue;//two decays are allowed + } + */ } gt[nt].lab=i; diff --git a/TPC/AliTPCPropagateBack.C b/TPC/AliTPCPropagateBack.C index ac67f3f9f8a..746bdd91921 100644 --- a/TPC/AliTPCPropagateBack.C +++ b/TPC/AliTPCPropagateBack.C @@ -22,7 +22,8 @@ Int_t AliTPCPropagateBack() { if (!file->IsOpen()) { cerr<<"Can't open AliTPCclusters.root !\n";return 3; } - AliTPCParam *param=(AliTPCParam*)file->Get("75x40_100x60"); + AliTPCParam *param=(AliTPCParam*)file->Get("75x40_100x60_150x60"); + if (!param) {cerr<<"Can't get TPC parameters !\n"; return 4;} TStopwatch timer; AliTPCtracker *tracker=new AliTPCtracker(param); diff --git a/TPC/AliTPCtrack.cxx b/TPC/AliTPCtrack.cxx index b2fc9408cbb..cef7ab52373 100644 --- a/TPC/AliTPCtrack.cxx +++ b/TPC/AliTPCtrack.cxx @@ -121,8 +121,10 @@ Int_t AliTPCtrack::Compare(const TObject *o) const { // This function compares tracks according to the their curvature //----------------------------------------------------------------- AliTPCtrack *t=(AliTPCtrack*)o; - Double_t co=TMath::Abs(t->Get1Pt()); - Double_t c =TMath::Abs(Get1Pt()); + //Double_t co=TMath::Abs(t->Get1Pt()); + //Double_t c =TMath::Abs(Get1Pt()); + Double_t co=t->GetSigmaY2()*t->GetSigmaZ2(); + Double_t c =GetSigmaY2()*GetSigmaZ2(); if (c>co) return 1; else if (cGetPadPitchWidth(); - t.SetSampledEdx(cl->GetQ()/l,t.GetNumberOfClusters()); + Float_t corr=1.; if (nr>63) corr=0.67; // new (third) pad response ! + t.SetSampledEdx(cl->GetQ()/l*corr,t.GetNumberOfClusters()); if (!t.Update(cl,maxchi2,index)) { if (!tryAgain--) return 0; } else tryAgain=kSKIP; @@ -460,7 +465,8 @@ Int_t AliTPCtracker::FollowBackProlongation if (cl) { Float_t l=fSectors->GetPadPitchWidth(); - seed.SetSampledEdx(cl->GetQ()/l,seed.GetNumberOfClusters()); + Float_t corr=1.; if (i>63) corr=0.67; // new (third) pad response ! + seed.SetSampledEdx(cl->GetQ()/l*corr,seed.GetNumberOfClusters()); seed.Update(cl,maxchi2,index); } @@ -537,7 +543,8 @@ void AliTPCtracker::MakeSeeds(Int_t i1, Int_t i2) { Double_t sy1=kr1[is]->GetSigmaY2(), sz1=kr1[is]->GetSigmaZ2(); Double_t sy2=kcl->GetSigmaY2(), sz2=kcl->GetSigmaZ2(); - Double_t sy3=400*3./12., sy=0.1, sz=0.1; + //Double_t sy3=400*3./12., sy=0.1, sz=0.1; + Double_t sy3=25000*x[4]*x[4]+0.1, sy=0.1, sz=0.1; Double_t f40=(f1(x1,y1+sy,x2,y2,x3,y3)-x[4])/sy; Double_t f42=(f1(x1,y1,x2,y2+sy,x3,y3)-x[4])/sy; @@ -922,7 +929,8 @@ void AliTPCtracker::AliTPCSector::Setup(const AliTPCParam *par, Int_t f) { fAlpha=par->GetInnerAngle(); fAlphaShift=par->GetInnerAngleShift(); fPadPitchWidth=par->GetInnerPadPitchWidth(); - fPadPitchLength=par->GetInnerPadPitchLength(); + f1PadPitchLength=par->GetInnerPadPitchLength(); + f2PadPitchLength=f1PadPitchLength; fN=par->GetNRowLow(); fRow=new AliTPCRow[fN]; @@ -1002,14 +1010,15 @@ void AliTPCtracker::AliTPCseed::CookdEdx(Double_t low, Double_t up) { //Very rough PID Double_t p=TMath::Sqrt((1.+ GetTgl()*GetTgl())/(Get1Pt()*Get1Pt())); + Double_t log1=TMath::Log(p+0.45), log2=TMath::Log(p+0.12); if (p<0.6) { - if (dedx < 39.+ 12./(p+0.25)/(p+0.25)) { SetMass(0.13957); return;} - if (dedx < 39.+ 12./p/p) { SetMass(0.49368); return;} + if (dedx < 34 + 30/(p+0.45)/(p+0.45) + 24*log1) {SetMass(0.13957); return;} + if (dedx < 34 + 30/(p+0.12)/(p+0.12) + 24*log2) {SetMass(0.49368); return;} SetMass(0.93827); return; } if (p<1.2) { - if (dedx < 39.+ 12./(p+0.25)/(p+0.25)) { SetMass(0.13957); return;} + if (dedx < 34 + 30/(p+0.12)/(p+0.12) + 24*log2) {SetMass(0.13957); return;} SetMass(0.93827); return; } diff --git a/TPC/AliTPCtracker.h b/TPC/AliTPCtracker.h index 1483c497474..3ed995aa964 100644 --- a/TPC/AliTPCtracker.h +++ b/TPC/AliTPCtracker.h @@ -86,7 +86,7 @@ public: if (x > r) return fN; r=fRow[0].GetX(); if (x < r) return -1; - return Int_t((x-r)/fPadPitchLength + 0.5);} + return Int_t((x-r)/f1PadPitchLength + 0.5);} else{ r=fRow[fN-1].GetX(); if (x > r) return fN; @@ -100,7 +100,6 @@ public: } } Double_t GetPadPitchWidth() const {return fPadPitchWidth;} - Double_t GetPadPitchLength() const {return fPadPitchLength;} private: Int_t fN; //number of pad rows @@ -108,9 +107,8 @@ public: Double_t fAlpha; //opening angle Double_t fAlphaShift; //shift angle; Double_t fPadPitchWidth; //pad pitch width - Double_t fPadPitchLength; //pad pitch length - Double_t f1PadPitchLength; //pad pitch length - Double_t f2PadPitchLength; + Double_t f1PadPitchLength; //pad pitch length + Double_t f2PadPitchLength; //pad pitch length private: AliTPCSector(const AliTPCSector &s); //dummy copy contructor AliTPCSector& operator=(const AliTPCSector &s);//dummy assignment operator -- 2.43.0