00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include <cmath>
00034 #include "EEmcL3Tracks.h"
00035
00036 ClassImp(EEmcHelix)
00037
00038 EEmcHelix::EEmcHelix(Float_t x , Float_t y , Float_t z,
00039 Float_t px, Float_t py, Float_t pz,
00040 Int_t q , Float_t B ,
00041 Int_t np, Float_t l , Int_t flag)
00042 {
00043 mOx=x; mOy=y; mOz=z;
00044 mPx=px; mPy=py; mPz=pz;
00045 mQ = q;
00046 mB = B;
00047 mPoints = np;
00048 mLength = l;
00049 mFlag = flag;
00050 }
00051
00052
00053 EEmcHelix::EEmcHelix(const EEmcHelix &h)
00054 {
00055 h.getOrigin (mOx,mOy,mOz);
00056 h.getMomentum(mPx,mPy,mPz);
00057 mQ = h.Q();
00058 mB = h.B();
00059 mPoints = h.Points();
00060 mLength = h.Length();
00061 mFlag = h.Flag();
00062 };
00063
00064
00065 void
00066 EEmcHelix :: print(FILE *fd) const
00067 {
00068 fprintf(fd,"\torigin : %+f %+f %+f\n",mOx,mOy,mOz);
00069 fprintf(fd,"\tmomentum: %+f %+f %+f\n",mPx,mPy,mPz);
00070 fprintf(fd,"\tcharge : %+1d\tfield : %+f\n",mQ,mB);
00071 fprintf(fd,"\tpoints : %2d \tlength: %+f\n",mPoints,mLength);
00072 fprintf(fd,"\tflag : %2d (0x%04x)\n",mFlag,mFlag);
00073 }
00074
00075
00076
00077 ClassImp(EEmcL3Tracks)
00078
00079
00080 const Int_t EEmcL3Tracks::mAllocTracks=32;
00081
00082
00083
00084
00085 EEmcL3Tracks::EEmcL3Tracks() {
00086 mHelix = new TClonesArray("EEmcHelix",1000);
00087 mDedx = new Float_t[mAllocTracks];
00088 mTrackSize = mAllocTracks;
00089 clear();
00090 }
00091
00092
00093
00094
00095 EEmcL3Tracks::~EEmcL3Tracks()
00096 {
00097 if(mHelix) delete mHelix;
00098 if(mDedx) delete [] mDedx;
00099 }
00100
00101
00102
00103 int
00104 EEmcL3Tracks::add(EEmcHelix &h, Float_t de)
00105 {
00106
00107 if(mNTracks >= mTrackSize ) {
00108 Int_t newSize = mTrackSize + mAllocTracks;
00109 Float_t *newDedx = new Float_t[newSize];
00110 memcpy(newDedx,mDedx,mTrackSize*sizeof(Float_t));
00111 delete [] mDedx;
00112 mDedx = newDedx;
00113 mTrackSize = newSize;
00114
00115 }
00116
00117 TClonesArray &helices = *mHelix;
00118 mDedx[mNTracks] = de;
00119 EEmcHelix *helix = new(helices[mNTracks]) EEmcHelix(h);
00120 mNTracks++;
00121
00122 return ( (helix==NULL) ? 1 : 0 );
00123 }
00124
00125
00126
00127
00128
00129 void
00130 EEmcL3Tracks::clear()
00131 {
00132 mHelix->Clear();
00133 mNTracks=0;
00134 mVertX = mVertY = mVertZ = MAXFLOAT;
00135 }
00136
00137
00138
00139 EEmcHelix*
00140 EEmcL3Tracks::getHelix (int i)
00141 {
00142 return (0<=i && i<mNTracks) ? ((EEmcHelix *)(mHelix->At(i))) : NULL;
00143 }
00144
00145
00146
00147
00148
00149
00150
00151
00152 void EEmcL3Tracks :: print(FILE *fd) const
00153 {
00154 fprintf(fd,"L3 tracks %d:\n",mNTracks);
00155 if(mNTracks<=0) return;
00156 fprintf(fd,"\tvertex: (%+8.3f %+8.3f %+8.3f)\n",mVertX,mVertY,mVertZ);
00157 for(Int_t i=0;i<mHelix->GetEntries();i++) {
00158 fprintf(fd,"\ttrack#%d dE/dx=%g\n",i,mDedx[i]);
00159 ((EEmcHelix *)(mHelix->At(i)))->print(fd);
00160 }
00161 }
00162
00163
00164