00001 #include "ValidRecMdcTrack/ValidRecMdcTrackAlg.h"
00002 #include "GaudiKernel/MsgStream.h"
00003 #include "GaudiKernel/SmartDataPtr.h"
00004 #include "GaudiKernel/IHistogramSvc.h"
00005 #include "GaudiKernel/NTuple.h"
00006 #include "EventModel/EventHeader.h"
00007
00008
00009
00010 #include "MdcRecEvent/RecMdcTrack.h"
00011 #include "Identifier/MdcID.h"
00012
00013 using namespace Event;
00014
00015
00016 ValidRecMdcTrackAlg::ValidRecMdcTrackAlg(const std::string& name, ISvcLocator* pSvcLocator) :
00017 Algorithm(name, pSvcLocator) {
00018
00019
00020
00021
00022
00023
00024
00025 }
00026
00027 StatusCode ValidRecMdcTrackAlg::initialize(){
00028 MsgStream log( msgSvc(), name() );
00029 log << MSG::INFO << "Booking Histograms" << endreq;
00030
00031
00032 NTuplePtr nt1(ntupleSvc(),"FILE101/mdcTrack");
00033 if( nt1 ) m_tuple1 = nt1;
00034 else{
00035 m_tuple1 = ntupleSvc()->book("FILE101/mdcTrack",CLID_RowWiseTuple,"ValidRecMdcTrackNTuple1");
00036
00037 if( m_tuple1 ) {
00038 m_tuple1->addItem ("eventNo",g_eventNo);
00039 m_tuple1->addItem ("runNo", g_runNo);
00040 m_tuple1->addItem("nhits",g_hits);
00041 m_tuple1->addItem ("Id",g_track_id);
00042 m_tuple1->addItem ("Phi0",g_phi0);
00043 m_tuple1->addItem ("Cpa",g_kappa);
00044 m_tuple1->addItem ("Tanl",g_tanl);
00045 m_tuple1->addItem ("p",g_p);
00046
00047 m_tuple1->addItem ("Dr",g_dr);
00048 m_tuple1->addItem ("Dz",g_dz);
00049 m_tuple1->addItem ("Chisq",g_chisq_of_fit);
00050 m_tuple1->addItem ("FiTerm",g_phi_terminal);
00051 m_tuple1->addItem ("Nhits",g_number_of_hits);
00052 m_tuple1->addItem ("Nster",g_number_of_stereo_hits);
00053
00054 m_tuple1->addItem ("px",g_px);
00055 m_tuple1->addItem ("py",g_py);
00056 m_tuple1->addItem ("pz",g_pz);
00057 m_tuple1->addItem ("pxy",g_pxy);
00058 m_tuple1->addItem ("charge",g_charge);
00059 m_tuple1->addItem ("stat",g_stat);
00060 m_tuple1->addItem ("x",g_x);
00061 m_tuple1->addItem ("y",g_y);
00062 m_tuple1->addItem ("z",g_z);
00063 m_tuple1->addItem ("r",g_r);
00064 m_tuple1->addItem ("chi2",g_chi2);
00065 m_tuple1->addItem ("ndof",g_ndof);
00066 m_tuple1->addItem ("firstLayer",g_firstLayer);
00067 m_tuple1->addItem ("lastLayer",g_lastLayer);
00068 m_tuple1->addItem ("theta",g_theta);
00069 m_tuple1->addItem ("phi",g_phi);
00070
00071 } else {
00072 log << MSG::ERROR << "----- Cannot book or register histograms -----" << endreq;
00073 return StatusCode::FAILURE;
00074 }
00075 }
00076 NTuplePtr nt2(ntupleSvc(),"FILE101/mdcHit");
00077 if( nt2 ) m_tuple2 = nt2;
00078 else{
00079 m_tuple2 = ntupleSvc()->book("FILE101/mdcHit",CLID_RowWiseTuple,"ValidRecMdcHitNTuple1");
00080
00081 if( m_tuple2 ) {
00082 m_tuple2->addItem ("Hits_id",g_hits_id);
00083 m_tuple2->addItem ("Hits_ddl",g_hits_ddl);
00084 m_tuple2->addItem ("Hits_ddr",g_hits_ddr);
00085
00086 m_tuple2->addItem ("doca",g_doca);
00087 m_tuple2->addItem ("Hits_mdc_id",g_hits_mdc_id);
00088 m_tuple2->addItem ("layer", g_layer);
00089 m_tuple2->addItem ("wire", g_wire );
00090
00091 m_tuple2->addItem ("Hits_tdc",g_hits_tdc);
00092 m_tuple2->addItem ("Hits_adc",g_hits_adc);
00093 } else {
00094 log << MSG::ERROR << "----- Cannot book or register histograms -----" << endreq;
00095 return StatusCode::FAILURE;
00096 }
00097 }
00098
00099 log << MSG::INFO << "Finished booking Histograms" << endreq;
00100 return StatusCode::SUCCESS;
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148 }
00149
00150 StatusCode ValidRecMdcTrackAlg::execute() {
00151 MsgStream log(msgSvc(), name());
00152
00153
00154 int ntrk=0;
00155
00156 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
00157 if (!eventHeader) {
00158 log << MSG::FATAL << "Could not find Event Header" << endreq;
00159 return( StatusCode::SUCCESS);
00160 }
00161
00162 log << MSG::INFO << "retrieved event: " << eventHeader->eventNumber() << " run: " << eventHeader->runNumber() << endreq;
00163 int eventNo=eventHeader->eventNumber();
00164 int runNo=eventHeader->runNumber();
00165 if(m_tuple1){
00166 g_eventNo = eventNo;
00167 g_runNo = runNo;
00168 }
00169
00170 SmartDataPtr<RecMdcTrackCol> mdcTracks(eventSvc(),"/Event/Recon/RecMdcTrackCol");
00171 if( ! mdcTracks )
00172 {
00173 log << MSG::ERROR << "Unable to retrieve RecMdcTrackCol" << endreq;
00174 return StatusCode::FAILURE;
00175 } else {
00176 log << MSG::DEBUG << "RecMdcTrackCol retrieved of size "<< mdcTracks->size() << endreq;
00177 for(RecMdcTrackCol::iterator it=mdcTracks->begin(); it!=mdcTracks->end(); it++)
00178 {
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202 g_track_id = (*it)->trackId();
00203 g_phi0 = (*it)->helix()[1];
00204 g_kappa = (*it)->helix()[2];
00205 g_tanl = (*it)->helix()[4];
00206
00207 g_dr = (*it)->helix()[0];
00208 g_dz = (*it)->helix()[3];
00209 g_chisq_of_fit = (*it)->chi2();
00210 g_phi_terminal = (*it)->getFiTerm();
00211 g_number_of_hits = (*it)->getNhits();
00212 g_number_of_stereo_hits=(*it)->nster();
00213 g_p = (*it)->p();
00214
00215 g_px = (*it)->px();
00216 g_py = (*it)->py();
00217 g_pz = (*it)->pz();
00218 g_pxy = (*it)->pxy();
00219 g_charge = (*it)->charge();
00220 g_stat = (*it)->stat();
00221 g_x = (*it)->x();
00222 g_y = (*it)->y();
00223 g_z = (*it)->z();
00224 g_r = (*it)->r();
00225 g_chi2 = (*it)->chi2();
00226 g_ndof = (*it)->ndof();
00227 g_firstLayer = (*it)->firstLayer();
00228 g_lastLayer = (*it)->lastLayer();
00229
00230
00231 g_hits=0;
00232 HitRefVec gothits = (*it)->getVecHits();
00233 HitRefVec::iterator it_gothit = gothits.begin();
00234 for( ; it_gothit != gothits.end(); it_gothit++){
00235 g_hits_id = (*it_gothit)->getId();
00236
00237 g_hits_ddl = (*it_gothit)->getDriftDistLeft();
00238 g_hits_ddr = (*it_gothit)->getDriftDistRight();
00239
00240 g_doca = (*it_gothit)->getDoca();
00241 g_hits_mdc_id = (*it_gothit)->getMdcId();
00242 g_layer = MdcID::layer((*it_gothit)->getMdcId());
00243 g_wire = MdcID::wire((*it_gothit)->getMdcId());
00244
00245
00246
00247
00248 g_hits_tdc = (*it_gothit)->getTdc();
00249 g_hits_adc = (*it_gothit)->getAdc();
00250
00251 g_hits++;
00252 m_tuple2->write();
00253 }
00254
00255 m_tuple1->write();
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267 }
00268
00269 }
00270 return StatusCode::SUCCESS;
00271 }
00272
00273
00274 StatusCode ValidRecMdcTrackAlg::finalize() {
00275
00276 MsgStream log(msgSvc(), name());
00277 log << MSG::INFO << "Finalizing..." << endreq;
00278 return StatusCode::SUCCESS;
00279
00280 }
00281
00282
00283