CMS 3D CMS Logo

OMTFPatternMaker.cc
Go to the documentation of this file.
1 #include <iostream>
2 
5 
8 
16 
18 
19 #include "Math/VectorUtil.h"
20 
22 
24  : theConfig(cfg), g4SimTrackSrc(cfg.getParameter<edm::InputTag>("g4SimTrackSrc")) {
25  inputTokenDTPh = consumes<L1MuDTChambPhContainer>(theConfig.getParameter<edm::InputTag>("srcDTPh"));
26  inputTokenDTTh = consumes<L1MuDTChambThContainer>(theConfig.getParameter<edm::InputTag>("srcDTTh"));
27  inputTokenCSC = consumes<CSCCorrelatedLCTDigiCollection>(theConfig.getParameter<edm::InputTag>("srcCSC"));
28  inputTokenRPC = consumes<RPCDigiCollection>(theConfig.getParameter<edm::InputTag>("srcRPC"));
29  inputTokenSimHit = consumes<edm::SimTrackContainer>(theConfig.getParameter<edm::InputTag>("g4SimTrackSrc"));
30 
32  myInputMaker = new OMTFinputMaker(consumesColl);
33 
34  makeGoldenPatterns = theConfig.getParameter<bool>("makeGoldenPatterns");
35  makeConnectionsMaps = theConfig.getParameter<bool>("makeConnectionsMaps");
36  mergeXMLFiles = theConfig.getParameter<bool>("mergeXMLFiles");
37 
38  myOMTFConfig = nullptr;
39 }
43  delete myOMTFConfig;
44  delete myOMTFConfigMaker;
45  delete myOMTF;
46 }
50  const L1TMuonOverlapParamsRcd& omtfParamsRcd = iSetup.get<L1TMuonOverlapParamsRcd>();
51 
52  edm::ESHandle<L1TMuonOverlapParams> omtfParamsHandle;
53  omtfParamsRcd.get(omtfParamsHandle);
54 
55  const L1TMuonOverlapParams* omtfParams = omtfParamsHandle.product();
56 
57  if (!omtfParams) {
58  edm::LogError("L1TMuonOverlapTrackProducer") << "Could not retrieve parameters from Event Setup" << std::endl;
59  }
60 
63 
66  L1TMuonOverlapParams omtfParamsMutable = *omtfParams;
67  std::vector<int> generalParams = *omtfParamsMutable.generalParams();
68  nPdfAddrBits = omtfParams->nPdfAddrBits();
69 
70  if (!mergeXMLFiles)
72  omtfParamsMutable.setGeneralParams(generalParams);
73 
74  myOMTFConfig->configure(&omtfParamsMutable);
77 
79  if (!mergeXMLFiles) {
80  const std::map<Key, GoldenPattern*>& theGPs = myOMTF->getPatterns();
81  for (auto itGP : theGPs)
82  itGP.second->reset();
83  }
84 }
89  myOMTF = new OMTFProcessor();
90 }
96  const std::map<Key, GoldenPattern*>& myGPmap = myOMTF->getPatterns();
97  for (auto itGP : myGPmap) {
98  if (!itGP.second->hasCounts())
99  continue;
100  itGP.second->normalise(nPdfAddrBits);
101  }
102 
103  GoldenPattern dummyGP(Key(0, 0, 0), myOMTFConfig);
104  dummyGP.reset();
105 
107  L1TMuonOverlapParams omtfParamsMutable = *myOMTFConfig->getRawParams();
108  std::vector<int> generalParams = *omtfParamsMutable.generalParams();
110  omtfParamsMutable.setGeneralParams(generalParams);
111  myOMTFConfig->configure(&omtfParamsMutable);
112 
113  for (auto itGP : myGPmap) {
115  unsigned int iPt = theConfig.getParameter<int>("ptCode") + 1;
116  if (iPt > 31)
117  iPt = 200 * 2 + 1;
118  else
119  iPt = RPCConst::ptFromIpt(iPt) * 2.0 +
120  1; //MicroGMT has 0.5 GeV step size, with lower bin edge (uGMT_pt_code - 1)*step_size
122  if (itGP.first.thePtCode == iPt && itGP.first.theCharge == theConfig.getParameter<int>("charge")) {
123  std::cout << *itGP.second << std::endl;
124  myWriter->writeGPData(*itGP.second, dummyGP, dummyGP, dummyGP);
125  }
126  }
127  std::string fName = "GPs.xml";
129  }
130 
133  std::string fName = "Connections.xml";
134  unsigned int iProcessor = 0;
145  }
146 
147  if (mergeXMLFiles) {
149  dummy->reset();
150 
151  std::string fName = "OMTF";
153  const std::map<Key, GoldenPattern*>& myGPmap = myOMTF->getPatterns();
154  for (auto itGP : myGPmap) {
155  myWriter->writeGPData(*itGP.second, *dummy, *dummy, *dummy);
156  }
157  fName = "GPs.xml";
162  fName = "OMTF";
164  myOMTF->averagePatterns(-1);
166  writeMergedGPs();
167  fName = "GPs_4x.xml";
169  }
170 }
174  const std::map<Key, GoldenPattern*>& myGPmap = myOMTF->getPatterns();
175 
177  dummy->reset();
178 
179  unsigned int iPtMin = 9;
180  Key aKey = Key(0, iPtMin, 1);
181  while (myGPmap.find(aKey) != myGPmap.end()) {
182  GoldenPattern* aGP1 = myGPmap.find(aKey)->second;
183  GoldenPattern* aGP2 = dummy;
184  GoldenPattern* aGP3 = dummy;
185  GoldenPattern* aGP4 = dummy;
186 
187  ++aKey.thePtCode;
188  while (myGPmap.find(aKey) == myGPmap.end() && aKey.thePtCode <= 401)
189  ++aKey.thePtCode;
190  if (aKey.thePtCode <= 401 && myGPmap.find(aKey) != myGPmap.end())
191  aGP2 = myGPmap.find(aKey)->second;
192 
193  if (aKey.thePtCode > 71) {
194  ++aKey.thePtCode;
195  while (myGPmap.find(aKey) == myGPmap.end() && aKey.thePtCode <= 401)
196  ++aKey.thePtCode;
197  if (aKey.thePtCode <= 401 && myGPmap.find(aKey) != myGPmap.end())
198  aGP3 = myGPmap.find(aKey)->second;
199 
200  ++aKey.thePtCode;
201  while (myGPmap.find(aKey) == myGPmap.end() && aKey.thePtCode <= 401)
202  ++aKey.thePtCode;
203  if (aKey.thePtCode <= 401 && myGPmap.find(aKey) != myGPmap.end())
204  aGP4 = myGPmap.find(aKey)->second;
205  }
206  ++aKey.thePtCode;
207  while (myGPmap.find(aKey) == myGPmap.end() && aKey.thePtCode <= 401)
208  ++aKey.thePtCode;
209  myWriter->writeGPData(*aGP1, *aGP2, *aGP3, *aGP4);
210 
212  Key aTmpKey = aGP1->key();
213  aTmpKey.theCharge = -1;
214  if (myGPmap.find(aTmpKey) != myGPmap.end())
215  aGP1 = myGPmap.find(aTmpKey)->second;
216  else
217  aGP1 = dummy;
218 
219  aTmpKey = aGP2->key();
220  aTmpKey.theCharge = -1;
221  if (myGPmap.find(aTmpKey) != myGPmap.end())
222  aGP2 = myGPmap.find(aTmpKey)->second;
223  else
224  aGP2 = dummy;
225 
226  aTmpKey = aGP3->key();
227  aTmpKey.theCharge = -1;
228  if (myGPmap.find(aTmpKey) != myGPmap.end())
229  aGP3 = myGPmap.find(aTmpKey)->second;
230  else
231  aGP3 = dummy;
232 
233  aTmpKey = aGP4->key();
234  aTmpKey.theCharge = -1;
235  if (myGPmap.find(aTmpKey) != myGPmap.end())
236  aGP4 = myGPmap.find(aTmpKey)->second;
237  else
238  aGP4 = dummy;
239 
240  myWriter->writeGPData(*aGP1, *aGP2, *aGP3, *aGP4);
241  }
242 }
246  if (mergeXMLFiles)
247  return;
248 
250  const SimTrack* aSimMuon = findSimMuon(iEvent, evSetup);
251  if (!aSimMuon) {
252  edm::LogError("OMTFPatternMaker") << "No SimMuon found in the event!";
253  return;
254  }
255 
257 
262 
264  if (!theConfig.getParameter<bool>("dropDTPrimitives")) {
265  iEvent.getByToken(inputTokenDTPh, dtPhDigis);
266  iEvent.getByToken(inputTokenDTTh, dtThDigis);
267  }
268  if (!theConfig.getParameter<bool>("dropRPCPrimitives"))
269  iEvent.getByToken(inputTokenRPC, rpcDigis);
270  if (!theConfig.getParameter<bool>("dropCSCPrimitives"))
271  iEvent.getByToken(inputTokenCSC, cscDigis);
272 
273  //l1t::tftype mtfType = l1t::tftype::bmtf;
275  //l1t::tftype mtfType = l1t::tftype::emtf_pos;
276 
278  for (unsigned int iProcessor = 0; iProcessor < 6; ++iProcessor) {
281  dtPhDigis.product(), dtThDigis.product(), cscDigis.product(), rpcDigis.product(), iProcessor, mtfType);
282 
286  myOMTFConfigMaker->makeConnetionsMap(iProcessor, myInput);
287 
288  if (makeGoldenPatterns)
289  myOMTF->fillCounts(iProcessor, myInput, aSimMuon);
290  }
291 }
295  const edm::EventSetup& es,
296  const SimTrack* previous) {
297  const SimTrack* result = nullptr;
299  ev.getByToken(inputTokenSimHit, simTks);
300 
301  for (std::vector<SimTrack>::const_iterator it = simTks->begin(); it < simTks->end(); it++) {
302  const SimTrack& aTrack = *it;
303  if (!(aTrack.type() == 13 || aTrack.type() == -13))
304  continue;
305  if (previous && ROOT::Math::VectorUtil::DeltaR(aTrack.momentum(), previous->momentum()) < 0.07)
306  continue;
307  if (!result || aTrack.momentum().pt() > result->momentum().pt())
308  result = &aTrack;
309  }
310  return result;
311 }
OMTFPatternMaker::myWriter
XMLConfigWriter * myWriter
Definition: OMTFPatternMaker.h:75
L1TMuonOverlapParamsRcd
Definition: L1TMuonOverlapParamsRcd.h:23
fakeOmtfParams_cff.omtfParams
omtfParams
OMTF ESProducer.
Definition: fakeOmtfParams_cff.py:11
CoreSimTrack::momentum
const math::XYZTLorentzVectorD & momentum() const
Definition: CoreSimTrack.h:19
OMTFProcessor::fillCounts
void fillCounts(unsigned int iProcessor, const OMTFinput &aInput, const SimTrack *aSimMuon)
Definition: OMTFProcessor.cc:287
MessageLogger.h
OMTFPatternMaker::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: OMTFPatternMaker.cc:245
edm::Handle::product
T const * product() const
Definition: Handle.h:70
OMTFProcessor.h
OMTFConfigMaker::printConnections
void printConnections(std::ostream &out, unsigned int iProcessor, unsigned int iCone)
Definition: OMTFConfigMaker.cc:112
l1t::omtf_pos
Definition: RegionalMuonCandFwd.h:8
l1t::tftype
tftype
Definition: RegionalMuonCandFwd.h:8
OMTFPatternMaker::beginRun
void beginRun(edm::Run const &run, edm::EventSetup const &iSetup) override
Definition: OMTFPatternMaker.cc:49
OMTFConfigMaker
Definition: OMTFConfigMaker.h:17
edm::Run
Definition: Run.h:45
OMTFConfiguration::getMeasurements4D
vector4D & getMeasurements4D()
Definition: OMTFConfiguration.h:122
edm
HLT enums.
Definition: AlignableModifier.h:19
OMTFPatternMaker::makeConnectionsMaps
bool makeConnectionsMaps
Definition: OMTFPatternMaker.h:63
OMTFConfiguration::getRawParams
const L1TMuonOverlapParams * getRawParams() const
Definition: OMTFConfiguration.h:84
Key::thePtCode
unsigned int thePtCode
Definition: GoldenPattern.h:35
gather_cfg.cout
cout
Definition: gather_cfg.py:144
OMTFPatternMaker::~OMTFPatternMaker
~OMTFPatternMaker() override
Definition: OMTFPatternMaker.cc:42
edm::EDConsumerBase::consumesCollector
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
Definition: EDConsumerBase.cc:71
OMTFPatternMaker::beginJob
void beginJob() override
Definition: OMTFPatternMaker.cc:87
OMTFProcessor::getPatterns
const std::map< Key, GoldenPattern * > & getPatterns() const
Return map of GoldenPatterns.
Definition: OMTFProcessor.cc:207
OMTFConfiguration
Definition: OMTFConfiguration.h:44
OMTFPatternMaker.h
edm::Handle< L1MuDTChambPhContainer >
L1TMuonOverlapParams::setGeneralParams
void setGeneralParams(const std::vector< int > &paramsVec)
Definition: L1TMuonOverlapParams.h:134
RPCConst.h
MainPageGenerator.fName
fName
Definition: MainPageGenerator.py:301
OMTFPatternMaker::myInputMaker
OMTFinputMaker * myInputMaker
Definition: OMTFPatternMaker.h:70
MakerMacros.h
OMTFConfiguration.h
XMLConfigWriter::initialiseXMLDocument
void initialiseXMLDocument(const std::string &docName)
Definition: XMLConfigWriter.cc:98
Key
Definition: GoldenPattern.h:15
Key::theCharge
int theCharge
Definition: GoldenPattern.h:36
L1TMuonOverlapParams::generalParams
const std::vector< int > * generalParams() const
General definitions.
Definition: L1TMuonOverlapParams.h:133
OMTFPatternMaker::inputTokenSimHit
edm::EDGetTokenT< edm::SimTrackContainer > inputTokenSimHit
Definition: OMTFPatternMaker.h:59
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
OMTFPatternMaker::endJob
void endJob() override
Definition: OMTFPatternMaker.cc:93
OMTFProcessor
Definition: OMTFProcessor.h:19
OMTFPatternMaker::inputTokenDTTh
edm::EDGetTokenT< L1MuDTChambThContainer > inputTokenDTTh
Definition: OMTFPatternMaker.h:56
edm::ESHandle
Definition: DTSurvey.h:22
L1TMuonOverlapParams
Definition: L1TMuonOverlapParams.h:14
XMLConfigWriter::finaliseXMLDocument
void finaliseXMLDocument(const std::string &fName)
Definition: XMLConfigWriter.cc:114
L1TMuonOverlapParams.h
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
OMTFPatternMaker::nPdfAddrBits
unsigned int nPdfAddrBits
Original pdf width. read from configuration.
Definition: OMTFPatternMaker.h:66
OMTFPatternMaker::makeGoldenPatterns
bool makeGoldenPatterns
Definition: OMTFPatternMaker.h:63
OMTFPatternMaker::myOMTFConfig
OMTFConfiguration * myOMTFConfig
OMTF objects.
Definition: OMTFPatternMaker.h:69
OMTFPatternMaker::inputTokenRPC
edm::EDGetTokenT< RPCDigiCollection > inputTokenRPC
Definition: OMTFPatternMaker.h:58
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
edm::ParameterSet
Definition: ParameterSet.h:36
edm::LogError
Definition: MessageLogger.h:183
OMTFPatternMaker::theConfig
edm::ParameterSet theConfig
Definition: OMTFPatternMaker.h:52
OMTFinputMaker.h
OMTFConfiguration::configure
void configure(const L1TMuonOverlapParams *omtfParams)
Definition: OMTFConfiguration.cc:49
GoldenPattern::key
Key key() const
Definition: GoldenPattern.h:56
OMTFPatternMaker::inputTokenDTPh
edm::EDGetTokenT< L1MuDTChambPhContainer > inputTokenDTPh
Definition: OMTFPatternMaker.h:55
iEvent
int iEvent
Definition: GenABIO.cc:224
OMTFinputMaker
Definition: OMTFinputMaker.h:19
CoreSimTrack::type
int type() const
particle type (HEP PDT convension)
Definition: CoreSimTrack.h:22
edm::EventSetup
Definition: EventSetup.h:57
OMTFinputMaker::buildInputForProcessor
OMTFinput buildInputForProcessor(const L1MuDTChambPhContainer *dtPhDigis, const L1MuDTChambThContainer *dtThDigis, const CSCCorrelatedLCTDigiCollection *cscDigis, const RPCDigiCollection *rpcDigis, unsigned int iProcessor, l1t::tftype type=l1t::tftype::omtf_pos, int bx=0)
Method translating trigger digis into input matrix with global phi coordinates.
Definition: OMTFinputMaker.cc:383
electronAnalyzer_cfi.DeltaR
DeltaR
Definition: electronAnalyzer_cfi.py:33
OMTFConfigMaker::makeConnetionsMap
void makeConnetionsMap(unsigned int iProcessor, const OMTFinput &aInput)
Definition: OMTFConfigMaker.cc:69
OMTFPatternMaker::writeMergedGPs
void writeMergedGPs()
Definition: OMTFPatternMaker.cc:173
looper.cfg
cfg
Definition: looper.py:297
OMTFPatternMaker::mergeXMLFiles
bool mergeXMLFiles
Definition: OMTFPatternMaker.h:63
XMLConfigWriter::writeGPData
void writeGPData(const GoldenPattern &aGP)
Definition: XMLConfigWriter.cc:358
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
GoldenPattern
Definition: GoldenPattern.h:44
writedatasetfile.run
run
Definition: writedatasetfile.py:27
OMTFProcessor::configure
bool configure(const OMTFConfiguration *omtfParams, const L1TMuonOverlapParams *omtfPatterns)
Fill GP map with patterns from CondFormats object.
Definition: OMTFProcessor.cc:36
SimTrack
Definition: SimTrack.h:6
GoldenPattern::reset
void reset()
Reset contents of all data vectors, keeping the vectors size.
Definition: GoldenPattern.cc:136
OMTFPatternMaker::findSimMuon
const SimTrack * findSimMuon(const edm::Event &ev, const edm::EventSetup &es, const SimTrack *previous=nullptr)
Definition: OMTFPatternMaker.cc:294
OMTFPatternMaker::inputTokenCSC
edm::EDGetTokenT< CSCCorrelatedLCTDigiCollection > inputTokenCSC
Definition: OMTFPatternMaker.h:57
OMTFConfigMaker.h
XMLConfigWriter.h
ev
bool ev
Definition: Hydjet2Hadronizer.cc:95
OMTFinputMaker::initialize
void initialize(const edm::EventSetup &, const OMTFConfiguration *)
Definition: OMTFinputMaker.cc:24
OMTFConfigMaker::printPhiMap
void printPhiMap(std::ostream &out)
Definition: OMTFConfigMaker.cc:48
XMLConfigWriter::writeConnectionsData
void writeConnectionsData(const std::vector< std::vector< OMTFConfiguration::vector2D > > &measurements4D)
Definition: XMLConfigWriter.cc:522
OMTFPatternMaker
Definition: OMTFPatternMaker.h:35
edm::eventsetup::EventSetupRecordImplementation::get
PRODUCT const & get(ESGetToken< PRODUCT, T > const &iToken) const
Definition: EventSetupRecordImplementation.h:74
L1TMuonOverlapParamsRcd.h
mps_fire.result
result
Definition: mps_fire.py:303
OMTFPatternMaker::OMTFPatternMaker
OMTFPatternMaker(const edm::ParameterSet &cfg)
Definition: OMTFPatternMaker.cc:23
ConsumesCollector.h
SimTrack.h
dummy
Definition: DummySelector.h:38
OMTFinput.h
edm::Event
Definition: Event.h:73
OMTFinput
Definition: OMTFinput.h:11
edm::InputTag
Definition: InputTag.h:15
XMLConfigWriter
Definition: XMLConfigWriter.h:28
edm::ConsumesCollector
Definition: ConsumesCollector.h:39
OMTFPatternMaker::myOMTFConfigMaker
OMTFConfigMaker * myOMTFConfigMaker
Definition: OMTFPatternMaker.h:74
RPCConst::ptFromIpt
static double ptFromIpt(const int ipt)
Definition: RPCConst.cc:29
L1TMuonOverlapParams::GENERAL_ADDRBITS
Definition: L1TMuonOverlapParams.h:106
OMTFProcessor::averagePatterns
void averagePatterns(int charge)
Definition: OMTFProcessor.cc:114
OMTFPatternMaker::myOMTF
OMTFProcessor * myOMTF
Definition: OMTFPatternMaker.h:71