Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-05-10 02:21:02

0001 /*
0002  * OmtfEmulation.cpp
0003  *
0004  *  Created on: May 20, 2020
0005  *      Author: kbunkow
0006  */
0007 
0008 #include <memory>
0009 
0010 #include "L1Trigger/L1TMuonOverlapPhase2/interface/OmtfEmulation.h"
0011 #include "L1Trigger/L1TMuonOverlapPhase2/interface/InputMakerPhase2.h"
0012 #include "L1Trigger/L1TMuonOverlapPhase2/interface/PtAssignmentNNRegression.h"
0013 
0014 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0015 
0016 #include <memory>
0017 
0018 OmtfEmulation::OmtfEmulation(const edm::ParameterSet& edmParameterSet,
0019                              MuStubsInputTokens& muStubsInputTokens,
0020                              edm::EDGetTokenT<L1Phase2MuDTPhContainer> inputTokenDTPhPhase2)
0021     : OMTFReconstruction(edmParameterSet, muStubsInputTokens), inputTokenDTPhPhase2(inputTokenDTPhPhase2) {}
0022 
0023 void OmtfEmulation::beginJob() {
0024   if (edmParameterSet.exists("usePhase2DTPrimitives") && edmParameterSet.getParameter<bool>("usePhase2DTPrimitives")) {
0025     inputMaker = std::make_unique<InputMakerPhase2>(edmParameterSet,
0026                                                     muStubsInputTokens,
0027                                                     inputTokenDTPhPhase2,
0028                                                     omtfConfig.get(),
0029                                                     std::make_unique<OmtfPhase2AngleConverter>());
0030   } else {
0031     inputMaker = std::make_unique<OMTFinputMaker>(
0032         edmParameterSet, muStubsInputTokens, omtfConfig.get(), std::make_unique<OmtfAngleConverter>());
0033   }
0034 }
0035 
0036 void OmtfEmulation::addObservers(const MuonGeometryTokens& muonGeometryTokens,
0037                                  const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord>& magneticFieldEsToken,
0038                                  const edm::ESGetToken<Propagator, TrackingComponentsRecord>& propagatorEsToken) {
0039   if (observers.empty()) {  //assuring it is done only at the first run
0040     OMTFReconstruction::addObservers(muonGeometryTokens, magneticFieldEsToken, propagatorEsToken);
0041     /*    if(edmParameterSet.exists("patternsPtAssignment") && edmParameterSet.getParameter<bool>("patternsPtAssignment")) {
0042       //std::string rootFileName = edmParameterSet.getParameter<std::string>("dumpHitsFileName");
0043       .emplace_back(std::make_unique<PatternsPtAssignment>(edmParameterSet, omtfConfig.get(), omtfProcGoldenPat->getPatterns(), ""));
0044     }*/
0045   }
0046 
0047   if (edmParameterSet.exists("neuralNetworkFile") && !ptAssignment) {
0048     edm::LogImportant("OMTFReconstruction") << "constructing PtAssignmentNNRegression" << std::endl;
0049     std::string neuralNetworkFile = edmParameterSet.getParameter<edm::FileInPath>("neuralNetworkFile").fullPath();
0050     ptAssignment = std::make_unique<PtAssignmentNNRegression>(edmParameterSet, omtfConfig.get(), neuralNetworkFile);
0051   }
0052 
0053   auto omtfProcGoldenPat = dynamic_cast<OMTFProcessor<GoldenPattern>*>(omtfProc.get());
0054   if (omtfProcGoldenPat) {
0055     omtfProcGoldenPat->setPtAssignment(ptAssignment.get());
0056     //omtfProcGoldenPat can be constructed from scratch each run, so ptAssignment is set herer every run
0057   }
0058 }