CMS 3D CMS Logo

OMTFReconstruction.cc
Go to the documentation of this file.
2 
5 
8 
17 
19 
21  m_OMTFConfig(nullptr), m_OMTF(nullptr), aTopElement(nullptr), m_OMTFConfigMaker(nullptr), m_Writer(nullptr){}
26 
27  dumpResultToXML = m_Config.getParameter<bool>("dumpResultToXML");
28  dumpDetailedResultToXML = m_Config.getParameter<bool>("dumpDetailedResultToXML");
29  m_Config.getParameter<std::string>("XMLDumpFileName");
30 }
34 
35  delete m_OMTFConfig;
36  delete m_OMTF;
37 
38  if (m_Writer) delete m_Writer;
39 }
40 
44 
46  m_OMTF = new OMTFProcessor();
47 
48 }
52 
53  if(dumpResultToXML){
54  std::string fName = m_Config.getParameter<std::string>("XMLDumpFileName");
56  }
57 }
61 
62  const L1TMuonOverlapParamsRcd& omtfRcd = iSetup.get<L1TMuonOverlapParamsRcd>();
63 
64  edm::ESHandle<L1TMuonOverlapParams> omtfParamsHandle;
65  omtfRcd.get(omtfParamsHandle);
66 
67  const L1TMuonOverlapParams* omtfParams = omtfParamsHandle.product();
68 
69  if (!omtfParams) {
70  edm::LogError("L1TMuonOverlapTrackProducer") << "Could not retrieve parameters from Event Setup" << std::endl;
71  }
72 
73  m_OMTFConfig->configure(omtfParams);
74  m_OMTF->configure(m_OMTFConfig, omtfParams);
75  //m_GhostBuster.setNphiBins(m_OMTFConfig->nPhiBins());
76 
77  if(m_Config.exists("ghostBusterType") ) {
78  if(m_Config.getParameter<std::string>("ghostBusterType") == "GhostBusterPreferRefDt")
80  }
81  else
82  m_GhostBuster.reset(new GhostBuster() );
83 
85 
87 
88  if(dumpResultToXML){
90  std::string fName = "OMTF";
92  }
93 }
96 std::unique_ptr<l1t::RegionalMuonCandBxCollection> OMTFReconstruction::reconstruct(const edm::Event& iEvent, const edm::EventSetup& evSetup) {
97 
98  loadAndFilterDigis(iEvent);
99 
101 
102  // NOTE: assuming all is for bx 0
103  int bx = 0;
104  std::unique_ptr<l1t::RegionalMuonCandBxCollection> candidates(new l1t::RegionalMuonCandBxCollection);
105 
107  for(unsigned int iProcessor=0; iProcessor<m_OMTFConfig->nProcessors(); ++iProcessor)
108  getProcessorCandidates(iProcessor, l1t::tftype::omtf_pos, bx, *candidates);
109 
110  for(unsigned int iProcessor=0; iProcessor<m_OMTFConfig->nProcessors(); ++iProcessor)
111  getProcessorCandidates(iProcessor, l1t::tftype::omtf_neg, bx, *candidates);
112 
113  return candidates;
114 }
115 
119 
120  // Filter digis by dropping digis from selected (by cfg.py) subsystems
121  if(!m_Config.getParameter<bool>("dropDTPrimitives")){
124  }
125  if(!m_Config.getParameter<bool>("dropRPCPrimitives")) iEvent.getByLabel(m_Config.getParameter<edm::InputTag>("srcRPC"),rpcDigis);
126  if(!m_Config.getParameter<bool>("dropCSCPrimitives")) iEvent.getByLabel(m_Config.getParameter<edm::InputTag>("srcCSC"),cscDigis);
127 
128 }
129 
132 void OMTFReconstruction::getProcessorCandidates(unsigned int iProcessor, l1t::tftype mtfType, int bx,
133  l1t::RegionalMuonCandBxCollection & omtfCandidates){
134 
135 
138  dtThDigis.product(),
139  cscDigis.product(),
140  rpcDigis.product(),
141  iProcessor, mtfType);
142  int flag = m_InputMaker.getFlag();
143 
144  const std::vector<OMTFProcessor::resultsMap> & results = m_OMTF->processInput(iProcessor,input);
145 
146  std::vector<AlgoMuon> algoCandidates;
147 
148  m_Sorter.sortRefHitResults(results, algoCandidates);
149 
150  // perform GB
151  std::vector<AlgoMuon> gbCandidates = m_GhostBuster->select(algoCandidates);
152 
153  // fill RegionalMuonCand colleciton
154  std::vector<l1t::RegionalMuonCand> candMuons = m_Sorter.candidates(iProcessor, mtfType, gbCandidates);
155 
156  //fill outgoing collection
157  for (auto & candMuon : candMuons) {
158  candMuon.setHwQual( candMuon.hwQual() | flag); //FIXME temporary debug fix
159  omtfCandidates.push_back(bx, candMuon);
160  }
161 
162  //dump to XML
163  writeResultToXML(iProcessor, mtfType, input, results, candMuons);
164 }
167 void OMTFReconstruction::writeResultToXML(unsigned int iProcessor, l1t::tftype mtfType, const OMTFinput &input,
168  const std::vector<OMTFProcessor::resultsMap> & results,
169  const std::vector<l1t::RegionalMuonCand> & candMuons ){
170 
171  int endcap = (mtfType == l1t::omtf_neg) ? -1 : ( ( mtfType == l1t::omtf_pos) ? +1 : 0 );
172  OmtfName board(iProcessor, endcap);
173 
174  //Write data to XML file
175  if(dumpResultToXML){
176  xercesc::DOMElement * aProcElement = m_Writer->writeEventData(aTopElement, board, input);
177  for(unsigned int iRefHit=0;iRefHit<m_OMTFConfig->nTestRefHits();++iRefHit){
179  AlgoMuon algoMuon = m_Sorter.sortRefHitResults(results[iRefHit],0);//charge=0 means ignore charge
180  if(algoMuon.getPt()) {
181  m_Writer->writeAlgoMuon(aProcElement,iRefHit,algoMuon);
183  for(auto & itKey: results[iRefHit])
184  m_Writer->writeResultsData(aProcElement, iRefHit, itKey.first,itKey.second);
185  }
186  }
187  }
188  for (auto & candMuon : candMuons) m_Writer->writeCandMuon(aProcElement, candMuon);
189  }
190 }
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:41
void getProcessorCandidates(unsigned int iProcessor, l1t::tftype mtfType, int bx, l1t::RegionalMuonCandBxCollection &myCandidates)
bool configure(const OMTFConfiguration *omtfParams, const L1TMuonOverlapParams *omtfPatterns)
Fill GP map with patterns from CondFormats object.
OMTFConfiguration * m_OMTFConfig
OMTF objects.
OMTFConfigMaker * m_OMTFConfigMaker
void initialiseXMLDocument(const std::string &docName)
void initialize(const edm::EventSetup &es, const OMTFConfiguration *)
bool exists(std::string const &parameterName) const
checks if a parameter exists
xercesc::DOMElement * aTopElement
unsigned int nPhiBins() const
xercesc::DOMElement * writeEventData(xercesc::DOMElement *aTopElement, const OmtfName &board, const OMTFinput &aInput)
unsigned int nProcessors() const
#define nullptr
std::unique_ptr< IGhostBuster > m_GhostBuster
static std::string const input
Definition: EdmProvDump.cc:44
void loadAndFilterDigis(const edm::Event &)
void beginRun(edm::Run const &run, edm::EventSetup const &iSetup)
int iEvent
Definition: GenABIO.cc:230
std::unique_ptr< l1t::RegionalMuonCandBxCollection > reconstruct(const edm::Event &, const edm::EventSetup &)
OMTFProcessor * m_OMTF
void writeResultsData(xercesc::DOMElement *aTopElement, unsigned int iRegion, const Key &aKey, const OMTFResult &aResult)
void writeResultToXML(unsigned int iProcessor, l1t::tftype mtfType, const OMTFinput &myInput, const std::vector< OMTFProcessor::resultsMap > &myResults, const std::vector< l1t::RegionalMuonCand > &candMuons)
void get(HolderT &iHolder) const
int getFlag() const
void writeCandMuon(xercesc::DOMElement *aTopElement, const l1t::RegionalMuonCand &aCand)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:535
edm::Handle< RPCDigiCollection > rpcDigis
XMLConfigWriter * m_Writer
void setFlag(int aFlag)
void configure(const L1TMuonOverlapParams *omtfParams)
T const * product() const
Definition: Handle.h:81
edm::Handle< L1MuDTChambThContainer > dtThDigis
void sortRefHitResults(const std::vector< OMTFProcessor::resultsMap > &procResults, std::vector< AlgoMuon > &refHitCleanCands, int charge=0)
Definition: OMTFSorter.cc:134
OMTFinputMaker m_InputMaker
edm::Handle< L1MuDTChambPhContainer > dtPhDigis
edm::EventID id() const
Definition: EventBase.h:60
T get() const
Definition: EventSetup.h:63
const std::vector< OMTFProcessor::resultsMap > & processInput(unsigned int iProcessor, const OMTFinput &aInput)
int getPt() const
Definition: AlgoMuon.h:25
void finaliseXMLDocument(const std::string &fName)
void writeAlgoMuon(xercesc::DOMElement *aTopElement, unsigned int iRefHit, const AlgoMuon &aMuon)
OMTFinput buildInputForProcessor(const L1MuDTChambPhContainer *dtPhDigis, const L1MuDTChambThContainer *dtThDigis, const CSCCorrelatedLCTDigiCollection *cscDigis, const RPCDigiCollection *rpcDigis, unsigned int iProcessor, l1t::tftype type=l1t::tftype::omtf_pos)
Method translating trigger digis into input matrix with global phi coordinates.
xercesc::DOMElement * writeEventHeader(unsigned int eventId, unsigned int mixedEventId=0)
std::vector< l1t::RegionalMuonCand > candidates(unsigned int iProcessor, l1t::tftype mtfType, const std::vector< AlgoMuon > &algoCands)
Definition: OMTFSorter.cc:160
void setNphiBins(unsigned int phiBins)
Definition: OMTFSorter.h:19
edm::ParameterSet m_Config
unsigned int nTestRefHits() const
edm::Handle< CSCCorrelatedLCTDigiCollection > cscDigis
Definition: Run.h:44
void push_back(int bx, T object)