* 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 *
****************************************************************************/
Int_t ver = TPC->IsVersion();
cerr<<"TPC version "<<ver<<" has been found !\n";
- 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");
- }
+ 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();
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;
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);
// 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 (c<co) return -1;
return 0;
Double_t d=sqrt((x1-fX)*(x1-fX)+(y1-fP0)*(y1-fP0)+(z1-fP1)*(z1-fP1));
Double_t p2=(1.+ GetTgl()*GetTgl())/(Get1Pt()*Get1Pt());
Double_t beta2=p2/(p2 + GetMass()*GetMass());
- Double_t theta2=14.1*14.1/(beta2*p2*1e6)*d/x0*rho;
- //Double_t theta2=1.0259e-6*10*10/20/(beta2*p2)*d*rho;
+ //Double_t theta2=14.1*14.1/(beta2*p2*1e6)*d/x0*rho;
+ Double_t theta2=1.0259e-6*10*10/20/(beta2*p2)*d*rho;
Double_t ey=fP4*fX - fP2, ez=fP3;
Double_t xz=fP4*ez, zz1=ez*ez+1, xy=fP2+ey;
Double_t GetY() const {return fP0;}
Double_t GetZ() const {return fP1;}
Double_t GetSnp() const {return fX*fP4 - fP2;}
- Double_t Get1Pt() const {return fP4*GetConvConst();}
+ Double_t
+ Get1Pt() const { return (1e-9*TMath::Abs(fP4)/fP4 + fP4)*GetConvConst(); }
Double_t GetTgl() const {return fP3;}
Double_t GetSigmaY2() const {return fC00;}
/*
$Log$
+Revision 1.18 2002/05/13 07:33:52 kowal2
+Added protection in Int_t AliTPCtracker::AliTPCRow::Find(Double_t y) const
+in the case of defined region of interests.
+
Revision 1.17 2002/03/18 17:59:13 kowal2
Chnges in the pad geometry - 3 pad lengths introduced.
}
if (cl) {
Float_t l=fSectors->GetPadPitchWidth();
- 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;
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);
}
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;
fAlpha=par->GetInnerAngle();
fAlphaShift=par->GetInnerAngleShift();
fPadPitchWidth=par->GetInnerPadPitchWidth();
- fPadPitchLength=par->GetInnerPadPitchLength();
+ f1PadPitchLength=par->GetInnerPadPitchLength();
+ f2PadPitchLength=f1PadPitchLength;
fN=par->GetNRowLow();
fRow=new AliTPCRow[fN];
//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;
}
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;
}
}
Double_t GetPadPitchWidth() const {return fPadPitchWidth;}
- Double_t GetPadPitchLength() const {return fPadPitchLength;}
private:
Int_t fN; //number of pad rows
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