StEvent/StDcaGeometry.cxx

00001 /*************************************************************************** 00002 * 00003 * $Id: StDcaGeometry.cxx,v 2.2 2008/03/04 01:03:36 perev Exp $ 00004 * 00005 * Author: Victor Perevoztchikov, Thomas Ullrich, May 2006 00006 *************************************************************************** 00007 * 00008 * Description: 00009 * 00010 *************************************************************************** 00011 * 00012 * $Log: StDcaGeometry.cxx,v $ 00013 * Revision 2.2 2008/03/04 01:03:36 perev 00014 * remove redundant mHz 00015 * 00016 * Revision 2.1 2006/05/24 17:27:43 ullrich 00017 * Initial Revision. 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() {/* noop */} 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 // double curvature = fabs(mCurv); 00058 int h = (mCurv>=0) ? 1:-1; 00059 00060 double phase = mPsi-h*M_PI/2; 00061 00062 return StPhysicalHelixD(fabs(mCurv), // 1/cm 00063 atan(mTan), // radian 00064 phase, // radian 00065 origin(), // cm 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 {// select XY part 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 {// select SZ part 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

Generated on Sun Mar 15 04:54:22 2009 for StRoot by doxygen 1.3.7