ExtMdcTrack Class Reference

#include <ExtMdcTrack.h>

List of all members.

Public Member Functions

 ExtMdcTrack (void)
 ~ExtMdcTrack (void)
void SetMsgFlag (bool aFlag)
bool SetMdcRecTrkCol (RecMdcTrackCol *aPointer)
bool SetMdcKalTrkCol (RecMdcKalTrackCol *aPointer)
bool SetParId (int pid)
bool GetOneGoodTrk ()
bool ReadTrk (int pid)
int GetTrackID ()
RecMdcTrackGetMdcRecTrkPtr () const
const Hep3Vector GetPosition () const
const Hep3Vector GetMomentum () const
const HepSymMatrix GetErrorMatrix () const
double GetTrackLength () const
double GetTrkTof () const
double GetPt () const
double GetParticleCharge () const

Private Member Functions

void Convert ()

Private Attributes

bool myMsgFlag
int myTrackID
RecMdcTrackColmyMdcTrackCol
RecMdcTrackCol::iterator myMdcRecTrkIter
RecMdcKalTrackColmyMdcKalTrackCol
RecMdcKalTrackCol::iterator myMdcKalTrkIter
string myInputTrk
int myParID
HepVector myHelixPar
HepPoint3D myPivot
HepSymMatrix myMdcErr
double myPhiTerm
double myTrkLength
double myTrkTof
HepPoint3D myLPosition


Detailed Description

Definition at line 38 of file ExtMdcTrack.h.


Constructor & Destructor Documentation

ExtMdcTrack::ExtMdcTrack ( void   ) 

Definition at line 29 of file ExtMdcTrack.cxx.

ExtMdcTrack::~ExtMdcTrack ( void   ) 

Definition at line 31 of file ExtMdcTrack.cxx.

00031 {}


Member Function Documentation

void ExtMdcTrack::Convert (  )  [private]

Definition at line 202 of file ExtMdcTrack.cxx.

References myHelixPar, myMdcErr, and myPivot.

00203 {
00204         myHelixPar(1)*=10.;
00205         myHelixPar(3)*=0.001;
00206         myHelixPar(4)*=10.;
00207         myPivot*=10.;
00208         myMdcErr.fast(1,1)*=100.;
00209         myMdcErr.fast(2,1)*=10.;
00210         myMdcErr.fast(3,1)*=0.01;
00211         myMdcErr.fast(3,2)*=0.001;
00212         myMdcErr.fast(3,3)*=0.000001;
00213         myMdcErr.fast(4,1)*=100.;
00214         myMdcErr.fast(4,2)*=10.;
00215         myMdcErr.fast(4,3)*=0.01;
00216         myMdcErr.fast(4,4)*=100.;
00217         myMdcErr.fast(5,1)*=10.;
00218         myMdcErr.fast(5,3)*=0.001;
00219         myMdcErr.fast(5,4)*=10.;
00220 }

const HepSymMatrix ExtMdcTrack::GetErrorMatrix (  )  const

Definition at line 251 of file ExtMdcTrack.cxx.

References cos(), Ext_Helix::Ea(), genRecEmupikp::i, ganga-rec::j, Ext_Helix::kappa(), Ext_Helix::momentum(), myHelixPar, myMdcErr, myMsgFlag, myPhiTerm, myPivot, NdimExtErr(), NdimMdcErr(), Ext_Helix::phi0(), phi0, sin(), and Ext_Helix::x().

Referenced by TrkExtAlg::execute().

