/search.css" rel="stylesheet" type="text/css"/> /search.js">
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

RecRpcEventCnv.cc
Go to the documentation of this file.
00001 #include "RecRpcEventCnv.h"
00002 #include "PerBaseEvent/HeaderObjectCnv.h"
00003 #include "Conventions/Detectors.h"
00004 #include <algorithm>
00005 
00006 using namespace DayaBay;
00007 
00008 RecRpcEventCnv::RecRpcEventCnv(ISvcLocator* svc)
00009     : RootIOTypedCnv<PerRecRpcHeader,RecRpcHeader>("PerRecRpcHeader",
00010                                              classID(),svc)
00011 {
00012 }
00013 
00014 RecRpcEventCnv::~RecRpcEventCnv()
00015 {
00016 }
00017 
00018 
00019 StatusCode RecRpcEventCnv::PerToTran(const PerRecRpcHeader& perobj,
00020                                    RecRpcHeader& tranobj)
00021 {
00022     MsgStream log(msgSvc(), "RecRpcEventCnv::PerToTran");
00023     StatusCode sc = HeaderObjectCnv::toTran(perobj, tranobj);
00024     if(sc.isFailure()) return sc;
00025 
00026     RecRpcTrigger& recTr = tranobj.recTrigger();
00027     recTr.setHeader(&tranobj);
00028     Detector det((Site::Site_t)perobj.site,
00029                  (DetectorId::DetectorId_t)perobj.detector);
00030     recTr.setDetector(det);
00031     recTr.setTriggerNumber( perobj.triggerNumber );
00032     recTr.setTriggerType(Trigger::TriggerType_t (perobj.triggerType));
00033 
00034     timespec value = {perobj.triggerTimeSec, perobj.triggerTimeNanoSec};
00035     TimeStamp tstamp(value);
00036     recTr.setTriggerTime(tstamp);
00037 
00038     recTr.setEventType(perobj.eventType);
00039 
00040     for ( int i = 0; i < perobj.nClusters; ++i ) {
00041         const PerRecRpcHeader::RpcCluster& per = perobj.clusters.at(i);
00042         RecRpcCluster* tran = new RecRpcCluster(
00043                 CLHEP::HepLorentzVector(per.x, per.y, per.z, per.t),
00044                 ReconStatus::ReconStatus_t(per.status),
00045                 per.quality,
00046                 RecRpcCluster::ClusterType(per.type));
00047         tran->setMaxHitsInLayer(per.maxHitsInLayer);
00048         tran->setIs4of4(per.is4of4);
00049         recTr.addCluster(tran);
00050     }
00051 
00052     const std::vector<const RecRpcCluster*>& clusters = recTr.clusters();
00053     for ( int i = 0; i < perobj.nTracks; ++i ) {
00054         const PerRecRpcHeader::RpcTrack& per = perobj.tracks.at(i);
00055         recTr.addTrack(RecRpcTrack(clusters[per.start], clusters[per.end]));
00056     }
00057 
00058     return StatusCode::SUCCESS;
00059 }
00060 
00061 StatusCode RecRpcEventCnv::TranToPer(const RecRpcHeader& tranobj,
00062                                    PerRecRpcHeader& perobj)
00063 {
00064     MsgStream log(msgSvc(), "RecRpcEventCnv::TranToPer");
00065     StatusCode sc = HeaderObjectCnv::toPer(tranobj,perobj);
00066     if (sc.isFailure()) return sc;
00067     const RecRpcTrigger& recTr = tranobj.recTrigger();
00068 
00069     perobj.site = recTr.detector().site();
00070     perobj.detector = recTr.detector().detectorId();
00071     perobj.triggerNumber = recTr.triggerNumber();
00072     perobj.triggerType = recTr.triggerType();
00073     perobj.triggerTimeSec = recTr.triggerTime().GetSec();
00074     perobj.triggerTimeNanoSec = recTr.triggerTime().GetNanoSec();
00075 
00076     perobj.combinationType = recTr.combinationType();
00077     perobj.eventType = recTr.eventType();
00078 
00079     perobj.reset(recTr.numCluster(), recTr.numTrack());
00080 
00081     const std::vector<const RecRpcCluster*>& clusters = recTr.clusters();
00082     for ( int i = 0; i < perobj.nClusters; ++i ) {
00083         const RecRpcCluster* iCluster = clusters.at(i);
00084         perobj.clusters[i].status = iCluster->status();
00085         perobj.clusters[i].type = iCluster->type();
00086         perobj.clusters[i].maxHitsInLayer = iCluster->maxHitsInLayer();
00087         perobj.clusters[i].is4of4 = iCluster->is4of4();
00088         perobj.clusters[i].x    = iCluster->position().x();
00089         perobj.clusters[i].y    = iCluster->position().y();
00090         perobj.clusters[i].z    = iCluster->position().z();
00091         perobj.clusters[i].t    = iCluster->position().t();
00092         perobj.clusters[i].quality = iCluster->quality();
00093     }
00094 
00095     std::vector<const RecRpcCluster*>::const_iterator begin = clusters.begin();
00096     std::vector<const RecRpcCluster*>::const_iterator end = clusters.end();
00097     const std::vector<RecRpcTrack>& tracks = recTr.tracks();
00098     for ( int i = 0; i < perobj.nTracks; ++i ) {
00099         perobj.tracks[i].start = std::find(begin, end, tracks[i].start()) - begin;
00100         perobj.tracks[i].end = std::find(begin, end, tracks[i].end()) - begin;
00101     }
00102 
00103     return StatusCode::SUCCESS;
00104 }
00105 
00106 StatusCode RecRpcEventCnv::fillRepRefs(IOpaqueAddress*, DataObject* tobj) {
00107   
00108   MsgStream log(msgSvc(), "RecRpcEventCnv::fillRepRefs");
00109   RecRpcHeader* rh = dynamic_cast<RecRpcHeader*>(tobj);
00110 
00111   log << MSG::DEBUG
00112       << "Saving links to " << rh->inputHeaders().size() 
00113       << " input headers" << endreq;
00114   
00115   StatusCode sc = HeaderObjectCnv::fillPer(m_rioSvc,*rh,*m_perOutObj);
00116 
00117   if (sc.isFailure()) {
00118     log << MSG::ERROR << "Failed to fill HeaderObject part" << endreq;
00119     return sc;
00120   }
00121   
00122   // ... fill RecRpcHeader part...
00123   return sc;
00124 }
00125 
00126 StatusCode RecRpcEventCnv::fillObjRefs(IOpaqueAddress*, DataObject* tobj) {
00127   //MsgStream log(msgSvc(), "RecRpcEventCnv::fillObjRefs");
00128   MsgStream log(msgSvc(), "fillObjRefs");
00129   HeaderObject* hobj = dynamic_cast<HeaderObject*>(tobj);
00130 
00131   StatusCode sc = HeaderObjectCnv::fillTran(m_rioSvc,*m_perInObj,*hobj);
00132   if (sc.isFailure()) {
00133     log << MSG::ERROR << "Failed to fill HeaderObject part" << endreq;
00134     return sc;
00135   }
00136   
00137   log << MSG::DEBUG
00138       << "Restored links to " << hobj->inputHeaders().size() 
00139       << " input headers" << endreq;
00140   
00141   // ... fill RecRpcHeader part...
00142   return sc;
00143 }
00144 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Fri May 16 2014 10:00:35 for PerRecEvent by doxygen 1.7.4