// The track is mainly caracterized by the state vector of elements (fX0, fX1, fX2, fX3, fX4) and the
// corresponding covariance matrix of elements (C00, C10, ..... C44) that is triangular
//
-#include <iostream.h>
+#include <Riostream.h>
#include <TMath.h>
#include <TVector.h>
#include <TObjArray.h>
#include "AliITSRad.h"
#include "AliITSTrackV1.h"
#include "AliGenerator.h"
-#include "AliMagF.h"
+//#include "AliMagF.h"
ClassImp(AliITSTrackV1)
fTPCtrack = 0;
fC00=fC10=fC11=fC20=fC21=fC22=fC30=fC31=fC32=fC33=fC40=fC41=fC42=fC43=fC44=0.;
- flistCluster = new TObjArray;
+ flistCluster = 0;
+ fNumClustInTrack =0;
+ fChi2=-1;
+ flabel =0;
+ fLayer = -1;
+ fClusterInTrack = 0;
+ frtrack=0.;
+ fnoclust=0;
+ fMass=0.13956995; //a pion by default
+ fFieldFactor = 0.0;
+ fdEdx = 0.; // oggi
+ Int_t ia=0; // oggi
+ for( ia=0; ia<4; ia++) fcor[ia]=0.; // oggi
+
+}
+AliITSTrackV1::AliITSTrackV1(Double_t fieldfactor) {
+//Origin A. Badala' and G.S. Pappalardo: e-mail Angela.Badala@ct.infn.it, Giuseppe.S.Pappalardo@ct.infn.it
+// default constructor
+
+ fTPCtrack = 0;
+ fC00=fC10=fC11=fC20=fC21=fC22=fC30=fC31=fC32=fC33=fC40=fC41=fC42=fC43=fC44=0.;
+ flistCluster = 0;
fNumClustInTrack =0;
fChi2=-1;
flabel =0;
fVertex.ResizeTo(3);
fErrorVertex.ResizeTo(3);
fLayer = -1;
- fClusterInTrack = new TMatrix(6,9);
- Int_t i,j;
- //for(i=0; i<6; i++) (*fClusterInTrack)(i,6)=(*fClusterInTrack)(i,7)=
- // (*fClusterInTrack)(i,8)=-1.;
- for(i=0; i<6; i++){
- for(j=4; j<9; j++) (*fClusterInTrack)(i,j)=-1.; //modificata angela
- }
+ fClusterInTrack = 0;
frtrack=0.;
fnoclust=0;
fd2.ResizeTo(6);
ftgl2.ResizeTo(6);
fdtgl.ResizeTo(6);
+ fMass=0.13956995; //a pion by default
+ fdEdx = 0.;
+ Int_t ia=0;
+ for( ia=0; ia<4; ia++) fcor[ia]=0.;
+
//////////////////////////////////////// gets magnetic field factor ////////////////////////////////
- AliMagF * fieldPointer = gAlice->Field();
- fFieldFactor = (Double_t)fieldPointer->Factor();
+ // AliMagF * fieldPointer = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField());
+ // fFieldFactor =(Double_t)fieldPointer-> SolenoidField()/10/.2;
+ fFieldFactor = fieldfactor;
//cout<< " field factor = "<<fFieldFactor<<"\n"; getchar();
/////////////////////////////////////////////////////////////////////////////////////////////////////////
-AliITSTrackV1::AliITSTrackV1(const AliITSTrackV1 &cobj) {
+AliITSTrackV1::AliITSTrackV1(const AliITSTrackV1 &cobj) : TObject(cobj) {
//Origin A. Badala' and G.S. Pappalardo: e-mail Angela.Badala@ct.infn.it, Giuseppe.S.Pappalardo@ct.infn.it
// copy constructor
fClusterInTrack = new TMatrix(6,9);
Int_t i,j;
- //for(i=0; i<6; i++) (*fClusterInTrack)(i,6)=(*fClusterInTrack)(i,7)=
- // (*fClusterInTrack)(i,8)=-1.;
for(i=0; i<6; i++){
- for(j=4; j<9; j++) (*fClusterInTrack)(i,j)=-1.; //modificata angela
+ for(j=0; j<9; j++) (*fClusterInTrack)(i,j)=-1.;
}
flistCluster = new TObjArray;
fVertex.ResizeTo(3);
fd2=cobj.fd2;
ftgl2=cobj.ftgl2;
fdtgl=cobj.fdtgl;
- fnoclust=cobj.fnoclust;
+ fnoclust=cobj.fnoclust;
+ fdEdx = cobj.fdEdx;
+ Int_t ia=0;
+ for( ia=0; ia<4; ia++) fcor[ia]=cobj.fcor[ia];
+
fC00=cobj.fC00; fC10=cobj.fC10; fC11=cobj.fC11; fC20=cobj.fC20; fC21=cobj.fC21;
fC22=cobj.fC22; fC30=cobj.fC30; fC31=cobj.fC31; fC32=cobj.fC32; fC33=cobj.fC33;
*fClusterInTrack = *cobj.fClusterInTrack;
fFieldFactor=cobj.fFieldFactor;
-
+ fMass=cobj.fMass;
+
for(i=0; i<cobj.flistCluster->GetSize(); i++)
flistCluster->AddLast(cobj.flistCluster->At(i));
}
-AliITSTrackV1::AliITSTrackV1(AliTPCtrack &obj)
+AliITSTrackV1::AliITSTrackV1(AliTPCtrack &obj, Double_t fieldfactor)
{
//Origin A. Badala' and G.S. Pappalardo: e-mail Angela.Badala@ct.infn.it, Giuseppe.S.Pappalardo@ct.infn.it
// special constructor to convert a TPC track into an ITS track
//////////////////////////////////////// gets magnetic field factor ////////////////////////////////
- AliMagF * fieldPointer = gAlice->Field();
- fFieldFactor = (Double_t)fieldPointer->Factor();
- //cout<< " field factor = "<<fFieldFactor<<"\n"; getchar();
+ // AliMagF * fieldPointer = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField());
+ // fFieldFactor =(Double_t)fieldPointer-> SolenoidField()/10/.2;
+ fFieldFactor = fieldfactor;
+ // cout<< " field factor dentro alitrack = "<<fFieldFactor<<"\n";/* getchar();*/
/////////////////////////////////////////////////////////////////////////////////////////////////////////
fVertex(2)=(Double_t)vzg;
fLayer = 7;
- //fmCovariance = new TMatrix(5,5);
fClusterInTrack = new TMatrix(6,9);
Int_t i,j;
- //for(i=0; i<6; i++) (*fClusterInTrack)(i,6)=(*fClusterInTrack)(i,7)=
- // (*fClusterInTrack)(i,8)=-1.;
for(i=0; i<6; i++){
- for(j=4; j<9; j++) (*fClusterInTrack)(i,j)=-1.; //modificata angela
+ for(j=0; j<9; j++) (*fClusterInTrack)(i,j)=-1.;
}
flistCluster = new TObjArray;
fNumClustInTrack = 0;
- fnoclust=0;
+ fnoclust=0;
+ fdEdx = 0.;
+ Int_t ia=0;
+ for( ia=0; ia<4; ia++) fcor[ia]=0.;
LmTPC();
}
Double_t xo,yo, signy;
Double_t r = 1./cTPC;
xo = etaTPC / cTPC;
- //fxoTPC=xo;
Double_t yo1, yo2, diffsq1, diffsq2;
- yo1 = yTPC + TMath::Sqrt(r*r - (xl-xo)*(xl-xo));
- yo2 = yTPC - TMath::Sqrt(r*r - (xl-xo)*(xl-xo));
- diffsq1=TMath::Abs((yo1-vyl)*(yo1-vyl)+(xo-vxl)*(xo-vxl)-r*r);
- diffsq2=TMath::Abs((yo2-vyl)*(yo2- vyl)+(xo-vxl)*(xo-vxl)-r*r);
+ yo1 = yTPC + TMath::Sqrt((r-(xl-xo))*(r+(xl-xo)));
+ yo2 = yTPC - TMath::Sqrt((r-(xl-xo))*(r+(xl-xo)));
+ diffsq1=TMath::Abs((yo1-vyl)*(yo1-vyl)+((xo-vxl)-r)*((xo-vxl)+r));
+ diffsq2=TMath::Abs((yo2-vyl)*(yo2-vyl)+((xo-vxl)-r)*((xo-vxl)+r));
if(diffsq1<diffsq2) {yo=yo1; signy=1.;} else {yo=yo2; signy=-1.;};
////////////////////////////////////////////////////////////////////////////////////////////////////
y0m = xo * sina + yo * cosa;
frtrack=TMath::Sqrt(xm*xm+ym*ym);
- /*
- Double_t pigre=TMath::Pi();
- Double_t phi=0.0;
- if(ym == 0. || xm == 0.) {
- if(ym == 0. && xm == 0.) {cout << " Error in AliITSTrackV1::LmTPC x=0 and y=0 \n"; getchar();}
- if(ym ==0. && xm>0.) phi=0.;
- if(ym==0. && xm<0.) phi=pigre;
- if(xm==0 && ym>0.) phi=pigre/2.;
- if(xm==0 && ym<0.) phi=1.5*pigre;
- }
- else {
- if (xm>0. && ym>0.) phi=TMath::ATan(ym/xm);
- if (xm<0. && ym>0.) phi=pigre+TMath::ATan(ym/xm);
- if (xm<0. && ym<0.) phi=pigre+TMath::ATan(ym/xm);
- if (xm>0. && ym<0.) phi=(2*pigre)+TMath::ATan(ym/xm);
- };
- if(phi<0. || phi>(2*pigre)) {cout<<"attention error on phi in AliITSTrackV1:LmTPC \n"; getchar();}
- */
- Double_t phi=TMath::ATan2(ym,xm); if(phi<0) phi=2.*TMath::Pi()+phi; //nuova def phi
+ Double_t phi=TMath::ATan2(ym,xm); if(phi<0) phi=2.*TMath::Pi()+phi;
fX0=phi;
fX1=zm;
dfidy=(xm*cosa+ym*sina)/(frtrack*frtrack);
dDdy=signdd*((y0m-fVertex(1))*cosa-(x0m-fVertex(0))*sina)/dd;
- Double_t dyodr=signy*(r+(xl-xo)*etaTPC)/TMath::Sqrt(r*r-(xl-xo)*(xl-xo));
+ Double_t dyodr=signy*(r+(xl-xo)*etaTPC)/TMath::Sqrt((r-(xl-xo))*(r+(xl-xo)));
Double_t dyomdr=sina*etaTPC+cosa*dyodr;
Double_t dxomdr=cosa*etaTPC-sina*dyodr;
Double_t ddddR=((x0m-fVertex(0))*dxomdr+(y0m-fVertex(1))*dyomdr)/dd;
dDdC=-r*r*(signdd*ddddR-1.);
- Double_t dyoldxol=signy*(xl-xo)/TMath::Sqrt(r*r-(xl-xo)*(xl-xo));
+ Double_t dyoldxol=signy*(xl-xo)/TMath::Sqrt((r-(xl-xo))*(r+(xl-xo)));
Double_t dxomdeta=r*(cosa-sina*dyoldxol);
Double_t dyomdeta=r*(sina+cosa*dyoldxol);
dDdeta=signdd*((x0m-fVertex(0))*dxomdeta+(y0m-fVertex(1))*dyomdeta)/dd;
fC43=cov[13];
fC44=cov[9];
- //cout<<" C32 e C44 = "<<fC32<<" "<<fC44<<"\n"; getchar();
}
fC00=obj.fC00; fC10=obj.fC10; fC11=obj.fC11; fC20=obj.fC20; fC21=obj.fC21;
fC22=obj.fC22; fC30=obj.fC30; fC31=obj.fC31; fC32=obj.fC32; fC33=obj.fC33;
- fC40=obj.fC40; fC41=obj.fC41; fC42=obj.fC42; fC43=obj.fC43; fC44=obj.fC44;
-
+ fC40=obj.fC40; fC41=obj.fC41; fC42=obj.fC42; fC43=obj.fC43; fC44=obj.fC44;
+
+ fMass=obj.fMass;
+ fdEdx = obj.fdEdx;
+ Int_t ia=0;
+ for( ia=0; ia<4; ia++) fcor[ia]=obj.fcor[ia];
+
*fClusterInTrack = *obj.fClusterInTrack;
Int_t i;
Double_t bk=ArgB(rk), bkm1=ArgB(rkm1);
Double_t ck=ArgC(rk), ckm1=ArgC(rkm1);
- Double_t f02=ck/TMath::Sqrt(1.-aAk*aAk) - ckm1/TMath::Sqrt(1.-aAkm1*aAkm1);
- Double_t f04=bk/TMath::Sqrt(1.-aAk*aAk) - bkm1/TMath::Sqrt(1.-aAkm1*aAkm1);
+ Double_t f02=ck/TMath::Sqrt((1.-aAk)*(1.+aAk)) - ckm1/TMath::Sqrt((1.-aAkm1)*(1.+aAkm1));
+ Double_t f04=bk/TMath::Sqrt((1.-aAk)*(1.+aAk)) - bkm1/TMath::Sqrt((1.-aAkm1)*(1.+aAkm1));
Double_t f12=tgl*d*(1./rk - 1./rkm1);
Double_t f13=rk - rkm1;
}
-void AliITSTrackV1::AddEL(AliITSRad *rl, Double_t signdE, Bool_t flagtot, Double_t mass) {
+void AliITSTrackV1::AddEL(Double_t signdE, Bool_t flagtot, Double_t mass) {
//Origin A. Badala' and G.S. Pappalardo: e-mail Angela.Badala@ct.infn.it, Giuseppe.S.Pappalardo@ct.infn.it
// add energy loss
+// AliITSRad *rl was passed as argument. Now rl has been commented out
+ mass=fMass;
+
TVector s(6);
s(0)=0.0026+0.00283; s(1)=0.018; s(2)=0.0094; s(3)=0.0095; s(4)=0.0091; s(5)=0.0087;
//s(0)=0.0026+0.00283*2.; s(1)=0.018*2.; s(2)=0.0094; s(3)=0.0095; s(4)=0.0091; s(5)=0.0087;
dE=signdE*dE/1000.;
e+=dE;
- Double_t p=TMath::Sqrt(e*e-mass*mass);
+ Double_t p=TMath::Sqrt((e-mass)*(e+mass));
Double_t sign=1.;
if(fX4 < 0.) sign=-1.;
pt=sign*p/sqcl;
}
-void AliITSTrackV1::AddMS(AliITSRad *rl, Double_t mass) {
+void AliITSTrackV1::AddMS(Double_t mass) {
//Origin A. Badala' and G.S. Pappalardo: e-mail Angela.Badala@ct.infn.it, Giuseppe.S.Pappalardo@ct.infn.it
////////// Modification of the covariance matrix to take into account multiple scattering ///////////
+ mass=fMass;
+
TVector s(6);
s(0)=0.0026+0.00283; s(1)=0.018; s(2)=0.0094; s(3)=0.0095; s(4)=0.0091; s(5)=0.0087;
Double_t p2=(GetPt()*GetPt())/(cosl*cosl);
Double_t beta2=p2/(p2+mass*mass);
- Double_t theta2=14.1*14.1/(beta2*p2*1.e6)*(s(layer-1)/cosl);
+ // Double_t theta2=14.1*14.1/(beta2*p2*1.e6)*(s(layer-1)/cosl);
+ Double_t theta2=14.1*14.1/(beta2*p2*1.e6)*(s(layer-1)/TMath::Abs(cosl));
fC22+=theta2*(q40*q40+q41*q41);
fC32+=theta2*q20*q40;
fC44+=theta2*q30*q30;
}
-void AliITSTrackV1::PrimaryTrack(AliITSRad *rl) {
+void AliITSTrackV1::PrimaryTrack() {
//Origin A. Badala' and G.S. Pappalardo: e-mail Angela.Badala@ct.infn.it, Giuseppe.S.Pappalardo@ct.infn.it
// calculation of part of covariance matrix for vertex constraint
fC00=fC10=fC11=fC20=fC21=fC22=fC30=fC31=fC32=fC33=fC40=fC41=fC42=fC43=0.;
- AddEL(rl,1.,1);
+ AddEL(1.,1);
fLayer=0;
Int_t i;
for (i=0; i<6; i++) {
fd2(i)=fC22;
ftgl2(i)=fC33;
fdtgl(i)=fC32;
- AddMS(rl);
- AddEL(rl,-1,0);
+ AddMS();
+ AddEL(-1,0);
}
}
Double_t AliITSTrackV1::GetPredChi2(Double_t m[2], Double_t sigma[2] ) const {
//Origin A. Badala' and G.S. Pappalardo: e-mail Angela.Badala@ct.infn.it, Giuseppe.S.Pappalardo@ct.infn.it
// This function calculates a predicted chi2 increment.
-/*
- Double_t r00=c->GetSigmaY2(), r01=0., r11=c->GetSigmaZ2();
- r00+=fC00; r01+=fC10; r11+=fC11;
-
- Double_t det=r00*r11 - r01*r01;
- if (TMath::Abs(det) < 1.e-10) {
- Int_t n=GetNumberOfClusters();
- if (n>4) cerr<<n<<" AliKalmanTrack warning: Singular matrix !\n";
- return 1e10;
- }
- Double_t tmp=r00; r00=r11; r11=tmp; r01=-r01;
-
- Double_t dy=c->GetY() - fP0, dz=c->GetZ() - fP1;
-
- return (dy*r00*dy + 2*r01*dy*dz + dz*r11*dz)/det;
- */
-
-
+
Double_t r00=sigma[0], r01=0., r11=sigma[1];
r00+=fC00; r01+=fC10; r11+=fC11;
Double_t det=r00*r11-r01*r01;
Double_t chi2 = (dphi*r00*dphi +2.*r01*dphi*dz + dz*r11*dz)/det;
return chi2;
-
-
-
}