00252 {
00253         Ext_Helix aHelix(myPivot,myHelixPar,myMdcErr);
00254 //      aHelix.pivot(aHelix.x(myPhiTerm));//Move the pivot to the PhiTerm position.
00255 
00256         Hep3Vector aPoint = aHelix.x(myPhiTerm);
00257         double phi0 = aHelix.phi0();
00258         double kappaInv = 1.0/aHelix.kappa();
00259         double cosPhi0 = cos(phi0);
00260         double sinPhi0 = sin(phi0);
00261         // 0 -> myPhiTerm, 2009-5-29, by wangll
00262 //      double px = aHelix.momentum(0).x(); 
00263 //      double py = aHelix.momentum(0).y();
00264 //      double pz = aHelix.momentum(0).z();
00265         double px = aHelix.momentum(myPhiTerm).x(); 
00266         double py = aHelix.momentum(myPhiTerm).y();
00267         double pz = aHelix.momentum(myPhiTerm).z();
00268 
00269         //Calculate the Jacobian: d(xp)/d(helix).
00270         HepMatrix Helix2XpJcb(NdimExtErr,NdimMdcErr,0);
00271 
00272         Helix2XpJcb(1,1) = cosPhi0;
00273         Helix2XpJcb(1,2) = myPivot.y()-aPoint.y();
00274         Helix2XpJcb(1,3) = (myPivot.x()-aPoint.x()+myHelixPar(1)*cosPhi0)*kappaInv;
00275         Helix2XpJcb(2,1) = sinPhi0;
00276         Helix2XpJcb(2,2) = aPoint.x()-myPivot.x();
00277         Helix2XpJcb(2,2) = (myPivot.y()-aPoint.y()+myHelixPar(1)*sinPhi0)*kappaInv;
00278         Helix2XpJcb(3,3) = (myPivot.z()-aPoint.z()+myHelixPar(4))*kappaInv;
00279         Helix2XpJcb(3,4) = 1.0;
00280         Helix2XpJcb(3,5) = (aPoint.z()-myPivot.z()-myHelixPar(4))/myHelixPar(5);
00281         Helix2XpJcb(4,2) = -py;
00282         Helix2XpJcb(4,3) = -px * kappaInv;
00283         Helix2XpJcb(5,2) =  px;
00284         Helix2XpJcb(5,3) = -py * kappaInv;
00285         Helix2XpJcb(6,3) = -pz * kappaInv;
00286         Helix2XpJcb(6,5) = fabs(kappaInv);
00287 
00288         //Calculate the Ext error matrix(6x6) in (x,p).
00289 //      if(myMsgFlag) cout<<"Error matrix at new pivot: "<<endl;
00290 //      aHelix.Ea();
00291 //      cout<<"haha"<<endl;
00292         HepSymMatrix aErrorMatrix = aHelix.Ea().similarity(Helix2XpJcb);
00293         if(myMsgFlag) cout<<"PhiTerm Error matrix:"<<aErrorMatrix<<endl;
00294         
00295         //Uints Conversion.
00296         for(int i=1;i<=6;i++)
00297         {
00298                 for(int j=1;j<=i;j++)
00299                 {
00300                         if(i<=3 && j<=3) aErrorMatrix.fast(i,j)*=100.0;
00301                         if(i>=4 && j>=4) aErrorMatrix.fast(i,j)*=1.0e+6;
00302                         if(i>=4 && j<=3) aErrorMatrix.fast(i,j)*=10000.0;
00303                 }
00304         }
00305 
00306         return aErrorMatrix;
00307 }

RecMdcTrack * ExtMdcTrack::GetMdcRecTrkPtr (  )  const

Definition at line 222 of file ExtMdcTrack.cxx.

References myMdcRecTrkIter.

00223 {
00224         return (*myMdcRecTrkIter);
00225 }

const Hep3Vector ExtMdcTrack::GetMomentum (  )  const

Definition at line 242 of file ExtMdcTrack.cxx.

References Ext_Helix::momentum(), myHelixPar, myMdcErr, myMsgFlag, myPhiTerm, and myPivot.

Referenced by TrkExtAlg::execute(), and ReadTrk().

00243 {
00244         Ext_Helix aHelix(myPivot,myHelixPar,myMdcErr);
00245         Hep3Vector aMomentum = aHelix.momentum(myPhiTerm);//In GeV/c units.
00246         if(myMsgFlag) cout<<"PhiTerm Momentum: "<<aMomentum<<endl;
00247         aMomentum*=1000.0;//In MeV/c uints.
00248         return (aMomentum);
00249 }

bool ExtMdcTrack::GetOneGoodTrk (  ) 

Definition at line 51 of file ExtMdcTrack.cxx.

References myInputTrk, myMdcKalTrackCol, myMdcKalTrkIter, myMdcRecTrkIter, myMdcTrackCol, and myMsgFlag.

Referenced by TrkExtAlg::execute().

