00001 #include "DstMakerAlg/DstEventMaker.h"
00002
00003 #include "GaudiKernel/MsgStream.h"
00004 #include "GaudiKernel/AlgFactory.h"
00005 #include "GaudiKernel/ISvcLocator.h"
00006 #include "GaudiKernel/SmartDataPtr.h"
00007 #include "GaudiKernel/IDataProviderSvc.h"
00008 #include "GaudiKernel/PropertyMgr.h"
00009
00010 #include "TofRecEvent/RecTofTrack.h"
00011 #include "EmcRecEventModel/RecEmcShower.h"
00012 #include "MucRecEvent/RecMucTrack.h"
00013 #include "MucRecEvent/MucRecHit.h"
00014 #include "MdcRecEvent/RecMdcDedx.h"
00015 #include "MdcRecEvent/RecMdcDedxHit.h"
00016 #include "MdcRecEvent/RecMdcTrack.h"
00017 #include "MdcRecEvent/RecMdcHit.h"
00018 #include "ExtEvent/RecExtTrack.h"
00019
00020 #include "MdcRecEvent/RecMdcKalTrack.h"
00021
00022 #include "EventModel/EventModel.h"
00023 #include "EventModel/Event.h"
00024 #include "EventModel/EventHeader.h"
00025
00026 #include "DstEvent/DstEvent.h"
00027 #include "DstEvent/DstTofTrack.h"
00028 #include "DstEvent/DstEmcShower.h"
00029 #include "DstEvent/DstMdcTrack.h"
00030 #include "DstEvent/DstMucTrack.h"
00031 #include "DstEvent/DstMdcDedx.h"
00032 #include "DstEvent/DstExtTrack.h"
00033 #include "DstEvent/DstMdcKalTrack.h"
00034
00035 #include "CLHEP/Matrix/Vector.h"
00036 #include "CLHEP/Matrix/SymMatrix.h"
00037 #include "CLHEP/Vector/ThreeVector.h"
00038
00039 #include <vector>
00040 #include <iostream>
00041 #include <cmath>
00042 #include <cstdlib>
00043 #include <map>
00044
00045 using namespace std;
00046 using namespace Event;
00047
00048 using CLHEP::Hep3Vector;
00049 using CLHEP::HepSymMatrix;
00050
00051
00052
00054
00055 DstEventMaker::DstEventMaker(const std::string& name, ISvcLocator* pSvcLocator) :
00056 Algorithm(name, pSvcLocator)
00057 {
00058
00059
00060
00061 }
00062
00063
00064 StatusCode DstEventMaker::initialize(){
00065
00066 MsgStream log(msgSvc(), name());
00067 log << MSG::INFO << "in initialize()" << endreq;
00068
00069 return StatusCode::SUCCESS;
00070 }
00071
00072
00073 StatusCode DstEventMaker::execute() {
00074
00075 MsgStream log(msgSvc(), name());
00076 log << MSG::INFO << "in execute()" << endreq;
00077
00078
00079
00080 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
00081 if (!eventHeader) {
00082 log << MSG::FATAL << "Could not find Event Header" << endreq;
00083 return( StatusCode::FAILURE);
00084 }
00085
00086
00087 int eventId = eventHeader->eventNumber() ;
00088 int runId = eventHeader->runNumber();
00089 log << MSG::INFO << "DstEventMaker: retrieved event: " <<" Event Number "<< eventId << " run: " <<runId << endreq;
00090
00091 StatusCode sc = StatusCode::SUCCESS ;
00092 int trackID;
00093
00094
00095 DstEvent* dstEvt = new DstEvent();
00096
00097
00098 sc = eventSvc()->registerObject(EventModel::Dst::Event, dstEvt);
00099
00100
00101
00102 SmartDataPtr<RecMdcTrackCol> recMdcTrackCol(eventSvc(),"/Event/Recon/RecMdcTrackCol");
00103 if (!recMdcTrackCol) {
00104 log << MSG::INFO << "Could not find RecMdcTrackCol" << endreq;
00105 } else {
00106 DstMdcTrackCol* dstMdcTrackCol = new DstMdcTrackCol();
00107 RecMdcTrackCol::iterator iter_mdc = recMdcTrackCol->begin();
00108 trackID = 0;
00109 for (;iter_mdc != recMdcTrackCol->end(); iter_mdc++, trackID++) {
00110 DstMdcTrack* dstMdcTrack = new DstMdcTrack();
00111 *dstMdcTrack = **iter_mdc;
00112 (*dstMdcTrackCol).push_back(dstMdcTrack);
00113
00114 log << MSG::INFO
00115 << " Mdc Track ID = " << trackID
00116 << " Mdc Track Nster = " << (*iter_mdc)->nster()
00117 << endreq;
00118 }
00119 sc = eventSvc()->registerObject(EventModel::Dst::DstMdcTrackCol,dstMdcTrackCol);
00120 }
00121
00122
00123 SmartDataPtr<RecTofTrackCol> tofTrackCol(eventSvc(),"/Event/Recon/RecTofTrackCol");
00124 if ( !tofTrackCol ) {
00125 log << MSG::INFO << "Could not find TofTrackCol" << endreq;
00126 }
00127 else {
00128 DstTofTrackCol* dstTofTrackCol = new DstTofTrackCol();
00129 RecTofTrackCol::iterator iter_tof = tofTrackCol->begin();
00130 for( ; iter_tof != tofTrackCol->end(); iter_tof++ ) {
00131 DstTofTrack* dstTofTrack = new DstTofTrack();
00132 *dstTofTrack = **iter_tof;
00133 (*dstTofTrackCol).push_back(dstTofTrack);
00134
00135 log << MSG::INFO
00136 << "Tof Track ID = " << (*iter_tof)->tofTrackID()
00137 << " Track ID = " << (*iter_tof)->trackID()
00138 << " Tof Counter ID = "<<(*iter_tof)->tofID()
00139 << " Quality = "<< (*iter_tof)->quality()
00140 << endreq;
00141 }
00142 sc = eventSvc()->registerObject(EventModel::Dst::DstTofTrackCol,dstTofTrackCol);
00143 }
00144
00145
00146
00147 SmartDataPtr<RecMucTrackCol> mucTrackCol(eventSvc(),"/Event/Recon/RecMucTrackCol");
00148 if (!mucTrackCol) {
00149 log <<MSG::INFO << "Could not find RecMucTrackCol" << endreq;
00150 } else {
00151 DstMucTrackCol* dstMucTrackCol = new DstMucTrackCol();
00152 RecMucTrackCol::iterator iter_muc = mucTrackCol->begin();
00153 trackID = 0;
00154 for (;iter_muc != mucTrackCol->end(); iter_muc++, trackID++) {
00155 DstMucTrack* dstMucTrack = new DstMucTrack();
00156 *dstMucTrack = **iter_muc;
00157 (*dstMucTrackCol).push_back(dstMucTrack);
00158 log<< MSG::INFO
00159 << "Muc Track ID = " << trackID
00160 << " Muc NumHits = " << (*iter_muc)->GetTotalHits()
00161 << " Muc Pos x = " << (*iter_muc)->getMucPos().x()
00162 << " Muc Pos y = " << (*iter_muc)->getMucPos().y()
00163 << " Muc Pos z = " << (*iter_muc)->getMucPos().z()
00164 << endreq;
00165 }
00166 sc = eventSvc()->registerObject(EventModel::Dst::DstMucTrackCol,dstMucTrackCol);
00167 }
00168
00169
00170
00171
00172 SmartDataPtr<RecMdcDedxCol> mdcDedxCol(eventSvc(),"/Event/Recon/RecMdcDedxCol");
00173 if (!mdcDedxCol) {
00174 log <<MSG::INFO << "Could not find RecMdcDedxCol" << endreq;
00175 } else {
00176 trackID = 0;
00177 DstMdcDedxCol* dstMdcDedxCol = new DstMdcDedxCol();
00178 RecMdcDedxCol::iterator iter_dedx = mdcDedxCol->begin();
00179 for (;iter_dedx != mdcDedxCol->end(); iter_dedx++, trackID++) {
00180 DstMdcDedx* dstMdcDedx = new DstMdcDedx();
00181 *dstMdcDedx = **iter_dedx;
00182 (*dstMdcDedxCol).push_back(dstMdcDedx);
00183 log << MSG::INFO
00184 << " Dedx TrackID = "<< trackID
00185
00186
00187 << endreq;
00188 }
00189 sc = eventSvc()->registerObject(EventModel::Dst::DstMdcDedxCol,dstMdcDedxCol);
00190 }
00191
00192
00193
00194
00195
00196 SmartDataPtr<RecEmcShowerCol> emcRecShowerCol(eventSvc(),"/Event/Recon/RecEmcShowerCol");
00197 if (!emcRecShowerCol) {
00198 log <<MSG::INFO << "Could not find RecEmcShowerCol" << endreq;
00199
00200 }
00201 else {
00202 trackID = 0;
00203 DstEmcShowerCol* dstEmcTrackCol = new DstEmcShowerCol();
00204 RecEmcShowerCol::iterator iter_emc = emcRecShowerCol->begin();
00205 for (;iter_emc != emcRecShowerCol->end(); iter_emc++, trackID++) {
00206 DstEmcShower* dstEmcTrack = new DstEmcShower(*(*iter_emc));
00207 (*dstEmcTrackCol).push_back(dstEmcTrack);
00208 log << MSG::INFO
00209 << " Emc Track Id = " << trackID
00210
00211 << endreq;
00212 }
00213 sc = eventSvc()->registerObject(EventModel::Dst::DstEmcShowerCol,dstEmcTrackCol);
00214 }
00215
00216
00217
00218 SmartDataPtr<RecExtTrackCol> extTrackCol(eventSvc(),"/Event/Recon/RecExtTrackCol");
00219 if (!extTrackCol) {
00220 log <<MSG::INFO << "Could not find RecExtTrackCol" << endreq;
00221
00222 }
00223 else {
00224 trackID = 0;
00225 DstExtTrackCol* dstExtTrackCol = new DstExtTrackCol();
00226 RecExtTrackCol::iterator iter_ext = extTrackCol->begin();
00227 for (;iter_ext != extTrackCol->end(); iter_ext++, trackID++) {
00228 DstExtTrack* dstExtTrack = new DstExtTrack();
00229 *dstExtTrack = **iter_ext;
00230 (*dstExtTrackCol).push_back(dstExtTrack);
00231 log << MSG::INFO
00232 << " Ext Track Id = " << trackID
00233 << "volume name of Tof1 : " << (*iter_ext)->tof1VolumeName()
00234 <<" Ext Tof1 Error Z = " << (*iter_ext)->tof1PosSigmaAlongZ()
00235 <<" Ext Tof2 Error Z = " << (*iter_ext)->tof2PosSigmaAlongZ()
00236 <<" Ext Emc Error theta = " << (*iter_ext)->emcPosSigmaAlongTheta()
00237 <<" Ext Muc Error Z = " << (*iter_ext)->mucPosSigmaAlongZ()
00238 << endreq;
00239 }
00240
00241 sc = eventSvc()->registerObject(EventModel::Dst::DstExtTrackCol,dstExtTrackCol);
00242 }
00243
00244
00245 SmartDataPtr<RecMdcKalTrackCol> mdcKalTrackCol(eventSvc(),"/Event/Recon/RecMdcKalTrackCol");
00246 if (!mdcKalTrackCol) {
00247 log << MSG::INFO<< "Could not find MdcKalTrackCol" << endreq;
00248
00249 }
00250 else {
00251 trackID = 0;
00252 int nhits[5];
00253 int stat[2][5];
00254 float chisq[2][5];
00255 int ndf[2][5];
00256 int nster[2][5];
00257 int fL[2][5];
00258 int lL[2][5];
00259
00260 DstMdcKalTrackCol* dstMdcKalTrackCol = new DstMdcKalTrackCol();
00261 RecMdcKalTrackCol::iterator iter_kal = mdcKalTrackCol->begin();
00262 for (;iter_kal != mdcKalTrackCol->end(); iter_kal++, trackID++) {
00263 DstMdcKalTrack* dstMdcKalTrack = new DstMdcKalTrack();
00264 *dstMdcKalTrack = **iter_kal;
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294 (*dstMdcKalTrackCol).push_back(dstMdcKalTrack);
00295
00296 log<<MSG::INFO<<" * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endreq;
00297 for(int i =0 ; i < 5; i++){
00298 log << MSG::INFO<<"dstMdcKalTrack ZHelix["<<i<<"] = " <<dstMdcKalTrack->getZHelix(i) <<endreq;
00299 log << MSG::INFO << "number of total hits contained ["<<i<<"]"<<nhits[i]<<endreq;
00300 log << MSG::INFO<< "status flag ["<<i<<"]"<<stat[i]<<endreq;
00301 log << MSG::INFO<< "dstMdcKalTrack ZError ["<<i<<"]"<<dstMdcKalTrack->getZError(i)<<endreq;
00302 log << MSG::INFO<< "dstMdcKalTrack Poca ["<<i<<"]"<<dstMdcKalTrack->getPoca(i)<<endreq;
00303 }
00304 }
00305 sc = eventSvc()->registerObject(EventModel::Dst::DstMdcKalTrackCol, dstMdcKalTrackCol);
00306 }
00307
00308 return sc;
00309 }
00310
00311
00312 StatusCode DstEventMaker::finalize() {
00313
00314 MsgStream log(msgSvc(), name());
00315 log << MSG::INFO << "in finalize()" << endreq;
00316
00317 return StatusCode::SUCCESS;
00318 }