00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#include "StDcaGeometry.h"
00021
00022 ClassImp(
StDcaGeometry)
00023
00024 static const
char rcsid[] = "$Id:
StDcaGeometry.cxx,v 2.2 2008/03/04 01:03:36 perev Exp $";
00025
00026
StDcaGeometry::
StDcaGeometry()
00027 {
00028 memset(mBeg,0,mEnd-mBeg+1);
00029 }
00030
00031 StDcaGeometry::~StDcaGeometry() {}
00032
00033 StThreeVectorF StDcaGeometry::origin()
const
00034
{
00035
float x = -mImp*sin(mPsi);
00036
float y = mImp*cos(mPsi);
00037
return StThreeVectorF(x,y,mZ);
00038 }
00039
00040 StThreeVectorF StDcaGeometry::momentum()
const
00041
{
00042
float ptt = pt();
00043
float x = ptt*cos(mPsi);
00044
float y = ptt*sin(mPsi);
00045
float z = ptt*mTan;
00046
return StThreeVectorF(x,y,z);
00047 }
00048
00049
void StDcaGeometry::set(
const float pars[7],
const float errs[15])
00050 {
00051
if (pars) memcpy(&mImp ,pars,
sizeof(
float)*6 );
00052
if (pars) memcpy(&mImpImp,errs,
sizeof(
float)*15);
00053 }
00054
00055 StPhysicalHelixD StDcaGeometry::helix()
const
00056
{
00057
00058
int h = (mCurv>=0) ? 1:-1;
00059
00060
double phase = mPsi-h*M_PI/2;
00061
00062
return StPhysicalHelixD(fabs(mCurv),
00063 atan(mTan),
00064 phase,
00065 origin(),
00066 h);
00067 }
00068
00069 THelixTrack StDcaGeometry::thelix()
const
00070
{
00071
enum {kImp,kZ,kPsi,kPti,kTan};
00072
00073 StThreeVectorD pos = origin();
00074 StThreeVectorD dir = momentum().unit();
00075 THelixTrack myHelx(&(pos.x()),&(dir.x()),mCurv);
00076
double errXY[6],errSZ[6];
00077
const float *myErr = &mImpImp;
00078
int jjx=0,jjz=0;
00079
for (
int i=0,li=0;i<5; li+=++i) {
00080
for (
int j=0;j<=i;j++) {
00081
do {
00082
if(i==kZ || i==kTan)
break;
00083
if(j==kZ || j==kTan)
break;
00084 errXY[jjx++]=myErr[li+j];
00085 }
00086
while(0);
00087
do {
00088
if(i!=kZ && i!=kTan)
break;
00089
if(j!=kZ && j!=kTan)
break;
00090 errSZ[jjz++]=myErr[li+j];
00091 }
00092
while(0);
00093 } }
00094 errXY[3]*=hz();errXY[4]*=hz();errXY[5]*=hz()*hz();
00095 myHelx.SetEmx(errXY,errSZ);
00096
return myHelx;
00097 }
00098