00052 {       
00053         if(myMsgFlag) cout<<"ExtMdcTrack::GetOneGoodTrk() begin"<<endl;
00054         if(myInputTrk=="Mdc")
00055         {
00056                 myMdcRecTrkIter++;
00057                 if(myMdcRecTrkIter!=myMdcTrackCol->end()) return true;
00058                 else
00059                 {
00060                         if(myMsgFlag) cout<<"No more track!"<<endl; 
00061                         return false;
00062                 }
00063         }
00064         else if(myInputTrk=="Kal") // use KalTrack as input
00065         {
00066                 myMdcKalTrkIter++;
00067                 if(myMdcKalTrkIter!=myMdcKalTrackCol->end()) return true;
00068                 else
00069                 {
00070                         if(myMsgFlag) cout<<"No more track!"<<endl; 
00071                         return false;
00072                 }
00073         }
00074 }

double ExtMdcTrack::GetParticleCharge (  )  const

Definition at line 356 of file ExtMdcTrack.cxx.

References myHelixPar.

Referenced by TrkExtAlg::execute().

00357 {
00358         return ((myHelixPar[2]>0.)? 1.0:-1.0);
00359 }

const Hep3Vector ExtMdcTrack::GetPosition (  )  const

Definition at line 227 of file ExtMdcTrack.cxx.

References myHelixPar, myMdcErr, myMsgFlag, myPhiTerm, myPivot, and Ext_Helix::x().

Referenced by TrkExtAlg::execute().

00228 {
00229 //      if(myInputTrk=="Mdc") {
00230                 Ext_Helix aHelix(myPivot,myHelixPar,myMdcErr);
00231                 Hep3Vector aPoint = aHelix.x(myPhiTerm);
00232                 if(myMsgFlag) cout<<"PhiTerm Position: "<<aPoint<<endl;
00233                 aPoint*=10.0;
00234                 return (aPoint);
00235 /*      }
00236         else if(myInputTrk=="Kal") {
00237                 return (myLPosition);
00238         }
00239 */      
00240 }

double ExtMdcTrack::GetPt (  )  const

Definition at line 351 of file ExtMdcTrack.cxx.

References myHelixPar.

Referenced by ReadTrk().

00352 {
00353         return (1.0/fabs(myHelixPar[2]));
00354 }

int ExtMdcTrack::GetTrackID (  )  [inline]

Definition at line 50 of file ExtMdcTrack.h.

References myTrackID.

Referenced by TrkExtAlg::execute().

00050 {return myTrackID;}//Get RecMdcTrackl ID.

double ExtMdcTrack::GetTrackLength (  )  const

Definition at line 309 of file ExtMdcTrack.cxx.

References myHelixPar, myInputTrk, myMdcErr, myPhiTerm, myPivot, myTrkLength, Ext_Helix::radius(), and Ext_Helix::tanl().

Referenced by TrkExtAlg::execute(), and ReadTrk().

00310 {
00311         if(myInputTrk=="Mdc") {
00312 
00313 /*      //old version
00314         Helix aHelix(myPivot,myHelixPar,myMdcErr);
00315         
00316         double phi0 = aHelix.phi0();
00317         HepPoint3D w = -(*this).GetParticleCharge() * aHelix.center();
00318         Hep3Vector center( w.x(),w.y(),w.z() );
00319         double centerX = center.x();
00320         double centerY = center.y();
00321         double phiCenter;
00322         if(fabs(centerX) > 1.0e-10)
00323         {
00324                 phiCenter = atan2(centerY,centerX);
00325                 if(phiCenter < 0.) phiCenter += 2.0*M_PI;
00326         }
00327         else
00328         {
00329                 phiCenter = (centerY>0)? M_PI_2:3.0*M_PI_2;
00330         }
00331         double dPhi = fabs(phi0 + myPhiTerm - phiCenter);
00332         if(dPhi >= 2.0*M_PI) dPhi -= 2.0*M_PI;
00333         double tanLambda = aHelix.tanl();
00334         double cosLambdaInv = sqrt(tanLambda*tanLambda + 1.0);
00335         return (10*fabs(aHelix.radius() * dPhi * cosLambdaInv));//10* for cm -> mm
00336 */      
00337 
00338         Ext_Helix aHelix(myPivot,myHelixPar,myMdcErr);
00339         double dPhi = fabs(myPhiTerm);
00340         double tanLambda = aHelix.tanl();
00341         double cosLambdaInv = sqrt(tanLambda*tanLambda + 1.0);
00342         return (10*fabs(aHelix.radius() * dPhi * cosLambdaInv));//10* for cm -> mm
00343 
00344         }
00345         else if(myInputTrk=="Kal")
00346         {
00347                 return 10*myTrkLength; //10* for cm -> mm
00348         }
00349 }

