| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

RecEventCnv.cc

Go to the documentation of this file.
00001 #include "RecEventCnv.h"
00002 #include "PerBaseEvent/HeaderObjectCnv.h"
00003 #include "Conventions/Electronics.h"
00004 
00005 using namespace DayaBay;
00006 using namespace std;
00007 
00008 RecHeaderCnv::RecHeaderCnv(ISvcLocator* svc)
00009     : RootIOTypedCnv<PerRecHeader,RecHeader>("PerRecHeader",
00010                                              classID(),svc)
00011 {
00012 }
00013 
00014 RecHeaderCnv::~RecHeaderCnv()
00015 {
00016 }
00017 
00018 
00019 StatusCode RecHeaderCnv::PerToTran(const PerRecHeader& perobj,
00020                                    DayaBay::RecHeader& tranobj)
00021 {
00022     MsgStream log(msgSvc(), "RecHeaderCnv::PerToTran");
00023     StatusCode sc = HeaderObjectCnv::toTran(perobj, tranobj);
00024     if(sc.isFailure()) return sc;
00025 
00026     DayaBay::RecTrigger& 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.setTriggerType(Trigger::TriggerType_t (perobj.triggerType));
00032     recTr.setTriggerNumber( perobj.triggerNumber );
00033     
00034     timespec value = {perobj.triggerTimeSec, perobj.triggerTimeNanoSec};
00035     TimeStamp tstamp(value);
00036     recTr.setTriggerTime(tstamp);
00037     
00038     recTr.setEnergy( perobj.energy );
00039     recTr.setPosition( CLHEP::HepLorentzVector(perobj.x, perobj.y, 
00040                                                perobj.z, perobj.t) );
00041     recTr.setPosition( CLHEP::HepLorentzVector(perobj.dx, perobj.dy, 
00042                                                perobj.dz, perobj.dt) );
00043     recTr.setEnergyStatus( perobj.energyStatus );
00044     recTr.setPositionStatus( perobj.positionStatus );
00045     recTr.setDirectionStatus( perobj.directionStatus );
00046     recTr.setEnergyQuality( perobj.energyQuality );
00047     recTr.setPositionQuality( perobj.positionQuality );
00048     recTr.setDirectionQuality( perobj.directionQuality );
00049     if(perobj.errorMatrixDim>0){
00050       CLHEP::HepMatrix errMatrix(perobj.errorMatrixDim,
00051                                  perobj.errorMatrixDim,
00052                                  0);
00053       for(int row=1; row<perobj.errorMatrixDim; row++){
00054         for(int col=1; col<perobj.errorMatrixDim; col++){
00055           int rcIndex = (row-1)*perobj.errorMatrixDim + (col-1);
00056           errMatrix(row,col) = perobj.errorMatrix[rcIndex];
00057         }
00058       }
00059       recTr.setErrorMatrix( errMatrix );
00060     }else{
00061       recTr.setErrorMatrix( CLHEP::HepMatrix() );
00062     }
00063     return StatusCode::SUCCESS;
00064 }
00065 
00066 StatusCode RecHeaderCnv::TranToPer(const DayaBay::RecHeader& tranobj,
00067                                    PerRecHeader& perobj)
00068 {
00069     MsgStream log(msgSvc(), "RecHeaderCnv::TranToPer");
00070     StatusCode sc = HeaderObjectCnv::toPer(tranobj,perobj);
00071     if (sc.isFailure()) return sc;
00072     const DayaBay::RecTrigger& recTr = tranobj.recTrigger();
00073 
00074     perobj.site = (recTr.detector()).site();
00075     perobj.detector = (recTr.detector()).detectorId();
00076     perobj.triggerType = recTr.triggerType();
00077     perobj.triggerNumber = recTr.triggerNumber();
00078     perobj.triggerTimeSec = recTr.triggerTime().GetSec();
00079     perobj.triggerTimeNanoSec = recTr.triggerTime().GetNanoSec();
00080     
00081     perobj.energy = recTr.energy();
00082     perobj.x = recTr.position().x();
00083     perobj.y = recTr.position().y();
00084     perobj.z = recTr.position().z();
00085     perobj.t = recTr.position().t();
00086     perobj.dx = recTr.position().x();
00087     perobj.dy = recTr.position().y();
00088     perobj.dz = recTr.position().z();
00089     perobj.dt = recTr.position().t();
00090     perobj.energyStatus = recTr.energyStatus();
00091     perobj.positionStatus = recTr.positionStatus();
00092     perobj.directionStatus = recTr.directionStatus();
00093     perobj.energyQuality = recTr.energyQuality();
00094     perobj.positionQuality = recTr.positionQuality();
00095     perobj.directionQuality = recTr.directionQuality();
00096     perobj.errorMatrixDim = recTr.errorMatrix().num_row();
00097     perobj.errorMatrix.resize(perobj.errorMatrixDim*perobj.errorMatrixDim);
00098     if(perobj.errorMatrixDim>0){
00099       for(int row=1; row<perobj.errorMatrixDim; row++){
00100         for(int col=1; col<perobj.errorMatrixDim; col++){
00101           int rcIndex = (row-1)*perobj.errorMatrixDim + (col-1);
00102           perobj.errorMatrix[rcIndex] = recTr.errorMatrix()(row,col);
00103         }
00104       }
00105     }
00106 
00107     return StatusCode::SUCCESS;
00108 }
00109 
00110 StatusCode RecHeaderCnv::fillRepRefs(IOpaqueAddress*, DataObject* dobj) {
00111   
00112   MsgStream log(msgSvc(), "RecHeaderCnv::fillRepRefs");
00113   //MsgStream log(msgSvc(), "fillRepRefs");
00114   RecHeader* rh = dynamic_cast<RecHeader*>(dobj);
00115 
00116   log << MSG::DEBUG
00117       << "Saving links to " << rh->inputHeaders().size() 
00118       << " input headers" << endreq;
00119   
00120   StatusCode sc = HeaderObjectCnv::fillPer(m_rioSvc,*rh,*m_perOutObj);
00121 
00122   if (sc.isFailure()) {
00123     log << MSG::ERROR << "Failed to fill HeaderObject part" << endreq;
00124     return sc;
00125   }
00126   
00127   // ... fill RecHeader part...
00128   return sc;
00129 }
00130 
00131 StatusCode RecHeaderCnv::fillObjRefs(IOpaqueAddress*, DataObject* dobj) {
00132   //MsgStream log(msgSvc(), "RecHeaderCnv::fillObjRefs");
00133   MsgStream log(msgSvc(), "fillObjRefs");
00134   HeaderObject* hobj = dynamic_cast<HeaderObject*>(dobj);
00135 
00136   StatusCode sc = HeaderObjectCnv::fillTran(m_rioSvc,*m_perInObj,*hobj);
00137   if (sc.isFailure()) {
00138     log << MSG::ERROR << "Failed to fill HeaderObject part" << endreq;
00139     return sc;
00140   }
00141   
00142   log << MSG::DEBUG
00143       << "Restored links to " << hobj->inputHeaders().size() 
00144       << " input headers" << endreq;
00145   
00146   // ... fill RecHeader part...
00147   return sc;
00148 }
00149 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:23:13 2011 for PerRecEvent by doxygen 1.4.7