00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "DaqFormatSelector.h"
00010
00011 #include "DaqFormatContext.h"
00012 #include "StructureConverter.h"
00013
00014 #include "DaqReadoutSvc/IDaqReadoutSvc.h"
00015
00016 using DybDaq::DaqFormatContext;
00017 using DybDaq::DaqFormatSelector;
00018 using DybDaq::StructureConverter;
00019 using std::vector;
00020 using std::string;
00021
00022 DaqFormatSelector::DaqFormatSelector(const std::string& name,
00023 ISvcLocator* svc) :
00024 Service(name,
00025 svc),
00026 m_inputFiles(new vector<string>()) {
00027 declareProperty("InputFiles",
00028 *m_inputFiles,
00029 "List of input data files");
00030 declareProperty("SamplingInterval",
00031 m_samplingInterval = 1,
00032 "The sampling interval for runnihng spare analysis");
00033 declareProperty("ActionOnInvalid",
00034 m_actionOnInvalid = DaqFormatContext::kExitOnInvalid,
00035 "The action to take when an invalid event is found");
00036 }
00037
00038 DaqFormatSelector::~DaqFormatSelector() {
00039 if (0 != m_inputFiles) {
00040 delete m_inputFiles;
00041 }
00042 }
00043
00044 StatusCode DaqFormatSelector::createContext(Context*& context) const {
00045 IDaqReadoutSvc* daqSvc = 0;
00046 StatusCode status = service("DaqReadoutSvc",
00047 "DaqReadoutSvc",
00048 daqSvc);
00049 if (status.isFailure() ) {
00050 return status;
00051 }
00052 context = new DaqFormatContext(*m_inputFiles,
00053 m_actionOnInvalid,
00054 *msgSvc(),
00055 *daqSvc);
00056 return StatusCode::SUCCESS;
00057 }
00058
00059 StatusCode DaqFormatSelector::next(Context& context) const {
00060 return next(context,
00061 m_samplingInterval);
00062 }
00063
00064
00065 StatusCode DaqFormatSelector::next(Context& context,
00066 int jump) const {
00067 DaqFormatContext* ctxt = dynamic_cast<DaqFormatContext*>(&context);
00068 return ctxt->jump(jump);
00069 }
00070
00071
00072 StatusCode DaqFormatSelector::createAddress(const Context& context,
00073 IOpaqueAddress*& iop) const {
00074 const DaqFormatContext* ctxt = dynamic_cast<const DaqFormatContext*>(&context);
00075 StatusCode status = ctxt->isGoodEvent();
00076 if (status.isFailure()) {
00077 return status;
00078 }
00079 iop = new StructureConverter::Address(*ctxt,
00080 StructureConverter::kEvent);
00081 return StatusCode::SUCCESS;
00082 }
00083
00084
00085 StatusCode DaqFormatSelector::releaseContext(Context*& context) const {
00086 if (0 != context) {
00087 delete context;
00088 }
00089 return StatusCode::SUCCESS;
00090 }
00091
00092
00093 StatusCode DaqFormatSelector::queryInterface(const InterfaceID& id,
00094 void** interface) {
00095 if (IEvtSelector::interfaceID().versionMatch(id)) {
00096
00097 *interface = dynamic_cast<IEvtSelector*>(this);
00098 addRef();
00099 return StatusCode::SUCCESS;
00100 }
00101
00102 return Service::queryInterface(id,
00103 interface);
00104 }
00105
00106 StatusCode DaqFormatSelector::previous(Context& ) const {
00107 return StatusCode::FAILURE;
00108 }
00109
00110 StatusCode DaqFormatSelector::previous(Context& ,
00111 int ) const {
00112 return StatusCode::FAILURE;
00113 }
00114
00115 StatusCode DaqFormatSelector::last(Context& ) const {
00116 return StatusCode::FAILURE;
00117 }
00118
00119 StatusCode DaqFormatSelector::rewind(Context& ) const {
00120 return StatusCode::FAILURE;
00121 }
00122
00123 StatusCode DaqFormatSelector::resetCriteria(const std::string& ,
00124 Context& ) const {
00125 return StatusCode::FAILURE;
00126 }