double ExtMdcTrack::GetTrkTof (  )  const [inline]

Definition at line 56 of file ExtMdcTrack.h.

References myTrkTof.

Referenced by TrkExtAlg::execute().

00056 {return myTrkTof;};

bool ExtMdcTrack::ReadTrk ( int  pid  ) 

Definition at line 77 of file ExtMdcTrack.cxx.

References GetMomentum(), GetPt(), GetTrackLength(), mass, myHelixPar, myInputTrk, myLPosition, myMdcErr, myMdcKalTrackCol, myMdcKalTrkIter, myMdcRecTrkIter, myMdcTrackCol, myMsgFlag, myParID, myPhiTerm, myPivot, myTrackID, myTrkLength, myTrkTof, and pid.

Referenced by TrkExtAlg::execute().

00078 {       
00079         if(myMsgFlag) cout<<"ExtMdcTrack::ReadTrk() begin"<<endl;
00080         myParID = pid;
00081         if(myInputTrk=="Mdc")
00082         {
00083                 if(myMdcRecTrkIter!=myMdcTrackCol->end())
00084                 {
00085                         RecMdcTrack *aMdcTrack = *myMdcRecTrkIter;
00086                         //                      if(!aMdcTrack->getStat())//If good track.Now status default 0
00087                         {
00088                                 if(myMsgFlag) cout<<"Read a good track!"<<endl;
00089 
00090                                 //get MdcTrk data
00091                                 myTrackID = aMdcTrack->trackId();
00092                                 myHelixPar = aMdcTrack->helix();
00093                                 myPivot = aMdcTrack->getPivot();
00094                                 myMdcErr = aMdcTrack->err();
00095                                 //                              double aPhiTerm = aMdcTrack->getFiTerm();
00096                                 myPhiTerm = aMdcTrack->getFiTerm();
00097                                 myTrkLength = GetTrackLength();
00098                                 double p = (GetMomentum()).mag();
00099                                 double beta = p/sqrt(mass[myParID]*mass[myParID]+p*p);
00100                                 myTrkTof = myTrkLength/(beta*299.792458);
00101 
00102                                 /*                              //Start caculation of myPhiTerm.(when pivot is (0,0,0).)
00103                                                                 double r = DBL_MAX;
00104                                                                 double rMdc = 81.0;
00105                                                                 double dro = myHelixPar(1);
00106                                                                 if(myHelixPar(3)!=0.0)
00107                                                                 r = 333.564095/myHelixPar(3);
00108                                                                 if( fabs(2.0*r+dro)>rMdc && fabs(dro)<rMdc )
00109                                                                 {
00110                                                                 double aValue = ((dro+r)*(dro+r)+r*r-rMdc*rMdc)/2.0/fabs(r)/fabs(dro+r);
00111                                                                 if(r<0.0) myPhiTerm = acos(aValue);
00112                                                                 else myPhiTerm = -1.0*acos(aValue);
00113                                                                 }
00114                                                                 else
00115                                                                 {
00116                                                                 if(myMsgFlag) cout<<"Get a track which can't go out of MDC!"<<endl;
00117                                                                 myMdcRecTrkIter++;
00118                                                                 continue;
00119                                                                 }
00120                                  */                             
00121                                 //                              double aTrackLength=fabs(r*myPhiTerm)*sqrt(myHelixPar(5)*myHelixPar(5)+1);
00122                                 if(myMsgFlag)
00123                                 {
00124                                         cout<<"MDC track:"<<myTrackID<<endl;
00125                                         cout<<"Helix: "<<myHelixPar;
00126                                         cout<<"pivot: "<<myPivot<<"cm"<<endl;
00127                                         cout<<"Error: "<<myMdcErr<<endl;
00128 
00129                                         /*                              Convert();
00130                                                                         cout<<"********after convert:"<<endl;
00131                                                                         cout<<"Helix: "<<myHelixPar;
00132                                                                         cout<<"pivot: "<<myPivot;
00133                                                                         cout<<"Error: "<<myMdcErr<<endl;
00134                                          */
00135                                         cout<<"Pt: "<<GetPt()<<"GeV/c"<<endl;
00136                                         cout<<"PhiTerm: "<<myPhiTerm<<endl;
00137                                         //                                      cout<<"recPhiTerm: "<<aPhiTerm<<endl;
00138                                         cout<<"trackLength(mm): "<<GetTrackLength()<<endl;
00139                                         //                                      cout<<"trackLengthTest(cm): "<<aTrackLength<<endl;
00140                                 }
00141 
00142                                 return true;
00143                         }
00144                         //                      else
00145                         //                      {
00146                         //                              myMdcRecTrkIter++;
00147                         //                              cout<<"Get a bad track!"<<endl;
00148                         //                      }
00149                 }
00150                 else
00151                 {
00152                         if(myMsgFlag) cout<<"No more track!"<<endl; 
00153                         return false;
00154                 }
00155         }
00156         else if(myInputTrk=="Kal") // use KalTrack as input
00157         {
00158                 if(myMdcKalTrkIter!=myMdcKalTrackCol->end())
00159                 {
00160                         RecMdcKalTrack *aMdcKalTrack = *myMdcKalTrkIter;
00161                         {
00162                                 if(myMsgFlag) cout<<"Get a good track!"<<endl;
00163 
00164                                 //get MdcTrk data
00165                                 myTrackID = aMdcKalTrack->getTrackId();
00166                                 myHelixPar = aMdcKalTrack->getLHelix(myParID);
00167                                 //myPivot = HepPoint3D(0,0,0);
00168                                 myPivot = aMdcKalTrack->getLPivot(myParID);
00169                                 myMdcErr = aMdcKalTrack->getLError(myParID);
00170                                 myPhiTerm = aMdcKalTrack->getFiTerm(myParID);
00171                                 myPhiTerm = 0.0;
00172                                 myTrkLength = aMdcKalTrack->getPathSM(myParID);
00173                                 myLPosition = aMdcKalTrack->getLPoint(myParID);
00174                                 myTrkTof = aMdcKalTrack->getTof(myParID);
00175                                 //cout<<"myInitialTof = "<<myTrkTof<<endl;
00176 
00177                                 if(myMsgFlag)
00178                                 {
00179                                         cout<<"Kal track:"<<myTrackID<<endl;
00180                                         cout<<"myParID:"<<myParID<<endl;
00181                                         cout<<"Helix: "<<myHelixPar;
00182                                         cout<<"pivot: "<<myPivot<<"cm"<<endl;
00183                                         cout<<"Error: "<<myMdcErr<<endl;
00184                                         cout<<"Pt: "<<GetPt()<<"GeV/c"<<endl;
00185                                         cout<<"PhiTerm: "<<myPhiTerm<<endl;
00186 //                                      cout<<"trackLength(mm): "<<GetTrackLength()<<endl;
00187                                         cout<<"trackLength(cm): "<<myTrkLength<<endl;
00188                                         cout<<"myTrkTof: "<<myTrkTof<<endl;
00189                                         cout<<"Last point position: "<<myLPosition<<endl;
00190                                 }
00191                                 return true;
00192                         }
00193                 }
00194                 else
00195                 {
00196                         if(myMsgFlag) cout<<"No more track!"<<endl; 
00197                         return false;
00198                 }
00199             }
00200 }

