00001
00002
00003
00004
00005
00006
00007
00008 #define IrfCalHitCnv_CPP
00009
00010
00011 #include "GaudiKernel/CnvFactory.h"
00012 #include "GaudiKernel/IDataProviderSvc.h"
00013 #include "GlastEvent/TopLevel/ObjectVector.h"
00014 #include "GlastEvent/Irf/IrfCalHit.h"
00015 #include "GaudiKernel/IGlastDetSvc.h"
00016
00017 #include "src/EventSelector/IRFConverter.h"
00018
00019 #include "GlastSvc/Irf/IrfCalHitCnv.h"
00020
00031
00032 static CnvFactory<IrfCalHitCnv> s_factory;
00033 const ICnvFactory& IrfCalHitCnvFactory = s_factory;
00034
00036 StatusCode IrfCalHitCnv::createObj(IOpaqueAddress* pAddress, DataObject*& refpObject) {
00037 refpObject = new IrfCalHitVector();
00038 StatusCode status = updateObj(pAddress, refpObject);
00039 if ( !status.isSuccess() ) {
00040 delete refpObject;
00041 refpObject = 0;
00042 }
00043 return status;
00044 }
00045
00047 StatusCode IrfCalHitCnv::updateObj(IOpaqueAddress* pAddress, DataObject* pObject) {
00048 ObjectVector<IrfCalHit>* calHitList = dynamic_cast<ObjectVector<IrfCalHit>*>(pObject);
00049 if ( 0 != calHitList ) {
00050
00051
00052 IRFConverter myConverter;
00053 m_detSvc->accept(myConverter);
00054
00055
00056 ObjectVector<IrfCalHit>* mcCalData = myConverter.getIrfCalHits();
00057 for (ObjectVector<IrfCalHit>::const_iterator it = mcCalData->begin(); it != mcCalData->end(); it++) {
00058 IrfCalHit * mcCalHit = new IrfCalHit();
00059 mcCalHit->setEnergy((*it)->energy());
00060 mcCalHit->setMinusResponse((*it)->minusResponse());
00061 mcCalHit->setPlusResponse((*it)->plusResponse());
00062 calHitList->push_back(mcCalHit);
00063 }
00064
00065 return StatusCode::SUCCESS;
00066 }
00067
00068 return StatusCode::FAILURE;
00069 }
00070
00072 const CLID& IrfCalHitCnv::classID() {
00073 return ObjectVector<IrfCalHit>::classID();
00074 }
00075
00077 IrfCalHitCnv::IrfCalHitCnv(ISvcLocator* svc)
00078 : BaseCnv(classID(), svc)
00079 {
00080
00081 declareObject("/Event/Irf/IrfCalHits", objType(), "PASS");
00082 }
00083
00085 IrfCalHitCnv::~IrfCalHitCnv(){ }