00001
00002
00003
00004
00005
00006
00007
00008 #ifndef StHbtIO_cc
00009 #define StHbtIO_cc
00010
00011 #include "StHbtMaker/Infrastructure/StHbtKink.hh"
00012 #include "StHbtMaker/Infrastructure/StHbtV0.hh"
00013 #include "StHbtMaker/Infrastructure/StHbtTrack.hh"
00014 #include "StHbtMaker/Infrastructure/StHbtEvent.hh"
00015
00016 #include <float.h>
00017 #include <limits.h>
00018
00019
00020
00021 ostream& operator<<(ostream& out, StHbtTrack& trk){
00022
00023 float ChiSqXYtemp = (fabs(trk.mChiSqXY)>FLT_MAX) ? FLT_MAX : trk.mChiSqXY;
00024
00025 return (
00026 out
00027 << trk.mTrackId << " "
00028 << trk.mCharge << " "
00029 << trk.mNHits << " "
00030 << trk.mNHitsPoss << " "
00031 << trk.mNSigmaElectron << " "
00032 << trk.mNSigmaPion << " "
00033 << trk.mNSigmaKaon << " "
00034 << trk.mNSigmaProton << " "
00035 << trk.mdEdx << " "
00036 << trk.mDCAxy << " "
00037 << trk.mDCAz << " "
00038 << ChiSqXYtemp << " "
00039 << trk.mChiSqZ << " "
00040 << trk.mP.x() << " "
00041 << trk.mP.y() << " "
00042 << trk.mP.z() << " "
00043
00044 << trk.mHelix.curvature() << " "
00045 << trk.mHelix.dipAngle() << " "
00046 << trk.mHelix.phase() << " "
00047 << trk.mHelix.origin().x() << " "
00048 << trk.mHelix.origin().y() << " "
00049 << trk.mHelix.origin().z() << " "
00050 << trk.mHelix.h() << " "
00051 << trk.mMap[0] << " "
00052 << trk.mMap[1]
00053 );
00054 }
00055
00056 istream& operator>>(istream& in, StHbtTrack& trk){
00057 double x,y,z;
00058 double curvature, dipAngle, phase;
00059 double xorigin,yorigin,zorigin;
00060 int h;
00061 in
00062 >> trk.mTrackId
00063 >> trk.mCharge
00064 >> trk.mNHits
00065 >> trk.mNHitsPoss
00066 >> trk.mNSigmaPion
00067 >> trk.mNSigmaKaon
00068 >> trk.mNSigmaProton
00069 >> trk.mdEdx
00070 >> trk.mDCAxy
00071 >> trk.mDCAz
00072 >> trk.mChiSqXY
00073 >> trk.mChiSqZ
00074 >> x
00075 >> y
00076 >> z
00077
00078 >> curvature
00079 >> dipAngle
00080 >> phase
00081 >> xorigin
00082 >> yorigin
00083 >> zorigin
00084 >> h
00085 >> trk.mMap[0]
00086 >> trk.mMap[1];
00087
00088 trk.mP.setX(x);
00089 trk.mP.setY(y);
00090 trk.mP.setZ(z);
00091
00092 trk.mPt = ::sqrt(x*x+y*y);
00093
00094 StThreeVectorD origin(xorigin,yorigin,zorigin);
00095 trk.mHelix.setParameters(curvature,dipAngle,phase,origin,h);
00096 return in;
00097 }
00098
00099
00100 ostream& operator<<(ostream& out, StHbtV0& v0){
00101
00102 return (out
00103 << v0.mDecayLengthV0 << " " << v0.mDecayVertexV0.x() << " "
00104 << v0.mDecayVertexV0.y() << " " << v0.mDecayVertexV0.z() << " "
00105 << v0.mDcaV0Daughters << " " << v0.mDcaV0ToPrimVertex << " "
00106 << v0.mDcaPosToPrimVertex <<" "<< v0.mDcaNegToPrimVertex << " "
00107 << v0.mMomPos.x() << " " << v0.mMomPos.y() << " "
00108 << v0.mMomPos.z() << " " << v0.mMomNeg.x() << " "
00109 << v0.mMomNeg.y() << " " << v0.mMomNeg.z() << " "
00110 << v0.mTrackTopologyMapPos[0] << " " << v0.mTrackTopologyMapPos[1] << " "
00111 << v0.mTrackTopologyMapNeg[0] << " " << v0.mTrackTopologyMapNeg[1] << " "
00112 << v0.mRapLambda << " " << v0.mRapK0Short << " "
00113 << v0.mCTauLambda << " " << v0.mCTauK0Short << " "
00114 << v0.mKeyNeg << " " << v0.mKeyPos );
00115 }
00116
00117
00118 istream& operator>>(istream& in, StHbtV0& v0){
00119 in
00120 >> v0.mDecayLengthV0 >> v0.mDecayVertexV0
00121 >> v0.mDcaV0Daughters >> v0.mDcaV0ToPrimVertex
00122 >> v0.mDcaPosToPrimVertex >> v0.mDcaNegToPrimVertex
00123 >> v0.mMomPos >> v0.mMomNeg
00124 >> v0.mTrackTopologyMapPos[0] >> v0.mTrackTopologyMapPos[1]
00125 >> v0.mTrackTopologyMapNeg[0] >> v0.mTrackTopologyMapNeg[1]
00126 >> v0.mRapLambda >> v0.mRapK0Short
00127 >> v0.mCTauLambda >> v0.mCTauK0Short
00128 >> v0.mKeyNeg >> v0.mKeyPos;
00129 v0.UpdateV0();
00130 return (in) ;
00131 }
00132
00133
00134 ostream& operator<<(ostream& out, StHbtEvent& ev){
00135 out
00136 << ev.mEventNumber << " " << ev.mRunNumber << " "
00137 << ev.mCtbMultiplicity << " " << ev.mZdcAdc[0] << " "
00138 << ev.mZdcAdc[1] << " " << ev.mTpcNhits << " "
00139 << ev.mNumberOfTracks << " " << ev.mNumberOfGoodTracks << " "
00140 << ev.mReactionPlane[0] << " " << ev.mReactionPlane[1] << " "
00141 << ev.mPrimVertPos.x() << " " << ev.mPrimVertPos.y() << " "
00142 << ev.mPrimVertPos.z() << " " << ev.mMagneticField << endl;
00143 out << ev.mTrackCollection->size() << endl;;
00144 StHbtTrack trk;
00145 for (StHbtTrackIterator iter=ev.mTrackCollection->begin();
00146 iter != ev.mTrackCollection->end(); iter++){
00147 trk= **iter;
00148 out << trk << endl;
00149 }
00150
00151 out << ev.mV0Collection->size() << endl;;
00152 StHbtV0 v0;
00153 for (StHbtV0Iterator iterv0=ev.mV0Collection->begin();
00154 iterv0 != ev.mV0Collection->end(); iterv0++){
00155 v0 = **iterv0;
00156 out << v0 << endl;
00157 }
00158
00159 out << endl;
00160 return out;
00161 }
00162
00163 istream& operator>>(istream& in, StHbtEvent& ev){
00164
00165 double x,y,z;
00166 in >> ev.mEventNumber;
00167 if (in.eof()) {
00168 cout << "Hit end of file " << endl;
00169 return in;
00170 }
00171 in >> ev.mRunNumber
00172 >> ev.mCtbMultiplicity
00173 >> ev.mZdcAdc[0] >> ev.mZdcAdc[1]
00174 >> ev.mTpcNhits >> ev.mNumberOfTracks
00175 >> ev.mNumberOfGoodTracks >> ev.mReactionPlane[0]
00176 >> ev.mReactionPlane[1] >> x
00177 >> y >> z
00178 >> ev.mMagneticField;
00179 ev.mPrimVertPos.setX(x);
00180 ev.mPrimVertPos.setY(y);
00181 ev.mPrimVertPos.setZ(z);
00182
00183
00184
00185 long NtracksInCollection;
00186 in >> NtracksInCollection;
00187 if (!(in.good())){
00188 cout << "StHbtEvent input operator finds stream in bad state ! " << endl;
00189 return in;
00190 }
00191
00192
00193
00194
00195
00196
00197 StHbtTrackIterator iter;
00198 for (iter=ev.mTrackCollection->begin();iter!=ev.mTrackCollection->end();iter++){
00199 delete *iter;
00200 }
00201
00202 ev.mTrackCollection->clear();
00203
00204 for (int itrk=0; itrk<NtracksInCollection; itrk++){
00205 StHbtTrack* trk = new StHbtTrack;
00206 if ( !(in >> (*trk))){
00207 cout << "StHbtEvent input operator finds stream in bad state during track read ! ";
00208 cout << itrk << " of " << NtracksInCollection << " intended" << endl;
00209 return in;
00210 }
00211 ev.mTrackCollection->push_back(trk);
00212
00213 }
00214
00215
00216 long NV0sInCollection;
00217 in >> NV0sInCollection;
00218 if (!(in.good())){
00219 cout << "StHbtEvent input operator finds stream in bad state ! " << endl;
00220 return in;
00221 }
00222
00223
00224
00225 StHbtV0Iterator iterv0;
00226 for (iterv0=ev.mV0Collection->begin();iterv0!=ev.mV0Collection->end();iterv0++){
00227 delete *iterv0;
00228 }
00229
00230 ev.mV0Collection->clear();
00231
00232 for (int iv0=0; iv0<NV0sInCollection; iv0++){
00233 StHbtV0* v0 = new StHbtV0;
00234 if ( !(in >> (*v0))){
00235 cout << "StHbtEvent input operator finds stream in bad state during v0 read ! ";
00236 cout << iv0 << " of " << NV0sInCollection << " intended" << endl;
00237 return in;
00238 }
00239 ev.mV0Collection->push_back(v0);
00240
00241 }
00242
00243 return in;
00244 }
00245
00246
00247 ostream& operator<<(ostream& out, StHbtKink& knk){
00248 return (
00249 out
00250 << knk.mDcaParentDaughter << " "
00251 << knk.mDcaDaughterPrimaryVertex << " "
00252 << knk.mDcaParentPrimaryVertex << " "
00253 << knk.mHitDistanceParentDaughter << " "
00254 << knk.mHitDistanceParentVertex << " "
00255 << knk.mDeltaEnergy[0] << " "
00256 << knk.mDeltaEnergy[1] << " "
00257 << knk.mDeltaEnergy[2] << " "
00258 << knk.mDecayAngle << " "
00259 << knk.mDecayAngleCM << " "
00260 << knk.mDaughter << " "
00261 << knk.mParent << " "
00262 << knk.mPosition.x() << " "
00263 << knk.mPosition.y() << " "
00264 << knk.mPosition.z()
00265 );
00266 }
00267 istream& operator>>(istream& in, StHbtKink& knk){
00268 double x,y,z;
00269 in
00270 >> knk.mDcaParentDaughter
00271 >> knk.mDcaDaughterPrimaryVertex
00272 >> knk.mDcaParentPrimaryVertex
00273 >> knk.mHitDistanceParentDaughter
00274 >> knk.mHitDistanceParentVertex
00275 >> knk.mDeltaEnergy[0]
00276 >> knk.mDeltaEnergy[1]
00277 >> knk.mDeltaEnergy[2]
00278 >> knk.mDecayAngle
00279 >> knk.mDecayAngleCM
00280 >> knk.mDaughter
00281 >> knk.mParent
00282 >> x
00283 >> y
00284 >> z;
00285 knk.mPosition.setX(x);
00286 knk.mPosition.setY(y);
00287 knk.mPosition.setZ(z);
00288
00289 return in;
00290 }
00291
00292
00293 #endif