bool ExtMdcTrack::SetMdcKalTrkCol ( RecMdcKalTrackCol aPointer  ) 

Definition at line 42 of file ExtMdcTrack.cxx.

References myInputTrk, myMdcKalTrackCol, and myMdcKalTrkIter.

Referenced by TrkExtAlg::execute().

00043 {
00044         myMdcKalTrackCol = aPointer;
00045         myMdcKalTrkIter = myMdcKalTrackCol->begin();
00046         myMdcKalTrkIter--;
00047         myInputTrk="Kal";
00048         return true;
00049 }

bool ExtMdcTrack::SetMdcRecTrkCol ( RecMdcTrackCol aPointer  ) 

Definition at line 33 of file ExtMdcTrack.cxx.

References myInputTrk, myMdcRecTrkIter, and myMdcTrackCol.

Referenced by TrkExtAlg::execute().

00034 {
00035         myMdcTrackCol = aPointer;
00036         myMdcRecTrkIter = myMdcTrackCol->begin();
00037         myMdcRecTrkIter--;
00038         myInputTrk="Mdc";
00039         return true;
00040 }

void ExtMdcTrack::SetMsgFlag ( bool  aFlag  )  [inline]

Definition at line 44 of file ExtMdcTrack.h.

References myMsgFlag.

