00001
00019 #include "TMath.h"
00020 #include "StEEmcIUPair.h"
00021 #include <iostream>
00022 ClassImp(StEEmcIUPair);
00023
00024
00025
00026 StEEmcIUPair::StEEmcIUPair()
00027 {
00028 mMass=-1.;
00029 mEnergy=-1;
00030 mZgg=-1;
00031 mPhigg=-1;
00032 mMomentum=TVector3(0,0,0);
00033 mVertex1=mMomentum;
00034 mVertex2=mMomentum;
00035 }
00036
00037
00038 StEEmcIUPair::StEEmcIUPair( StEEmcIUPoint p1, StEEmcIUPoint p2 )
00039 {
00040 StEEmcIUPair(p1,p2,TVector3(0,0,0),TVector3(0,0,0));
00041 }
00042
00043 StEEmcIUPair::StEEmcIUPair( StEEmcIUPoint p1, StEEmcIUPoint p2, TVector3 v )
00044 {
00045 StEEmcIUPair(p1,p2,v, v);
00046 }
00047
00048 StEEmcIUPair::StEEmcIUPair( StEEmcIUPoint p1, StEEmcIUPoint p2, TVector3 v1, TVector3 v2 )
00049 {
00050 mPoint[0]=p1;
00051 mPoint[1]=p2;
00052 mVertex1=v1;
00053 mVertex2=v2;
00054
00056 mMass=0.;
00057 mEnergy=0.;
00058 mZgg=0.;
00059 mPhigg=0.;
00060 mMomentum=TVector3(0,0,0);
00061
00063 Kinematics();
00064 }
00065
00066 void StEEmcIUPair::Kinematics()
00067 {
00068
00070
00071 mEnergy=mPoint[0].energy() + mPoint[1].energy();
00072 if ( mEnergy <= 0. ) {
00073 mMass=-1.0;
00074 return;
00075 }
00076
00077
00079 mZgg=TMath::Abs( mPoint[0].energy()-mPoint[1].energy() ) / mEnergy;
00081 TVector3 momentum1=( mPoint[0].position() - mVertex1 ).Unit();
00082 momentum1 *= mPoint[0].energy();
00083
00084 TVector3 momentum2=( mPoint[1].position() - mVertex2 ).Unit();
00085 momentum2 *= mPoint[1].energy();
00087 mPhigg=momentum1.Angle(momentum2);
00088
00090 mMomentum=momentum1+momentum2;
00091
00093 mVertex = ( mPoint[0].energy() * mVertex1 + mPoint[1].energy() * mVertex2 );
00094 mVertex *= 1./mEnergy;
00095
00097 mMass = mEnergy * TMath::Sin(mPhigg/2.0) * TMath::Sqrt( 1.0 - mZgg*mZgg );
00098
00099
00100 }
00101
00102
00103 StEEmcIUPair::StEEmcIUPair( const StEEmcIUPair &old )
00104 {
00105 mVertex1=old.mVertex1;
00106 mVertex2=old.mVertex2;
00107 mPoint[0]=old.mPoint[0];
00108 mPoint[1]=old.mPoint[1];
00110 mMass=0.;
00111 mEnergy=0.;
00112 mZgg=0.;
00113 mPhigg=0.;
00114 mMomentum=TVector3(0,0,0);
00116 Kinematics();
00117 }
00118
00119
00120 void StEEmcIUPair::print()
00121 {
00122 std::cout << "pair mass=" << mass()
00123 << " e1=" << mPoint[0].energy()
00124 << " e2=" << mPoint[1].energy()
00125 << " zgg=" << zgg()
00126 << " tow1=" << mPoint[0].tower(0).name()
00127 << " tow2=" << mPoint[1].tower(0).name()
00128 << " zvert=" << mVertex.Z()
00129 << " phigg=" << phigg()
00130 << " pz=" << pz()
00131 << std::endl;
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166 }