00001
00002
00003
00004
00005
00006
00007 #define IrfTkrLayerCnv_CPP
00008
00009
00010 #include "GaudiKernel/CnvFactory.h"
00011 #include "GaudiKernel/IDataProviderSvc.h"
00012 #include "GlastEvent/TopLevel/ObjectVector.h"
00013 #include "GlastEvent/Irf/IrfTkrLayer.h"
00014 #include "GaudiKernel/IGlastDetSvc.h"
00015
00016 #include "src/EventSelector/IRFConverter.h"
00017
00018
00019 #include "GlastSvc/Irf/IrfTkrLayerCnv.h"
00020
00025
00026 static CnvFactory<IrfTkrLayerCnv> s_factory;
00027 const ICnvFactory& IrfTkrLayerCnvFactory = s_factory;
00028
00030 StatusCode IrfTkrLayerCnv::createObj(IOpaqueAddress* pAddress, DataObject*& refpObject) {
00031 refpObject = new IrfTkrLayerVector();
00032 StatusCode status = updateObj(pAddress, refpObject);
00033 if ( !status.isSuccess() ) {
00034 delete refpObject;
00035 refpObject = 0;
00036 }
00037 return status;
00038 }
00039
00041 StatusCode IrfTkrLayerCnv::updateObj(IOpaqueAddress* pAddress, DataObject* pObject) {
00042 ObjectVector<IrfTkrLayer>* silayerList = dynamic_cast<ObjectVector<IrfTkrLayer>*>(pObject);
00043 if ( 0 != silayerList ) {
00044
00045
00046 IRFConverter myConverter;
00047 m_detSvc->accept(myConverter);
00048
00049
00050 ObjectVector<IrfTkrLayer>* tkrData = myConverter.getIrfTkrHits();
00051 for (ObjectVector<IrfTkrLayer>::const_iterator it = tkrData->begin(); it != tkrData->end(); it++) {
00052 IrfTkrLayer* layer = new IrfTkrLayer();
00053 layer->setMaxEnergy((*it)->MaxEnergy());
00054 layer->setId((*it)->id());
00055
00056 for (ObjectVector<IrfTkrHit>::const_iterator hit = ((*it)->getHits())->begin(); hit != ((*it)->getHits())->end(); hit++) {
00057 IrfTkrHit* curHit = new IrfTkrHit();
00058 curHit->setEnergy((*hit)->energy());
00059 curHit->setId((*hit)->id());
00060 curHit->setNoise((*hit)->noise());
00061 layer->addHit(curHit);
00062 }
00063 silayerList->push_back(layer);
00064 }
00065
00066 return StatusCode::SUCCESS;
00067 }
00068
00069 return StatusCode::FAILURE;
00070 }
00071
00073 const CLID& IrfTkrLayerCnv::classID() {
00074 return ObjectVector<IrfTkrLayer>::classID();
00075 }
00076
00078 IrfTkrLayerCnv::IrfTkrLayerCnv(ISvcLocator* svc)
00079 : BaseCnv(classID(), svc)
00080 {
00081 declareObject("/Event/Irf/IrfTkrHits", objType(), "PASS");
00082 }
00083
00085 IrfTkrLayerCnv::~IrfTkrLayerCnv(){ }