Referenced by TrkExtAlg::execute().

00044 {myMsgFlag=aFlag;};

bool ExtMdcTrack::SetParId ( int  pid  )  [inline]

Definition at line 47 of file ExtMdcTrack.h.

References myParID.

00047 { myParID=pid; return true;};


Member Data Documentation

HepVector ExtMdcTrack::myHelixPar [private]

Definition at line 72 of file ExtMdcTrack.h.

Referenced by Convert(), GetErrorMatrix(), GetMomentum(), GetParticleCharge(), GetPosition(), GetPt(), GetTrackLength(), and ReadTrk().

string ExtMdcTrack::myInputTrk [private]

Definition at line 69 of file ExtMdcTrack.h.

Referenced by GetOneGoodTrk(), GetTrackLength(), ReadTrk(), SetMdcKalTrkCol(), and SetMdcRecTrkCol().

HepPoint3D ExtMdcTrack::myLPosition [private]

Definition at line 78 of file ExtMdcTrack.h.

Referenced by ReadTrk().

HepSymMatrix ExtMdcTrack::myMdcErr [private]

Definition at line 74 of file ExtMdcTrack.h.

Referenced by Convert(), GetErrorMatrix(), GetMomentum(), GetPosition(), GetTrackLength(), and ReadTrk().

RecMdcKalTrackCol* ExtMdcTrack::myMdcKalTrackCol [private]

Definition at line 67 of file ExtMdcTrack.h.

Referenced by GetOneGoodTrk(), ReadTrk(), and SetMdcKalTrkCol().

RecMdcKalTrackCol::iterator ExtMdcTrack::myMdcKalTrkIter [private]

Definition at line 68 of file ExtMdcTrack.h.

Referenced by GetOneGoodTrk(), ReadTrk(), and SetMdcKalTrkCol().

RecMdcTrackCol::iterator ExtMdcTrack::myMdcRecTrkIter [private]

Definition at line 66 of file ExtMdcTrack.h.

Referenced by GetMdcRecTrkPtr(), GetOneGoodTrk(), ReadTrk(), and SetMdcRecTrkCol().

RecMdcTrackCol* ExtMdcTrack::myMdcTrackCol [private]

Definition at line 65 of file ExtMdcTrack.h.

Referenced by GetOneGoodTrk(), ReadTrk(), and SetMdcRecTrkCol().

bool ExtMdcTrack::myMsgFlag [private]

Definition at line 63 of file ExtMdcTrack.h.

Referenced by GetErrorMatrix(), GetMomentum(), GetOneGoodTrk(), GetPosition(), ReadTrk(), and SetMsgFlag().

int ExtMdcTrack::myParID [private]

Definition at line 70 of file ExtMdcTrack.h.

Referenced by ReadTrk(), and SetParId().

double ExtMdcTrack::myPhiTerm [private]

Definition at line 75 of file ExtMdcTrack.h.

Referenced by GetErrorMatrix(), GetMomentum(), GetPosition(), GetTrackLength(), and ReadTrk().

HepPoint3D ExtMdcTrack::myPivot [private]

Definition at line 73 of file ExtMdcTrack.h.

Referenced by Convert(), GetErrorMatrix(), GetMomentum(), GetPosition(), GetTrackLength(), and ReadTrk().

int ExtMdcTrack::myTrackID [private]

Definition at line 64 of file ExtMdcTrack.h.

Referenced by GetTrackID(), and ReadTrk().

double ExtMdcTrack::myTrkLength [private]

Definition at line 76 of file ExtMdcTrack.h.

Referenced by GetTrackLength(), and ReadTrk().

double ExtMdcTrack::myTrkTof [private]

Definition at line 77 of file ExtMdcTrack.h.

Referenced by GetTrkTof(), and ReadTrk().


Generated on Tue Nov 29 23:19:34 2016 for BOSS_7.0.2 by  doxygen 1.4.7