00001 #ifndef LinkDataXMLReader_h
00002 #define LinkDataXMLReader_h
00003
00004
00005
00006 #include "FWCore/Framework/interface/Frameworkfwd.h"
00007 #include "FWCore/Framework/interface/Event.h"
00008 #include "FWCore/Framework/interface/MakerMacros.h"
00009 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00010
00011 #include "FWCore/Sources/interface/ExternalInputSource.h"
00012
00013 #include "DataFormats/FEDRawData/interface/FEDRawData.h"
00014 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
00015 #include "IORawData/RPCFileReader/interface/RPCPacData.h"
00016 #include "EventFilter/RPCRawToDigi/interface/EventRecords.h"
00017
00018 #include <xercesc/sax2/Attributes.hpp>
00019 #include <xercesc/sax2/DefaultHandler.hpp>
00020 #include <xercesc/util/PlatformUtils.hpp>
00021 #include <xercesc/util/XMLString.hpp>
00022 #include <xercesc/dom/DOM.hpp>
00023 #include <xercesc/framework/LocalFileFormatTarget.hpp>
00024 #include <xercesc/framework/XMLPScanToken.hpp>
00025 #include <xercesc/sax2/SAX2XMLReader.hpp>
00026 #include "boost/bind.hpp"
00027
00028 #include <vector>
00029 #include <string>
00030 #include <map>
00031
00032 class FEDRawData;
00033
00034 XERCES_CPP_NAMESPACE_USE
00035
00036
00037
00038
00039
00040 class LinkDataXMLReader: public edm::ExternalInputSource, DefaultHandler
00041 {
00042
00043 public:
00044 explicit LinkDataXMLReader(const edm::ParameterSet& iConfig,
00045 edm::InputSourceDescription const& desc);
00046 virtual ~LinkDataXMLReader();
00047
00048 virtual bool produce(edm::Event &);
00049 virtual void setRunAndEventInfo();
00050
00051
00052 private:
00053
00054 FEDRawData * rawData(int fedId, const std::vector<rpcrawtodigi::EventRecords> & result);
00055 std::pair<int,int> getDCCInputChannelNum(int tcNumber, int tbNumber);
00056
00057 void startElement(const XMLCh* const uri, const XMLCh* const localname,
00058 const XMLCh* const qname, const Attributes& attrs);
00059
00060 void endElement (const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname);
00061
00062 void clear();
00063
00064 std::string IntToString(int i, int opt=0);
00065
00066 int stringToInt(std::string str, int opt=0);
00067
00068 int opticalLinkNum;
00069 int triggerCrateNum;
00070 int triggerBoardNum;
00071 bool isOpen_, noMoreData_, endOfEvent_;
00072 bool endOfFile_;
00073 int eventPos_[2];
00074 int fileCounter_, eventCounter_;
00075 int run_, event_;
00076 std::string m_xmlDir;
00077 std::string m_CurrElement;
00078 static int m_instanceCount;
00079
00080 std::map<int, std::vector<rpcrawtodigi::EventRecords> > results;
00081
00082 XMLPScanToken aToken;
00083 SAX2XMLReader* parser;
00084
00085 };
00086
00087
00088 #endif