/search.css" rel="stylesheet" type="text/css"/> /search.js">
| 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.setRawEvis( perobj.rawEvis );
00040     recTr.setEnrec( perobj.enrec );
00041     recTr.setEprec( perobj.eprec );
00042     recTr.setPosition( CLHEP::HepLorentzVector(perobj.x, perobj.y, 
00043                                                perobj.z, perobj.t) );
00044     recTr.setDirection( CLHEP::HepLorentzVector(perobj.dx, perobj.dy, 
00045                                                 perobj.dz, perobj.dt) );
00046     recTr.setEnergyStatus( perobj.energyStatus );
00047     recTr.setPositionStatus( perobj.positionStatus );
00048     recTr.setDirectionStatus( perobj.directionStatus );
00049     recTr.setEnergyQuality( perobj.energyQuality );
00050     recTr.setPositionQuality( perobj.positionQuality );
00051     recTr.setDirectionQuality( perobj.directionQuality );
00052     if(perobj.errorMatrixDim>0){
00053       CLHEP::HepMatrix errMatrix(perobj.errorMatrixDim,
00054                                  perobj.errorMatrixDim,
00055                                  0);
00056       for(int row=1; row<perobj.errorMatrixDim; row++){
00057         for(int col=1; col<perobj.errorMatrixDim; col++){
00058           int rcIndex = (row-1)*perobj.errorMatrixDim + (col-1);
00059           errMatrix(row,col) = perobj.errorMatrix[rcIndex];
00060         }
00061       }
00062       recTr.setErrorMatrix( errMatrix );
00063     }else{
00064       recTr.setErrorMatrix( CLHEP::HepMatrix() );
00065     }
00066     return StatusCode::SUCCESS;
00067 }
00068 
00069 StatusCode RecHeaderCnv::TranToPer(const DayaBay::RecHeader& tranobj,
00070                                    PerRecHeader& perobj)
00071 {
00072     MsgStream log(msgSvc(), "RecHeaderCnv::TranToPer");
00073     StatusCode sc = HeaderObjectCnv::toPer(tranobj,perobj);
00074     if (sc.isFailure()) return sc;
00075     const DayaBay::RecTrigger& recTr = tranobj.recTrigger();
00076 
00077     perobj.site = (recTr.detector()).site();
00078     perobj.detector = (recTr.detector()).detectorId();
00079     perobj.triggerType = recTr.triggerType();
00080     perobj.triggerNumber = recTr.triggerNumber();
00081     perobj.triggerTimeSec = recTr.triggerTime().GetSec();
00082     perobj.triggerTimeNanoSec = recTr.triggerTime().GetNanoSec();
00083     
00084     perobj.energy = recTr.energy();
00085     perobj.rawEvis = recTr.rawEvis();
00086     perobj.enrec = recTr.enrec();
00087     perobj.eprec = recTr.eprec();
00088     perobj.x = recTr.position().x();
00089     perobj.y = recTr.position().y();
00090     perobj.z = recTr.position().z();
00091     perobj.t = recTr.position().t();
00092     perobj.dx = recTr.direction().x();
00093     perobj.dy = recTr.direction().y();
00094     perobj.dz = recTr.direction().z();
00095     perobj.dt = recTr.direction().t();
00096     perobj.energyStatus = recTr.energyStatus();
00097     perobj.positionStatus = recTr.positionStatus();
00098     perobj.directionStatus = recTr.directionStatus();
00099     perobj.energyQuality = recTr.energyQuality();
00100     perobj.positionQuality = recTr.positionQuality();
00101     perobj.directionQuality = recTr.directionQuality();
00102     perobj.errorMatrixDim = recTr.errorMatrix().num_row();
00103     perobj.errorMatrix.resize(perobj.errorMatrixDim*perobj.errorMatrixDim);
00104     if(perobj.errorMatrixDim>0){
00105       for(int row=1; row<perobj.errorMatrixDim; row++){
00106         for(int col=1; col<perobj.errorMatrixDim; col++){
00107           int rcIndex = (row-1)*perobj.errorMatrixDim + (col-1);
00108           perobj.errorMatrix[rcIndex] = recTr.errorMatrix()(row,col);
00109         }
00110       }
00111     }
00112 
00113     return StatusCode::SUCCESS;
00114 }
00115 
00116 StatusCode RecHeaderCnv::fillRepRefs(IOpaqueAddress*, DataObject* dobj) {
00117   
00118   MsgStream log(msgSvc(), "RecHeaderCnv::fillRepRefs");
00119   //MsgStream log(msgSvc(), "fillRepRefs");
00120   RecHeader* rh = dynamic_cast<RecHeader*>(dobj);
00121 
00122   log << MSG::DEBUG
00123       << "Saving links to " << rh->inputHeaders().size() 
00124       << " input headers" << endreq;
00125   
00126   StatusCode sc = HeaderObjectCnv::fillPer(m_rioSvc,*rh,*m_perOutObj);
00127 
00128   if (sc.isFailure()) {
00129     log << MSG::ERROR << "Failed to fill HeaderObject part" << endreq;
00130     return sc;
00131   }
00132   
00133   // ... fill RecHeader part...
00134   return sc;
00135 }
00136 
00137 StatusCode RecHeaderCnv::fillObjRefs(IOpaqueAddress*, DataObject* dobj) {
00138   //MsgStream log(msgSvc(), "RecHeaderCnv::fillObjRefs");
00139   MsgStream log(msgSvc(), "fillObjRefs");
00140   HeaderObject* hobj = dynamic_cast<HeaderObject*>(dobj);
00141 
00142   StatusCode sc = HeaderObjectCnv::fillTran(m_rioSvc,*m_perInObj,*hobj);
00143   if (sc.isFailure()) {
00144     log << MSG::ERROR << "Failed to fill HeaderObject part" << endreq;
00145     return sc;
00146   }
00147   
00148   log << MSG::DEBUG
00149       << "Restored links to " << hobj->inputHeaders().size() 
00150       << " input headers" << endreq;
00151   
00152   // ... fill RecHeader part...
00153   return sc;
00154 }
00155 
| 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